Audio Module

AudioModule 类实现播放、录音功能,并支持重采样。

它用于播放音频文件和流、从麦克风录制音频以及在不同的采样率之间进行转换。

支持以下产品:

Audio Module

UIFLOW2 应用示例

播放 WAV 文件

在 UiFlow2 中打开 cores3_play_wav_example.m5f2 项目。

66.wav

此示例从文件系统读取音频文件并播放。

UiFlow2 代码块:

cores3_play_wav_example.png

示例输出:

None

播放控制

在 UiFlow2 中打开 cores3_playback_controls_example.m5f2 项目。

66.wav

此示例演示如何使用 AudioModule 类控制播放。

播放音频 1 秒,暂停 1 秒,然后继续播放。

UiFlow2 代码块:

cores3_playback_controls_example.png

示例输出:

None

录制音频

在 UiFlow2 中打开 cores3_record_audio_example.m5f2 项目。

此示例从麦克风录制音频并将其保存到 PCM 缓冲区,然后通过扬声器播放。

UiFlow2 代码块:

cores3_record_audio_example.png

示例输出:

None

MicroPython 应用示例

播放 WAV 文件

此示例从文件系统读取音频文件并播放。

MicroPython 代码块:

 1# SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8from module import AudioModule
 9import time
10
11
12audio_0 = None
13
14
15def setup():
16    global audio_0
17
18    M5.begin()
19    Widgets.fillScreen(0x222222)
20
21    audio_0 = AudioModule(
22        0,
23        16000,
24        i2s_sck=7,
25        i2s_ws=6,
26        i2s_di=14,
27        i2s_do=13,
28        i2s_mclk=0,
29        work_mode=AudioModule.MODE_HEADPHONE,
30        offset=False,
31        mux=AudioModule.MUX_NATIONAL,
32    )
33    audio_0.play_wav_file("/flash/res/audio/66.wav")
34    time.sleep(1)
35    audio_0.pause()
36    time.sleep(1)
37    audio_0.resume()
38
39
40def loop():
41    global audio_0
42    M5.update()
43
44
45if __name__ == "__main__":
46    try:
47        setup()
48        while True:
49            loop()
50    except (Exception, KeyboardInterrupt) as e:
51        try:
52            audio_0.deinit()
53            from utility import print_error_msg
54
55            print_error_msg(e)
56        except ImportError:
57            print("please update to latest firmware")

示例输出:

None

播放控制

此示例演示如何使用 AudioModule 类控制播放。

播放音频 1 秒,暂停 1 秒,然后继续播放。

MicroPython 代码块:

 1# SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8from module import AudioModule
 9import time
10
11
12audio_0 = None
13
14
15def setup():
16    global audio_0
17
18    M5.begin()
19    Widgets.fillScreen(0x222222)
20
21    audio_0 = AudioModule(
22        0,
23        16000,
24        i2s_sck=7,
25        i2s_ws=6,
26        i2s_di=14,
27        i2s_do=13,
28        i2s_mclk=0,
29        work_mode=AudioModule.MODE_HEADPHONE,
30        offset=False,
31        mux=AudioModule.MUX_NATIONAL,
32    )
33    audio_0.play_wav_file("/flash/res/audio/66.wav")
34    time.sleep(1)
35    audio_0.pause()
36    time.sleep(1)
37    audio_0.resume()
38
39
40def loop():
41    global audio_0
42    M5.update()
43
44
45if __name__ == "__main__":
46    try:
47        setup()
48        while True:
49            loop()
50    except (Exception, KeyboardInterrupt) as e:
51        try:
52            audio_0.deinit()
53            from utility import print_error_msg
54
55            print_error_msg(e)
56        except ImportError:
57            print("please update to latest firmware")

示例输出:

None

录制音频

此示例从麦克风录制音频并将其保存到 PCM 缓冲区,然后通过扬声器播放。

MicroPython 代码块:

 1# SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8from module import AudioModule
 9
10
11audio_0 = None
12
13
14def setup():
15    global audio_0
16
17    M5.begin()
18    Widgets.fillScreen(0x222222)
19
20    audio_0 = AudioModule(
21        0,
22        16000,
23        i2s_sck=7,
24        i2s_ws=6,
25        i2s_di=14,
26        i2s_do=13,
27        i2s_mclk=0,
28        work_mode=AudioModule.MODE_HEADPHONE,
29        offset=False,
30        mux=AudioModule.MUX_NATIONAL,
31    )
32    audio_0.record(rate=16000, bits=16, channel=AudioModule.STEREO, duration=3000)
33    audio_0.play_raw(
34        audio_0.pcm_buffer, rate=16000, bits=16, channel=AudioModule.STEREO, duration=-1
35    )
36
37
38def loop():
39    global audio_0
40    M5.update()
41
42
43if __name__ == "__main__":
44    try:
45        setup()
46        while True:
47            loop()
48    except (Exception, KeyboardInterrupt) as e:
49        try:
50            audio_0.deinit()
51            from utility import print_error_msg
52
53            print_error_msg(e)
54        except ImportError:
55            print("please update to latest firmware")

示例输出:

None

API参考

Class AudioModule

class module.audio.AudioModule(i2s_port, sample_rate=16000, i2s_sck=19, i2s_ws=27, i2s_di=34, i2s_do=2, i2s_mclk=0, work_mode=1, offset=1, mux=0)

基类:object

初始化 Audio Module。

参数:
  • i2s_port – I2S 端口号。

  • sample_rate – 采样率(默认为 16000)。

  • i2s_sck – I2S时钟引脚。

  • i2s_ws – I2S 字选择引脚。

  • i2s_di – I2S数据输入引脚。

  • i2s_do – I2S数据输出引脚。

  • i2s_mclk – I2S 主时钟引脚。

  • work_mode – 工作模式(0:耳机,1:线路输入)。

  • offset – 一般来说,使用 Line In 时,offset 为 False;如果输入连接了 ADC 麦克风,offset 为 True。(仅在 Line In 模式下有效)。

  • mux – 选择要使用的 TRRS 插头。(默认为 MUX_NATIONAL)。

UiFlow2 代码块:

init.png

MicroPython 代码块:

from module import AudioModule

audio_0 = AudioModule(0, 16000, i2s_sck=7, i2s_ws=6, i2s_di=14, i2s_do=13, i2s_mclk=0, work_mode=AudioModule.MODE_HEADPHONE, offset=False, mux=AudioModule.MUX_NATIONAL)
MUX_NATIONAL = 0

国家标准音频模式 (OMTP)

MUX_AMERICAN = 1

美国标准音频模式(CTIA)

MODE_LINE = 0

线路输入模式

MODE_HEADPHONE = 1

耳机模式

MONO = 1

单声道

STEREO = 2

立体声

play_wav_file(file)

播放 WAV 文件。

参数:

file (str) – 要播放的 WAV 文件的路径。

返回:

None

返回类型:

None

UiFlow2 代码块:

play_wav_file.png

MicroPython 代码块:

audio_0.play_wav_file("/flash/res/audio/test.wav")
tone(freq, duration)

播放简单的音调声音。

参数:
  • freq (int) – 音调的频率(以赫兹为单位)。

  • duration (int) – 音调的持续时间(以毫秒为单位)。

返回:

None

返回类型:

None

UiFlow2 代码块:

tone.png

MicroPython 代码块:

audio_0.tone(2000, 50)
play_wav(buf, duration=-1)

播放 WAV 缓冲区。

参数:
  • buf (bytes) – 要播放的 WAV 缓冲区。

  • duration (int) – WAV 缓冲区的持续时间(以毫秒为单位)。当持续时间为 -1 时,它将播放直到停止。(默认值为 -1)。

返回:

None

返回类型:

None

UiFlow2 代码块:

play_wav.png

MicroPython 代码块:

audio_0.play_wav(wav_buffer, duration=1000)
play_raw(buf, rate=16000, bits=16, channel=2, duration=-1)

播放 pcm 缓冲区。

参数:
  • buf (bytes) – 要播放的 PCM 缓冲区。

  • rate (int) – 采样率(默认为 16000)。

  • bits (int) – 位深度(默认为 16)。

  • channel (int) – 通道数(默认为 2)。

  • duration (int) – PCM 缓冲区的持续时间(以毫秒为单位)。当持续时间为 -1 时,它将播放直到停止。(默认值为 -1)。

返回:

None

返回类型:

None

UiFlow2 代码块:

play_raw.png

MicroPython 代码块:

audio_0.play_raw(pcm_buffer, rate=16000, bits=16, channel=2, duration=1000)
pause()

暂停播放。

UiFlow2 代码块:

pause.png

MicroPython 代码块:

audio.tone(2000, 100)
time.sleep(0.05)
audio_0.pause()
time.sleep(0.05)
audio_0.resume()
返回类型:

None

resume()

继续播放。

UiFlow2 代码块:

resume.png

MicroPython 代码块:

audio.tone(2000, 100)
time.sleep(0.05)
audio_0.pause()
time.sleep(0.05)
audio_0.resume()
stop()

停止播放。

UiFlow2 代码块:

stop.png

MicroPython 代码块:

audio.tone(2000, 100)
time.sleep(0.05)
audio_0.stop()
get_volume()

获取扬声器音量级别。

返回:

音量级别(0-100)。

返回类型:

int

UiFlow2 代码块:

get_volume.png

MicroPython 代码块:

audio_0.get_volume()
set_volume(volume)

设置扬声器音量。

参数:

volume (int) – 音量级别(0-100)。

UiFlow2 代码块:

set_volume.png

MicroPython 代码块:

audio_0.set_volume(50)
record_wav_file(path, rate=16000, bits=16, channel=2, duration=3000)

将音频录制为 WAV 文件。

参数:
  • path (str) – 保存 WAV 文件的路径。

  • rate (int) – 采样率(默认为 16000)。

  • bits (int) – 位深度(默认为 16)。

  • channel (int) – 通道数(默认为 2)。

  • duration (int) – 录音时长(以毫秒为单位)(默认为 3000)。

UiFlow2 代码块:

record_wav_file.png

MicroPython 代码块:

audio_0.record_wav_file("/flash/res/audio/test.wav", rate=16000, bits=16, channel=2, duration=3000)
record(rate=16000, bits=16, channel=2, duration=3000)

将音频录制到 PCM 缓冲区。

参数:
  • rate (int) – 采样率(默认为 16000)。

  • bits (int) – 位深度(默认为 16)。

  • channel (int) – 通道数(默认为 2)。

  • duration (int) – 录音时长(以毫秒为单位)(默认为 3000)。

UiFlow2 代码块:

record.png

MicroPython 代码块:

audio_0.record(rate=16000, bits=16, channel=2, duration=3000)
property pcm_buffer: bytes

获取 PCM 缓冲区。

返回:

PCM缓冲区。

UiFlow2 代码块:

pcm_buffer.png

MicroPython 代码块:

audio_0.pcm_buffer
set_color(num, color)

设置 RGB LED 颜色。

参数:
  • num (int) – LED 编号 (0-2)。

  • color (int) – 颜色值(0xRRGGBB)。

UiFlow2 代码块:

set_color.png

MicroPython 代码块:

audio_0.set_color(0, 0xFF0000)
fill_color(color)

用相同的颜色填充所有 RGB LED。

参数:

color (int) – 颜色值(0xRRGGBB)。

UiFlow2 代码块:

fill_color.png

MicroPython 代码块:

audio_0.fill_color(0xFF0000)
set_brightness(br)

设置 RGB LED 亮度。

参数:

br (int) – 亮度级别(0-100)。

UiFlow2 代码块:

set_brightness.png

MicroPython 代码块:

audio_0.set_brightness(50)