Recorder – 音频录制引擎

Recorder模块实现HaaS平台的音频录制功能,具体接口和参数如下所示。

调用Recorder接口之前,你需要先完成声卡及Audio引擎的初始化工作,具体接口请参考 Snd 模块


使用示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# coding=utf-8
from audio import Snd, Recorder

# 声卡codec驱动注册及audio引擎初始化
Snd.install_codec_driver()
Snd.init()

# 实例化音频录制引擎并创建录音句柄
r0 = Recorder()
r0.create()

# 设置音频录制格式:PCM格式,单通道,16K采样率, 640字节帧长度, 16bit数据位宽
format = 1
read_samples = 640
channels = 2
rate = 16000
bits = 16
r0.set_sink(format, rate, channels, bits, read_samples, 0, None)

#初始化录取音频数据缓存空间
read_size = int(read_samples * channels * bits / 8)
readBuf = bytearray(read_size)

#引入sdcard模块,将录音数据保存成rec.pcm格式存储到sdcard
import uos
fd = uos.open('/sdcard/rec.pcm', 'w')
index = 0

#启动录音并循环100次(具体循环次数由应用决定)
while index < 100:
    rsize = r0.get_stream(readBuf, read_size)
    ws = uos.write(readBuf, 1, rsize, fd)
    index += 1

#关闭文件句柄
uos.close(fd)

#停止录音并释放录音引擎资源
r0.release()

#释放声卡及audio引擎资源
Snd.uninstall_codec_driver()
Snd.deinit()

函数接口

Recorder模块具体接口和参数。


Recorder.set_sink(format, rate, channels, bits, frames, bitrate, sink)[源代码]

请求录音资源并设置录音参数。

参数
  • format(int)

    录音数据编码格式, 可以选择的类型为:

    enum media_format_t

    MEDIA_FMT_UNKNOWN = 0,

    MEDIA_FMT_PCM,

    MEDIA_FMT_WAV,

    MEDIA_FMT_MP3,

    MEDIA_FMT_AAC,

    MEDIA_FMT_M4A,

    MEDIA_FMT_OGG,

    MEDIA_FMT_OPS,

    MEDIA_FMT_SPX,

    MEDIA_FMT_WMA,

    MEDIA_FMT_AMR,

    MEDIA_FMT_AMRWB,

    MEDIA_FMT_FLAC,

  • rate(int) – 采样率,支持采样率包括但不限于:8K, 16K,24K

  • channels(int) – 声道数,取值为1或者2

  • bits(int) – 数据宽度,取值为16,24,32, 通常取值为16

  • frame_samples(int) – 帧长度, 每次录音期待读取的数据

  • sink(str) – 保存路径,对于录音到缓存中的场景,sink设置 None 即可。

返回

0: 成功,其他: 失败

引发

OSError – EINVAL

Recorder.clr_sink()[源代码]

释放录音资源。

参数

返回

0: 成功,其他: 失败

引发

OSError – EINVAL

Recorder.start()[源代码]

开始录音。

参数

返回

0: 成功,其他: 失败

引发

OSError – EINVAL

Recorder.stop()[源代码]

停止录音。

参数

返回

0: 成功,其他: 失败

引发

OSError – EINVAL

Recorder.get_stream(buffer, nbytes)[源代码]

读取指定长度的录音数据并保存到buffer中。

参数
  • buffer(bytearray) – 音频存放的位置

  • nbytes(int) – 期待读取的音频字节数

返回

实际读取到的音频数据字节数,不大于nbytes;负数代表读取失败。

引发

OSError – EINVAL

Recorder.get_state()[源代码]

获取录音引擎状态。

参数

返回

录音音频状态,可以选择的类型为:

enum recorder_state_t

RECORDER_STAT_IDLE = 0,

RECORDER_STAT_READY,

RECORDER_STAT_RUNNING,

RECORDER_STAT_STOP,

RECORDER_STAT_ERROR,

引发

OSError – EINVAL

Recorder.get_position()[源代码]

获取录音进度,单位为秒。

参数

返回

int类型,当前录音进度

引发

OSError – EINVAL

Recorder.ns_enable(enable)[源代码]

是否使能音频降噪NS(Noise Suppression)功能。

参数

enable(int) – 1为允许使能,0为禁止使能

返回

0: 成功,其他: 失败

引发

OSError – EINVAL

Recorder.ec_enable(enable)[源代码]

是否使能回声消除EC(Echo Cancle)功能。

参数

enable(int) – 1为允许使能,0为禁止使能

返回

0: 成功,其他: 失败

引发

OSError – EINVAL

Recorder.agc_enable(enable)[源代码]

是否使能自动增益控制AGC(Auto Gain Control)功能。

参数

enable(int) – 1为允许使能,0为禁止使能

返回

0: 成功,其他: 失败

引发

OSError – EINVAL

Recorder.vad_enable(enable)[源代码]

是否使能语音活性检测VAD(Voice Activity Detection)功能。

参数

enable(int) – 1为允许使能,0为禁止使能

返回

0: 成功,其他: 失败

引发

OSError – EINVAL

Recorder.format_support(format)[源代码]

设置播放器支持的音源类型。

参数

format(int) – 音源类型,具体内容参考 set_sink

返回

0: 成功,其他: 失败。

引发

OSError – EINVAL