使用AudioCapturer开发音频录制功能

​使用AudioCapturer开发音频录制功能

HarmonyOS
2024-05-20 20:58:50
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
rhyine

AudioCapturer是音频采集器,用于录制PCM(Pulse Code Modulation)音频数据,适合有音频开发经验的开发者实现更灵活的录制功能。本文主要介绍使用AudioCapturer开发音频录制功能,以及在开发过程中遇到的问题。

使用的核心API

1 AudioCapturer状态变化示意图

核心代码解释

1.配置音频采集参数并创建AudioCapturer实例

 import audio from '@ohos.multimedia.audio'; 
  
let audioStreamInfo: audio.AudioStreamInfo = { 
 samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100, 
 channels: audio.AudioChannel.CHANNEL_2, 
 sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, 
 encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW 
}; 
  
let audioCapturerInfo: audio.AudioCapturerInfo = { 
source: audio.SourceType.SOURCE_TYPE_MIC, 
 capturerFlags: 0 
}; 
  
let audioCapturerOptions: audio.AudioCapturerOptions = { 
 streamInfo: audioStreamInfo, 
 capturerInfo: audioCapturerInfo 
}; 
  
audio.createAudioCapturer(audioCapturerOptions, (err, data) => { 
  if (err) { 
    console.error(`Invoke createAudioCapturer failed, code is ${err.code}, message is       ${err.message}`); 
 } else { 
   console.info('Invoke createAudioCapturer succeeded.'); 
   let audioCapturer = data; 
 } 
});

2.调用start()方法进入running状态,开始录制音频。

 audioCapturer.start((err: BusinessError) => { 
  if (err) { 
    console.error(`Capturer start failed, code is ${err.code}, message is ${err.message}`); 
  } else { 
    console.info('Capturer start success.'); 
  } 
});

3.指定录制文件地址,调用read()方法读取缓冲区的数据。

import fs from '@ohos.file.fs'; 
  
 let context = getContext(this); 
 async function read() { 
 let path = context.filesDir; 
 const filePath = path + '/voice_call_data.wav'; 
 let file: fs.File = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 
 let bufferSize: number = await audioCapturer.getBufferSize(); 
 let buffer: ArrayBuffer = await audioCapturer.read(bufferSize, true); 
 fs.writeSync(file.fd, buffer); 
}

4.调用stop()方法停止录制

audioCapturer.stop((err: BusinessError) => { 
 if (err) { 
   console.error(`Capturer stop failed, code is ${err.code}, message is ${err.message}`); 
 } else { 
   console.info('Capturer stopped.'); 
 } 
});

5.调用release()方法销毁实例,释放资源。

audioCapturer.release((err: BusinessError) => { 
  if (err) { 
    console.error(`capturer release failed, code is ${err.code}, message is ${err.message}`); 
  } else { 
    console.info('capturer released.'); 
  } 
});

适配的版本信息

  •  IDE版本:4.0.1.501
  •  SDK版本:OpenHarmony4.0.10.8
分享
微博
QQ
微信
回复
2024-05-21 16:39:15
相关问题
使用AudioRenderer开发音频播放功能
482浏览 • 1回复 待解决
AVplayer开发音频播放功能
485浏览 • 1回复 待解决
音频录制开发相关问题
4460浏览 • 1回复 待解决
鸿蒙JS开发音频管理,导入media错误
2657浏览 • 1回复 已解决
AudioCapturer录音+AudioRenderer播放音频
648浏览 • 1回复 待解决
OpenSL ES音频录制示例调用崩溃
855浏览 • 1回复 待解决
如何实现双路预览+录制功能
478浏览 • 1回复 待解决
SoundPool实现音频播放功能
618浏览 • 1回复 待解决
鸿蒙 如何使用 player 播放网络音频
6009浏览 • 1回复 已解决
使用AudioRenderer播放pcm音频流失败
616浏览 • 1回复 待解决
怎么使用player播放网络音频呢?
2324浏览 • 1回复 待解决
如何开发HarmonyOS应用的流转功能
751浏览 • 1回复 待解决
音频流的音频焦点的请求和释放
550浏览 • 1回复 待解决
PolarDB使用DMS功能是否收费?
1283浏览 • 1回复 待解决
Hi3861开发板的mesh功能
13108浏览 • 4回复 待解决