MaixCAM MaixPy 录音

更新历史
日期 版本 作者 更新内容
2024-05-20 1.0.0 lxowalle 初版文档

简介

本文档提供录音的使用方法,支持录入PCMWAV格式的音频。

MaixCAM板载了麦克风,所以你可以直接使用录音功能。

使用方法

获取PCM数据

当构造Recorder对象时不传入path, 则只会录入音频后不会保存到文件中,当然你可以手动保存到文件。

from maix import audio, time, app

r = audio.Recorder()
r.volume(12)
print("sample_rate:{} format:{} channel:{}".format(r.sample_rate(), r.format(), r.channel()))

while not app.need_exit():
    data = r.record()
    print("data size", len(data))

    time.sleep_ms(10)

print("record finish!")

步骤:

  1. 导入audio、time和app模块

    from maix import audio, time, app
    
  2. 初始化录制器

    r = audio.Recorder()
    r.volume(12)
    
    • 注意默认的采样率是48k,采样格式为小端格式-有符号16位,采样通道为1。你也可以像这样自定义参数p = audio.Recorder(sample_rate=48000, format=audio.Format.FMT_S16_LE, channel = 1)。目前只测试过采样率48000,FMT_S16_LE格式,和采样通道数为1

    • r.volume(12)用来设置音量,音量范围为[0,100]

  3. 开始录制

    data = r.record()
    
    • dataPCM格式的bytes类型数据,保存了当前录入的音频。PCM格式在初始化Recorder对象时设置,见步骤2。注意如果录制太快,音频缓冲区没有数据, 则有可能返回一个空的bytes数据。
  4. 完成,做自己的应用时可以对r.record()返回的PCM数据做语音处理。

录制音频并保存为WAV格式

当构造Recorder对象时传入了path, 则录入的音频将会保存到path文件中,并且你也可以通过record方法获取当前录入的PCM数据。path只支持.pcm.wav后缀的路径,并且当录入.wav时,record方法不会返回WAV头部信息,只会返回PCM数据。

from maix import audio, time, app

r = audio.Recorder("/root/output.wav")
r.volume(12)
print("sample_rate:{} format:{} channel:{}".format(r.sample_rate(), r.format(), r.channel()))

while not app.need_exit():
    data = r.record()
    print("data size", len(data))

    time.sleep_ms(10)

print("record finish!")

代码含义基本同上。

录制音频并保存为WAV格式(阻塞)

录入时如果设置了record_ms参数,录入音频会阻塞直到到达record_ms设置的时间,单位ms。

from maix import audio, time, app

r = audio.Recorder("/root/output.wav")
r.volume(12)
print("sample_rate:{} format:{} channel:{}".format(r.sample_rate(), r.format(), r.channel()))

r.record(5000)
print("record finish!")

上面示例将会持续录入5000ms,并保存为WAV格式,录入期间将会阻塞在record方法中,注意当record设置了record_ms后不会返回PCM数据。

其他

PlayerRecorder模块有些bug待解决,请保证它们在其他模块(Camera模块,Display模块等)之前创建。例如:

# 先创建Player和Recorder
p = audio.Player()
r = audio.Recorder()

# 再创建Camera
c = camera.Camera()