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和实现细节。

