Mic

Mic 用于控制主机内部集成的按键。以下是主机的 Mic 支持详细:

Controller

SPM1423

ES7210

AtomS3

AtomS3 Lite

AtomS3U

StampS3

CoreS3

Core2

TOUGH

Micropython Example:

 1# SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8import time
 9
10
11label0 = None
12
13
14rec_data = None
15
16
17def setup():
18    global label0, rec_data
19
20    M5.begin()
21    Widgets.fillScreen(0x222222)
22    label0 = Widgets.Label("label0", 123, 58, 1.0, 0xFFFFFF, 0x222222, Widgets.FONTS.DejaVu18)
23
24    Speaker.begin()
25    Speaker.setVolumePercentage(1)
26    Speaker.end()
27    Mic.begin()
28    rec_data = bytearray(8000 * 5)
29    label0.setText(str("rec..."))
30    Mic.record(rec_data, 8000, False)
31    while Mic.isRecording():
32        time.sleep_ms(500)
33    Mic.end()
34    Speaker.begin()
35    label0.setText(str("play..."))
36    Speaker.playRaw(rec_data, 8000)
37    while Speaker.isPlaying():
38        time.sleep_ms(500)
39    label0.setText(str("done"))
40
41
42def loop():
43    global label0, rec_data
44    M5.update()
45
46
47if __name__ == "__main__":
48    try:
49        setup()
50        while True:
51            loop()
52    except (Exception, KeyboardInterrupt) as e:
53        try:
54            from utility import print_error_msg
55
56            print_error_msg(e)
57        except ImportError:
58            print("please update to latest firmware")

UIFLOW2 Example:

example.png

cores3_mic_example.m5f2

class Mic

重要

Methods of the Mic Class heavily rely on M5.begin() M5.begin.png and M5.update() M5.update.png.

All calls to methods of Mic objects should be placed after M5.begin() M5.begin.png, and M5.update() M5.update.png should be called in the main loop.

Methods

Mic.config([cfg:mic_config_t])
Mic.config('param')
Mic.config(param=value)

获取或者设置 Mic 对象的参数。

当不传入任何参数时,会返回 mic_config_t 的对象。当传入一个 mic_config_t 的对象, Mic 会设置 Mic 的所有支持的参数。

当传入下表中的参数, Mic 会对传入的参数进行获取或者设置。

以下是支持的参数:

Parameter

Type

Description

pin_data_in

(integer)

I2S 的串行数据线,用二进制补码表示的音频数据。

pin_bck

(integer)

I2S 的串行时钟线,对应数字音频的每一位数据。

pin_mck

(integer)

I2S 的主时钟线。一般为了使系统间能够更好地同步时增加MCLK信号,MCLK的频率 = 256 * 采样频率。

pin_ws

(integer)

I2S 的帧时钟,用于切换左右声道的数据。

sample_rate

(integer)

输入音频的目标采样率。

stereo

(boolean)

使用双声道输出。

over_sampling

(integer)

求平均值的采样次数。

magnification

(integer)

输入值的乘数。

noise_filter_level

(integer)

先前值的系数,用于噪声过滤。

use_adc

(boolean)

使用模拟输入麦克风(仅需要 pin_data_in )。

dma_buf_len

(integer)

I2S 的DMA缓冲区长度。

dma_buf_count

(integer)

I2S 的DMA缓冲区数量。

task_priority

(integer)

后台任务优先级。

task_pinned_core

(integer)

后台任务使用的CPU。

i2s_port

(integer)

I2S端口。

UIFLOW2:

读取属性:

Python:

Mic.config("pin_data_in")

get_config_boolean.png

get_config_int.png

设置属性:

Python:

Mic.config(pin_data_in=1)

set_config_int.png

set_config_boolean.png

Mic.begin() bool

启动 Mic 功能。执行成功返回 True 。

UIFLOW2:

begin.png

Mic.end() bool

Stop the Mic function. Returns True if successful.

UIFLOW2:

end.png

Mic.isRunning() bool

获取 Mic 是否处于运行状态, 返回bool类型。

UIFLOW2:

isRunning.png

Mic.isEnabled() bool

获取 Mic 是否处于使能状态, 返回bool类型。

UIFLOW2:

isEnabled.png

Mic.isRecording() int

获取 Mic 是否处于录音状态, 返回int类型。

返回值:

  • 0=not recording

  • 1=recording (There’s room in the queue)

  • 2=recording (There’s no room in the queue.)

UIFLOW2:

isRecording.png

Mic.setSampleRate(sample_rate) None

设置采样率。参数 sample_rate 一般有 8000 , 11025 ,22050 ,32000 ,44100

UIFLOW2:

setSampleRate.png

Mic.record(rec_data[, rate[, stereo]]) bool

Record audio data.

参数 rec_data 要求传入一个buffer。参数 rate 一般有 8000, 11025,22050,32000,44100, 默认填8000。参数 stereo 传入True或者False。

UIFLOW2:

record.png

class mic_config_t

mic_config_t.pin_data_in: int

I2S 的串行数据线,用二进制补码表示的音频数据。

mic_config_t.pin_bck: int

I2S 的串行时钟线,对应数字音频的每一位数据。

mic_config_t.pin_mck: int

I2S 的主时钟线。一般为了使系统间能够更好地同步时增加MCLK信号,MCLK的频率 = 256 * 采样频率。

mic_config_t.pin_ws: int

I2S 的帧时钟,用于切换左右声道的数据。

mic_config_t.sample_rate: int

输入音频的目标采样率。

mic_config_t.stereo: bool

使用双声道输出。

mic_config_t.over_sampling: int

求平均值的采样次数。

mic_config_t.magnification: int

输入值的乘数。

mic_config_t.noise_filter_level: int

先前值的系数,用于噪声过滤。

mic_config_t.use_adc: bool

使用模拟输入麦克风(仅需要 pin_data_in )。

mic_config_t.dma_buf_len: int

I2S 的DMA缓冲区长度。

mic_config_t.dma_buf_count: int

I2S 的DMA缓冲区数量。

mic_config_t.task_priority: int

后台任务优先级。

mic_config_t.task_pinned_core: int

后台任务使用的CPU。

mic_config_t.i2s_port: int

I2S端口。