往期知识点整理
背景
应用开发过程中很多场景都有音频采集需求,比如聊天功能的发送语音功能,实时语音转文本功能,实时语音通话,实时视频通话等。在Android和iOS端,系统提供了两种形式:
- 实时音频流采集
- 音频文件录制
系统还提供了不同形式的API,比如Android:
- AudioRecorder Java接口
- MediaRecorder Java接口
- OpenSLES C++接口
- AAudio C++接口
在 鸿蒙 化适配的过程中也有音频采集的需求,本文我们一步一步实现音频采集功能。
音频录制接口介绍
HarmonyOS 提供了TS与C++两种音频采集接口:
- AudioCapture
- OHAudio
分别介绍这两种语言的API。
AudioCapture
使用AudioCapturer录制音频涉及到AudioCapturer实例的创建、音频采集参数的配置、采集的开始与停止、资源的释放等,下面官方给出的状态示意图将方法和状态切换标记的很清晰:
createAudioCapture
创建capture主要涉及到参数配置:
import { audio } from '@kit.AudioKit';
let 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 // 编码格式
};
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) {
} else {
let audioCapturer = data;
}
});
参数包含两大块:
- AudioStreamInfo:音频格式配置信息
- samplingRate:采样率
- channels:声道数
- sampleFormat:采样格式
- encodingType:音频编码类型,目前只支持PCM的ENCODING_TYPE_RAW配置
- AudioCapturerInfo:采集配置信息
- source:音源类型,包含:
- SOURCE_TYPE_INVALID:无效的音频源
- SOURCE_TYPE_MIC:Mic音频源
- SOURCE_TYPE_VOICE_RECOGNITION:语音识别源
- SOURCE_TYPE_PLAYBACK_CAPTURE:播放音频流(内录)录制音频源
- SOURCE_TYPE_VOICE_COMMUNICATION:语音通话场景的音频源
- SOURCE_TYPE_VOICE_MESSAGEÿ
- source:音源类型,包含: