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
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
APi 11
在HarmonyOS鸿蒙Next中,AudioCapturer.on('readData', xxx)
报错可能由以下原因导致:
-
权限问题:未在
config.json
中正确配置ohos.permission.MICROPHONE
权限,或未在运行时动态申请该权限。 -
回调函数问题:
xxx
回调函数未正确定义或实现,导致无法处理音频数据。 -
AudioCapturer未初始化:
AudioCapturer
实例未正确初始化或配置,如未设置音频源、采样率、声道数等参数。 -
资源冲突:其他应用或系统进程占用了音频资源,导致
AudioCapturer
无法正常访问。 -
系统版本兼容性:当前代码与鸿蒙Next版本不兼容,需检查API文档确认使用的API是否支持当前系统版本。
-
内存或资源不足:系统内存或音频资源不足,导致
AudioCapturer
无法正常工作。 -
回调函数未及时处理数据:
readData
回调函数未及时处理音频数据,导致缓冲区溢出或数据丢失。 -
音频参数不匹配:设置的音频参数(如采样率、声道数)与设备硬件不匹配,导致无法正常录制。
-
事件监听未正确注册:
on
方法未正确注册readData
事件监听器,导致回调函数未被调用。 -
系统Bug:鸿蒙Next系统本身存在Bug,需等待官方修复。
检查以上问题,确保权限、回调函数、初始化、资源、系统版本、内存、音频参数、事件监听等方面均正确配置。
在HarmonyOS鸿蒙Next中,AudioCapturer.on('readData', xxx)
报错可能是由于以下原因:
- 回调函数未正确定义:确保
xxx
是一个有效的回调函数,且参数和返回值符合API要求。 - 权限问题:检查是否已获取
ohos.permission.MICROPHONE
权限。 - AudioCapturer未初始化:确保
AudioCapturer
实例已正确创建并配置。 - 事件监听时机不当:确保在
AudioCapturer
启动后注册事件监听器。
建议检查代码逻辑,确保上述步骤正确执行。