HarmonyOS鸿蒙Next中音频录制AudioCapturer.on('readData',xxx)报错

HarmonyOS鸿蒙Next中音频录制AudioCapturer.on(‘readData’,xxx)报错 对官方AudioCapturer文档使用,.on函数不能编译,报错,寻求解决方案


更多关于HarmonyOS鸿蒙Next中音频录制AudioCapturer.on('readData',xxx)报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

struct AudioCapturerTestPage {

audioStreamInfo: audio.AudioStreamInfo = { samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_48000, // 采样率 channels: audio.AudioChannel.CHANNEL_2, // 通道 sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, // 采样格式 encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW // 编码格式 }; audioCapturerInfo: audio.AudioCapturerInfo = { source: audio.SourceType.SOURCE_TYPE_MIC, capturerFlags: 0 }; audioCapturer: audio.AudioCapturer | null = null audioRendererInfo: audio.AudioRendererInfo = { usage: audio.StreamUsage.STREAM_USAGE_VOICE_COMMUNICATION, rendererFlags: 0 }; filePath: string = ‘’

// 获取 AudioCapturer async getAudioCapturer() { if (this.audioCapturer) { return this.audioCapturer } // 1. 创建 AudioCapturer,配置音频采集参数 const audioCapturer = await audio.createAudioCapturer({ streamInfo: this.audioStreamInfo, capturerInfo: this.audioCapturerInfo }) this.audioCapturer = audioCapturer return audioCapturer }

// 开始录音 async startRecorder() { try { // 1. 创建 AudioCapturer,配置音频采集参数 const audioCapturer = await audio.createAudioCapturer({ streamInfo: this.audioStreamInfo, capturerInfo: this.audioCapturerInfo })

  // 2. 调用on('readData')方法,订阅监听音频数据读入回调
  // audioCapturer
  // 2.1 准备文件,用于写入录音
  const context = getContext()
  // cacheDir    临时文件目录
  // filesDir    持久化文件目录
  const filePath = context.filesDir + '/' + Date.now() + '.wav'
  // 设置成全局
  this.filePath = filePath
  // 打开文件的模式为 fileIo.OpenMode.READ_WRITE 可读可写
  const file = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE)
  // 累加偏移量
  let bufferSize: number = 0;
  // 2.2 注册(订阅)事件,监听音频数据读入
  audioCapturer.on('readData', (buffer) => {
    // writeSync 写文件,设置偏移量,保留原本的数据不被覆盖
    fileIo.writeSync(file.fd, buffer, { offset: bufferSize, length: buffer.byteLength })
    // 累加偏移量
    bufferSize += buffer.byteLength
  })

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

} catch (error) {
  AlertDialog.show({ message: JSON.stringify(error.message, null, 2) })
}

}

//停止录音 async stopRecorder() { const audioCapturer = await this.getAudioCapturer() await audioCapturer.stop() audioCapturer.release() this.audioCapturer = null //清空 }

//播放录音 async startRender() { const audioRenderer = await audio.createAudioRenderer({ streamInfo: this.audioStreamInfo, rendererInfo: this.audioRendererInfo }) let bufferSize: number = 0 const file = fileIo.openSync(this.filePath) //调用on audioRenderer.on(‘writeData’, buffer => { fileIo.readSync(file.fd, buffer, { offset: bufferSize, length: buffer.byteLength }) bufferSize += buffer.byteLength }) audioRenderer.start() }

build() { Navigation() { Scroll() { Column({ space: 10 }) { Button(‘开启权限’) .onClick(() => { audioCapturerManager.requestPermissions() }) Button(‘开始录音’) .onClick(() => { this.startRecorder() }) Button(‘停止录音’) .onClick(() => { this.stopRecorder() }) Button(‘播放录音’) .onClick(() => { this.startRender() }) } .constraintSize({ minHeight: ‘100%’ }) } .width(‘100%’) .height(‘100%’) } .title(’’) .titleMode(NavigationTitleMode.Mini) } }

更多关于HarmonyOS鸿蒙Next中音频录制AudioCapturer.on('readData',xxx)报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


audioCapturer.on(‘readData’)这个事件是一直写入的吗,不需要循环获取缓冲区的长度吧,

你好呀!请问你的问题解决了吗,我也遇到了类似的问题,我是加了readData的监听之后,start就不断报错。

更新了最新的构建版本:5.0.3.200,更新SDK为B.0.18版本 问题自然解决,不排除SDK出现问题或者在最新版本解决的相应BUG

cke_4872.png

在HarmonyOS鸿蒙Next中,AudioCapturer.on('readData', xxx)报错可能由以下原因导致:

  1. 权限问题:未在config.json中正确配置ohos.permission.MICROPHONE权限,或未在运行时动态申请该权限。

  2. 回调函数问题xxx回调函数未正确定义或实现,导致无法处理音频数据。

  3. AudioCapturer未初始化AudioCapturer实例未正确初始化或配置,如未设置音频源、采样率、声道数等参数。

  4. 资源冲突:其他应用或系统进程占用了音频资源,导致AudioCapturer无法正常访问。

  5. 系统版本兼容性:当前代码与鸿蒙Next版本不兼容,需检查API文档确认使用的API是否支持当前系统版本。

  6. 内存或资源不足:系统内存或音频资源不足,导致AudioCapturer无法正常工作。

  7. 回调函数未及时处理数据readData回调函数未及时处理音频数据,导致缓冲区溢出或数据丢失。

  8. 音频参数不匹配:设置的音频参数(如采样率、声道数)与设备硬件不匹配,导致无法正常录制。

  9. 事件监听未正确注册on方法未正确注册readData事件监听器,导致回调函数未被调用。

  10. 系统Bug:鸿蒙Next系统本身存在Bug,需等待官方修复。

检查以上问题,确保权限、回调函数、初始化、资源、系统版本、内存、音频参数、事件监听等方面均正确配置。

在HarmonyOS鸿蒙Next中,AudioCapturer.on('readData', xxx)报错可能是由于以下原因:

  1. 回调函数未正确定义:确保xxx是一个有效的回调函数,且参数和返回值符合API要求。
  2. 权限问题:检查是否已获取ohos.permission.MICROPHONE权限。
  3. AudioCapturer未初始化:确保AudioCapturer实例已正确创建并配置。
  4. 事件监听时机不当:确保在AudioCapturer启动后注册事件监听器。

建议检查代码逻辑,确保上述步骤正确执行。

回到顶部