HarmonyOS鸿蒙Next中如何进行录音功能?是否有相关demo呢?

HarmonyOS鸿蒙Next中如何进行录音功能?是否有相关demo呢? 如何进行录音功能? 是否有相关demo呢?

3 回复
录音功能核心代码:

```javascript
// 开始录制对应的流程

async startRecordingProcess() {

  try {

    if (this.avRecorder == undefined) {

      // 1.创建录制实例
      this.avRecorder = await media.createAVRecorder();

    }

    this.setAudioRecorderCallback();

    // 2.获取录制文件fd赋予avConfig里的url;参考FilePicker文档
    this.curFile = fileIo.openSync(this.filesDir + '/Audio_' + new Date().getTime() + '.mp4', fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);

    this.avConfig.url = 'fd://' + this.curFile.fd;

    // 3.配置录制参数完成准备工作
    await this.avRecorder.prepare(this.avConfig);

    // 4.开始录制
    this.textTimerController.start()

    await this.avRecorder.start();

    this.recordFlag = true;

  } catch (err) {

    console.log(TAG, 'startRecordingProcess' + JSON.stringify(err))

  }

}

播放录音关键代码如下:

private avPlayer?: media.AVPlayer
Text('播放录音').width(60).height(40).backgroundColor(Color.Red).onClick(() =>{

  this.avPlayerUrlDemo()

  console.log('播放录音')

})
async avPlayerUrlDemo() {

  // 创建avPlayer实例对象
  let avPlayer: media.AVPlayer = await media.createAVPlayer();

  this.setAVPlayerCallback(avPlayer);

  let fdPath = 'fd://';

  let context = getContext(this) as common.UIAbilityContext;

  // 通过UIAbilityContext获取沙箱地址filesDir,以Stage模型为例
  let pathDir = context.filesDir;

  console.info(pathDir)

  let path = pathDir + '/jzAudio.m4a';

  // 打开相应的资源文件地址获取fd,并为url赋值触发initialized状态机上报
  let file = await fs.open(path);

  fdPath = fdPath + '' + file.fd;

  avPlayer.url = fdPath;

}
// 注册avplayer回调函数
setAVPlayerCallback(avPlayer1: media.AVPlayer) {

  this.avPlayer = avPlayer1

  // seek操作结果回调函数
  this.avPlayer.on('seekDone', (seekDoneTime: number) => {

    console.info(`AVPlayer seek succeeded, seek time is ${seekDoneTime}`);

  })

  // error回调监听函数,当avPlayer在操作过程中出现错误时调用 reset接口触发重置流程
  this.avPlayer.on('error', (err: BusinessError) => {

    console.error(`Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`);

    this.avPlayer!.reset(); // 调用reset重置资源,触发idle状态

  })

  // 状态机变化回调函数
  this.avPlayer.on('stateChange', async (state: string, reason: media.StateChangeReason) => {

    switch (state) {

      case 'idle': // 成功调用reset接口后触发该状态机上报
        console.info('AVPlayer state idle called.');

        this.avPlayer!.release(); // 调用release接口销毁实例对象

        break;

      case 'initialized': // avplayer 设置播放源后触发该状态上报
        console.info('AVPlayer state initialized called.');

        this.avPlayer!.prepare();

        break;

      case 'prepared': // prepare调用成功后上报该状态机
        console.info('AVPlayer state prepared called.');

        this.avPlayer!.play(); // 调用播放接口开始播放

        break;

      default:
        console.info('AVPlayer state unknown called.');

        break;

    }

  })

}

更多关于HarmonyOS鸿蒙Next中如何进行录音功能?是否有相关demo呢?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,录音功能主要通过AudioCapturer类实现。首先,需要在config.json中声明ohos.permission.MICROPHONE权限。然后,使用AudioCapturer进行音频采集和录制。以下是一个简单的录音示例代码:

import audio from '@ohos.multimedia.audio';

// 创建AudioCapturer实例
let audioCapturerInfo = {
    source: audio.SourceType.SOURCE_TYPE_MIC,
    sampleRate: audio.AudioSamplingRate.SAMPLE_RATE_44100,
    channels: audio.AudioChannel.CHANNEL_1,
    sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE,
    encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW
};

let audioCapturer = await audio.createAudioCapturer(audioCapturerInfo);

// 开始录音
audioCapturer.start();

// 读取音频数据
let bufferSize = await audioCapturer.getBufferSize();
let buffer = new ArrayBuffer(bufferSize);
audioCapturer.read(buffer);

// 停止录音
audioCapturer.stop();

// 释放资源
audioCapturer.release();

相关Demo可以在华为开发者联盟的HarmonyOS示例代码库中找到,具体路径为HarmonyOS-Samples/Multimedia/AudioCapturerDemo

在HarmonyOS Next中,可以通过AudioCapturer类实现录音功能。首先,创建AudioCapturer实例并配置音频参数,如采样率、声道数和音频格式。然后,调用start()方法开始录音,通过read()方法获取音频数据。录音结束后,调用stop()release()方法释放资源。官方文档提供了详细的API说明和示例代码,建议参考开发文档获取最新demo和实现细节。

回到顶部