class Record - 录音

该类提供录音功能。

目前支持型号:EC600N系列、EC800N系列、EC600M-CN(LA、LE)、EC800M-CN(LA、LE、GA)、EG810MCN_GA、EC600U系列、EC200U系列、EG912U、EG915U、EG915N-EUAG。

构造函数

audio.Record

class audio.Record(device)

创建Record对象。

如果传参,请与audio.Audio(device)的参数保持一致。

参数描述:

  • device - 输出通道,int类型,0表示听筒,1表示耳机,2表示喇叭,缺省值为0。具体模块所支持通道详见下表。

模块输出通道对应表

模块型号 听筒 耳机 喇叭
EC200N/EC600N/EC800N 支持 不支持 不支持
EC600M-CN(LA、LE) 支持 不支持 不支持
EC800M-CN(LA、LE、GA) 支持 不支持 不支持
EG810M 支持 不支持 不支持
EG915N/EG912N 支持 不支持 不支持
EG912U 支持 不支持 不支持
EC200U 不支持 不支持 支持
EC600U 支持 支持 支持
EG915U 支持 支持 不支持
EC600S 支持 不支持 不支持
EC600K/EC800K 支持 不支持 不支持
EC800G-CN(GA、TT、LA) 支持 支持 支持
EC600G-CN(LA) 支持 支持 支持

方法

Record.start

Record.start(file_name,seconds)

该方法用于开始录音。

参数描述:

  • file_name - 录音文件名,string类型。
  • seconds - 需要录制时长,单位:秒,int类型。

返回值描述:

0表示成功。

-1表示文件覆盖失败。

-2表示文件打开失败。

-3表示文件正在使用。

-4表示通道设置错误。

-5表示定时器资源申请失败。

-6 表示音频格式检测错误。

Record.stop

Record.stop()

该方法用于停止录音。

返回值描述:

0 表示播放成功,-1表示播放失败。

Record.getFilePath

Record.getFilePath(file_name)

该方法用于读取录音文件的路径。

参数描述:

  • file_name - 录音文件名,string类型。

返回值描述:

成功返回string类型的录音文件路径。

-1表示目标文件不存在。

-2表示文件名长度为0。

Record.getData

Record.getData(file_name, offset, size)

该方法用于读取录音数据。

参数描述:

  • file_name - 录音文件名,string类型。
  • offset - 读取数据的偏移量,int类型。
  • size - 读取大小,单位字节,int类型。注意 :需小于10K。

返回值描述:

成功返回录音数据,bytearray类型。

失败返回值说明如下:

-1表示读取数据错误。

-2表示文件打开失败。

-3表示偏移量设置错误。

-4表示文件正在使用。

-5表示设置超出文件大小(offset+size > file_size)。

-6表示读取size 大于10K。

-7表示内存不足10K。

Record.getSize

Record.getSize(file_name)

该方法用于读取录音文件大小。

参数描述:

  • file_name - 录音文件名,string类型。

返回值描述:

若获取成功,返回文件大小 ,单位字节。

失败返回值如下:

-1表示获取文件大小失败。

-2表示文件打开失败。

-3表示文件正在使用 。

-4表示文件名长度为0。

Record.Delete

Record.Delete(file_name)

该方法用于删除录音文件。

参数描述:

  • file_name - 录音文件名,string类型。

返回值描述:

0表示成功。

-1表示文件不存在。

-2表示文件正在使用。

Record.exists

Record.exists(file_name)

该方法用于判断录音文件是否存在。

参数描述:

  • file_name - 录音文件名,string类型。

返回值描述:

true表示文件存在。

false表示文件不存在。

Record.isBusy

Record.isBusy()

该方法用于判断是否正在录音。

返回值描述:

0表示不在录音,1表示正在录音。

Record.end_callback

Record.end_callback(cb)

该方法用于设置录音结束回调。

参数描述:

cb - 录音结束回调函数,function类型,函数原型:

def cb(audio_msg):
    pass

回调函数参数描述

  • audio_msg - 录音信息,list类型,其中元素如下:

    audio_msg[0]file_path ,文件路径,string类型。

    audio_msg[1]audio_len , 录音长度,int类型。

    audio_msg[2]audio_state ,录音状态,int类型,点此查看回调函数参数audio_state说明表。

返回值描述:

0 表示成功,-1表示失败。

audio_state说明表:

event 说明
-1 发生错误
0 录音开始
3 录音结束

Record.gain

Record.gain(code_gain,dsp_gain)

该方法用于设置录音增益。

目前仅EC600N/EC800N系列模组支持该功能。

参数描述:

  • code_gain - 上行编解码器增益,int型,[0,4]。
  • dsp_gain - 上行数字增益,int型,-36~12

返回值描述:

0 表示成功,-1表示失败。

Record.amrEncDtx_enable

Record.amrEncDtx_enable(on_off)

该方法用于配置amr录音DTX功能开关。

目前仅EC600N/EC800N系列模组支持该功能。

参数描述:

  • on_off - 开关,int型,1:开启,0:关闭 。
  • 不传参数 - 获取当前配置

返回值描述:

不传参:返回当前配置。

传参:参数正确无返回,参数错误抛异常。

Record.stream_start

Record.stream_start(format, samplerate, time)

该方法用于开始录音音频流。注意:录制音频流的同时,应及时读取音频流。目前是采用循环buf,不及时读取,会导致数据丢失。

参数描述:

  • format - 音频格式,int型,目前支持 amr 格式,见常量
  • samplerate - 采样率,int型,目前支持8000 和 16000 。
  • time - 录音时长,int型,单位 S (秒)。

返回值描述:

0 表示成功,-1表示失败。

Record.stream_read

Record.stream_read(read_buf, len)

该方法用于读取录音流。

参数描述

  • read_buf - 录音流buf,bytearray型 。
  • len - 读取的长度,int类型。

返回值描述:

成功返回实际读取的字节数,失败返回整型-1。

常量

Record.AMRNB

amr 格式。

示例:

# -*- coding: UTF-8 -*-
import utime
import audio
from machine import Pin


flag = 1
'''
外接喇叭播放录音文件,参数选择0
'''
aud = audio.Audio(0)
tts = audio.TTS(0)

aud.setVolume(11)

def record_callback(args):
    global flag
    print('file_name:{}'.format(args[0]))
    print('file_size:{}'.format(args[1]))
    print('record_sta:{}'.format(args[2]))

    record_sta = args[2]
    if record_sta == 3:
        print('The recording is over, play it')
        tts.play(1, 0, 2, '录音结束,准备播放录音文件')
        aud.play(1, 0, record.getFilePath('recordfile.wav'))
        flag = 0
    elif record_sta == -1:
        print('The recording failure.')
        tts.play(1, 0, 2, '录音失败')
        flag = 0

record = audio.Record()
record.end_callback(record_callback)
record.start('recordfile.wav', 10)

while 1:
    if flag:
        utime.sleep_ms(200)
    else:
        break