音频录制开发指导

场景介绍

音频录制的主要工作是将音频信号记录并保存下来,同时提供包括采样率、声道数、码率、编码格式、封装格式、文件路径等设置功能。

接口说明

表1 media

接口名 描述
media.createAudioRecorder() 创建AudioRecorder实例。
AudioRecorder 提供音频录制相关功能。
AudioRecorderConfig 提供音频录制相关参数设置。

表2 音频录制相关的interface AudioRecorder

接口名 描述
prepare(config: AudioRecorderConfig): void 准备音频录制并设置参数。
start(): void 开始音频录制。
pause(): void 暂停音频录制。(暂不支持)
resume(): void 恢复音频录制。(暂不支持)
stop(): void 停止音频录制。
release(): void 释放音频录制资源。
reset(): void 重置音频录制。
on(‘prepare’, function callback) 订阅音频录制准备事件。
on(‘start’, function callback) 订阅音频录制开始事件。
on(‘pause’, function callback) 订阅音频录制暂停事件。
on(‘resume’, function callback) 订阅音频录制恢复事件。
on(‘stop’,function callback) 订阅音频录制结束事件。
on(‘release’, function callback) 订阅音频录制释放资源事件。
on(‘reset’, function callback) 订阅音频录制重置事件。
on(‘error’, function callback) 订阅音频录制错误事件。

表3 音频录制的相关参数的interface AudioRecorderConfig

接口名 描述
audioEncoder?: AudioEncoder 音频编码格式,默认值是AAC_LC。
audioEncodeBitRate?: number 音频编码的比特率,默认值为48000。
audioSampleRate?: number 音频编码的采样率,默认值为48000。
numberOfChannels?:number 音频的声道数,默认值为2。
format?: AudioOutputFormat 音频的输出格式,默认值是MPEG_4。
uri: string 音频的输出路径。(file://path 或者 file://fd)

表4 AudioEncoder的相关参数的interface AudioEncoder

接口名 描述
AAC_LC = 3 表示AAC_LC编码格式。

表5 音频输出格式的相关参数的interface AudioOutputFormat

接口名 描述
MPEG_4 = 2 表示MPEG_4编码格式。
AAC_ADTS= 6 表示AAC_ADTS编码格式。
  1. 创建音频录制器。

    1. import media from '@ohos.multimedia.media';
    2. var recorder = media.createAudioRecorder();
  2. 准备音频录制参数。

    1. let audioRecorderConfig = {
    2. audioEncoder : AAC_LC ,
    3. audioEncodeBitRate : 22050,
    4. audioSampleRate : 22050,
    5. numberOfChannels : 2,
    6. format : AAC_ADTS,
    7. uri : 'file:///data/accounts/account_0/appdata/appdata/recorder/test.m4a',
    8. }
    9. recorder.prepare(audioRecorderConfig);
  3. 设置消息订阅事件。

    1. recorder.on('prepare', () => {
    2. console.info('setCallback prepare() case callback is called');
    3. recorder.start();
    4. });
    5. recorder.on('start', () => {
    6. console.info('setCallback start() case callback is called');
    7. setTimeout(function(){
    8. recorder.pause();
    9. }, 10000); // 开始录音10秒后,暂停录音。
    10. });
    11. recorder.on('pause', () => {
    12. console.info('setCallback pause() case callback is called');
    13. setTimeout(function(){
    14. recorder.resume();
    15. }, 10000); // 暂停录音10秒后,恢复录音。
    16. });
    17. recorder.on('resume', () => {
    18. console.info('setCallback resume() case callback is called');
    19. setTimeout(function(){
    20. recorder.stop();
    21. }, 10000); // 恢复录音10秒后,停止录音。
    22. });
    23. recorder.on('stop', () => {
    24. console.info('setCallback stop() case callback is called');
    25. recorder.release();
    26. });
    27. recorder.on('release', () => {
    28. console.info('setCallback release() case callback is called');
    29. });
    30. recorder.on('error', (err) => {
    31. console.info(`case error called,errCode is ${err.code}`);
    32. console.info(`case error called,errMessage is ${err.message}`);
    33. recorder.reset();
    34. });