网站建设背景浅变色怎么调出来,成都工商注册流程,商城网站怎么建,深圳做消防工程的公司简介
音频组件用于实现音频相关的功能#xff0c;包括音频播放#xff0c;录制#xff0c;音量管理和设备管理。
图 1 音频组件架构图 基本概念
采样
采样是指将连续时域上的模拟信号按照一定的时间间隔采样#xff0c;获取到离散时域上离散信号的过程。
采样率
采样…简介
音频组件用于实现音频相关的功能包括音频播放录制音量管理和设备管理。
图 1 音频组件架构图 基本概念
采样
采样是指将连续时域上的模拟信号按照一定的时间间隔采样获取到离散时域上离散信号的过程。
采样率
采样率为每秒从连续信号中提取并组成离散信号的采样次数单位用赫兹Hz来表示。通常人耳能听到频率范围大约在20Hz20kHz之间的声音。常用的音频采样频率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz、96kHz、192kHz等。
声道
声道是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号所以声道数也就是声音录制时的音源数量或回放时相应的扬声器数量。
音频帧
音频数据是流式的本身没有明确的一帧帧的概念在实际的应用中为了音频算法处理/传输的方便一般约定俗成取2.5ms~60ms为单位的数据量为一帧音频。这个时间被称之为“采样时间”其长度没有特别的标准它是根据编解码器和具体应用的需求来决定的。
PCM
PCMPulse Code Modulation即脉冲编码调制是一种将模拟信号数字化的方法是将时间连续、取值连续的模拟信号转换成时间离散、抽样值离散的数字信号的过程。
目录
仓目录结构如下
/foundation/multimedia/audio_standard # 音频组件业务代码
├── frameworks # 框架代码
│ ├── native # 内部接口实现
│ └── js # 外部接口实现
│ └── napi # napi 外部接口实现
├── interfaces # 接口代码
│ ├── inner_api # 内部接口
│ └── kits # 外部接口
├── sa_profile # 服务配置文件
├── services # 服务代码
├── LICENSE # 证书文件
└── bundle.json # 编译文件使用说明
音频播放
可以使用此仓库内提供的接口将音频数据转换为音频模拟信号使用输出设备播放音频信号以及管理音频播放任务。以下步骤描述了如何使用 AudioRenderer 开发音频播放功能 使用 Create 接口和所需流类型来获取 AudioRenderer 实例。 AudioStreamType streamType STREAM_MUSIC; // 流类型示例
std::unique_ptrAudioRenderer audioRenderer AudioRenderer::Create(streamType);可选静态接口 GetSupportedFormats(), GetSupportedChannels(), GetSupportedEncodingTypes(), GetSupportedSamplingRates() 可用于获取支持的参数。 准备设备调用实例的 SetParams 。 AudioRendererParams rendererParams;
rendererParams.sampleFormat SAMPLE_S16LE;
rendererParams.sampleRate SAMPLE_RATE_44100;
rendererParams.channelCount STEREO;
rendererParams.encodingType ENCODING_PCM;audioRenderer-SetParams(rendererParams);可选使用 audioRenderer-GetParams(rendererParams) 来验证 SetParams。 可选使用 SetAudioEffectMode 和 GetAudioEffectMode 接口来设置和获取当前音频流的音效模式。 AudioEffectMode effectMode EFFECT_DEFAULT;
int32_t result audioRenderer-SetAudioEffectMode(effectMode);
AudioEffectMode mode audioRenderer-GetAudioEffectMode();AudioRenderer 实例调用 audioRenderer-Start() 函数来启动播放任务。 使用 GetBufferSize 接口获取要写入的缓冲区长度。 audioRenderer-GetBufferSize(bufferLen);从源例如音频文件读取要播放的音频数据并将其传输到字节流中。重复调用Write函数写入渲染数据。 bytesToWrite fread(buffer, 1, bufferLen, wavFile);
while ((bytesWritten bytesToWrite) ((bytesToWrite - bytesWritten) minBytes)) {bytesWritten audioRenderer-Write(buffer bytesWritten, bytesToWrite - bytesWritten);if (bytesWritten 0)break;
}调用audioRenderer-Drain()来清空播放流。 调用audioRenderer-Stop()来停止输出。 播放任务完成后调用AudioRenderer实例的audioRenderer-Release()函数来释放资源。
以上提供了基本音频播放使用场景。
使用 audioRenderer-SetVolume(float) 和 audioRenderer-GetVolume() 来设置和获取当前音频流音量, 可选范围为 0.0 到 1.0。
音频录制
可以使用此仓库内提供的接口让应用程序可以完成使用输入设备进行声音录制将语音转换为音频数据并管理录制的任务。以下步骤描述了如何使用 AudioCapturer 开发音频录制功能 使用Create接口和所需流类型来获取 AudioCapturer 实例。 AudioStreamType streamType STREAM_MUSIC;
std::unique_ptrAudioCapturer audioCapturer AudioCapturer::Create(streamType);可选静态接口 GetSupportedFormats(), GetSupportedChannels(), GetSupportedEncodingTypes(), GetSupportedSamplingRates() 可用于获取支持的参数。 准备设备调用实例的 SetParams 。 AudioCapturerParams capturerParams;
capturerParams.sampleFormat SAMPLE_S16LE;
capturerParams.sampleRate SAMPLE_RATE_44100;
capturerParams.channelCount STEREO;
capturerParams.encodingType ENCODING_PCM;audioCapturer-SetParams(capturerParams);可选使用 audioCapturer-GetParams(capturerParams) 来验证 SetParams()。 AudioCapturer 实例调用 AudioCapturer-Start() 函数来启动录音任务。 使用 GetBufferSize 接口获取要写入的缓冲区长度。 audioCapturer-GetBufferSize(bufferLen);读取录制的音频数据并将其转换为字节流。重复调用read函数读取数据直到主动停止。 // set isBlocking true/false for blocking/non-blocking read
bytesRead audioCapturer-Read(*buffer, bufferLen, isBlocking);
while (numBuffersToCapture) {bytesRead audioCapturer-Read(*buffer, bufferLen, isBlockingRead);if (bytesRead 0) {break;} else if (bytesRead 0) {fwrite(buffer, size, bytesRead, recFile); // example shows writes the recorded data into a filenumBuffersToCapture--;}
}可选audioCapturer-Flush() 来清空录音流缓冲区。 AudioCapturer 实例调用 audioCapturer-Stop() 函数停止录音。 录音任务完成后调用 AudioCapturer 实例的 audioCapturer-Release() 函数释放资源。
音频管理
可以使用 [audio_system_manager.h]内的接口来控制音量和设备。 使用 GetInstance 接口获取 AudioSystemManager 实例. AudioSystemManager *audioSystemMgr AudioSystemManager::GetInstance();音量控制 使用 GetMaxVolume 和 GetMinVolume 接口去查询音频流支持的最大和最小音量等级在此范围内设置音量。 AudioVolumeType streamType AudioVolumeType::STREAM_MUSIC;
int32_t maxVol audioSystemMgr-GetMaxVolume(streamType);
int32_t minVol audioSystemMgr-GetMinVolume(streamType);使用 SetVolume 和 GetVolume 接口来设置和获取指定音频流的音量等级。 int32_t result audioSystemMgr-SetVolume(streamType, 10);
int32_t vol audioSystemMgr-GetVolume(streamType);使用 SetMute 和 IsStreamMute 接口来设置和获取指定音频流的静音状态。 int32_t result audioSystemMgr-SetMute(streamType, true);
bool isMute audioSystemMgr-IsStreamMute(streamType);使用 SetRingerMode 和 GetRingerMode 接口来设置和获取铃声模式。参考在 [audio_info.h]定义的 AudioRingerMode 枚举来获取支持的铃声模式。 int32_t result audioSystemMgr-SetRingerMode(RINGER_MODE_SILENT);
AudioRingerMode ringMode audioSystemMgr-GetRingerMode();使用 SetMicrophoneMute 和 IsMicrophoneMute 接口来设置和获取麦克风的静音状态。 int32_t result audioSystemMgr-SetMicrophoneMute(true);
bool isMicMute audioSystemMgr-IsMicrophoneMute();设备控制 使用 GetDevices, deviceType_ 和 deviceRole_ 接口来获取音频输入输出设备信息。 内定义的DeviceFlag, DeviceType 和 DeviceRole 枚举。 DeviceFlag deviceFlag OUTPUT_DEVICES_FLAG;
vectorsptrAudioDeviceDescriptor audioDeviceDescriptors audioSystemMgr-GetDevices(deviceFlag);
sptrAudioDeviceDescriptor audioDeviceDescriptor audioDeviceDescriptors[0];
cout audioDeviceDescriptor-deviceType_;
cout audioDeviceDescriptor-deviceRole_;使用 SetDeviceActive 和 IsDeviceActive 接口去激活/去激活音频设备和获取音频设备激活状态。 ActiveDeviceType deviceType SPEAKER;
int32_t result audioSystemMgr-SetDeviceActive(deviceType, true);
bool isDevActive audioSystemMgr-IsDeviceActive(deviceType);提供其他用途的接口如 IsStreamActive, SetAudioParameter and GetAudioParameter 应用程序可以使用 AudioManagerNapi::On注册系统音量的更改。 在此如果应用程序监听到系统音量更改的事件,就会用以下参数通知应用程序: volumeType : 更改的系统音量的类型 volume : 当前的音量等级 updateUi : 是否需要显示变化详细信息。如果音量被增大/减小将updateUi标志设置为true在其他情况下updateUi设置为false。 const audioManager audio.getAudioManager();export default {onCreate() {audioManager.on(volumeChange, (volumeChange) {console.info(volumeType volumeChange.volumeType);console.info(volume volumeChange.volume);console.info(updateUi volumeChange.updateUi);}}
}音频场景 使用 SetAudioScene 和 getAudioScene 接口去更改和检查音频策略。 int32_t result audioSystemMgr-SetAudioScene(AUDIO_SCENE_PHONE_CALL);
AudioScene audioScene audioSystemMgr-GetAudioScene();有关支持的音频场景请参阅 AudioScene 中的枚举[audio_info.h]
音频流管理
可以使用[audio_stream_manager.h]提供的接口用于流管理功能。 使用 GetInstance 接口获得 AudioSystemManager 实例。 AudioStreamManager *audioStreamMgr AudioStreamManager::GetInstance();使用 RegisterAudioRendererEventListener 为渲染器状态更改注册侦听器。渲染器状态更改回调该回调将在渲染器流状态更改时调用 通过重写 AudioRendererStateChangeCallback 类中的函数 OnRendererStateChange 。 const int32_t clientPid;class RendererStateChangeCallback : public AudioRendererStateChangeCallback {
public:RendererStateChangeCallback default;~RendererStateChangeCallback default;
void OnRendererStateChange(const std::vectorstd::unique_ptrAudioRendererChangeInfo audioRendererChangeInfos) override
{coutOnRendererStateChange enteredendl;
}
};std::shared_ptrAudioRendererStateChangeCallback callback std::make_sharedRendererStateChangeCallback();
int32_t state audioStreamMgr-RegisterAudioRendererEventListener(clientPid, callback);
int32_t result audioStreamMgr-UnregisterAudioRendererEventListener(clientPid);使用 RegisterAudioCapturerEventListener 为捕获器状态更改注册侦听器。 捕获器状态更改回调该回调将在捕获器流状态更改时调用 通过重写 AudioCapturerStateChangeCallback 类中的函数 OnCapturerStateChange 。 const int32_t clientPid;class CapturerStateChangeCallback : public AudioCapturerStateChangeCallback {
public:CapturerStateChangeCallback default;~CapturerStateChangeCallback default;
void OnCapturerStateChange(const std::vectorstd::unique_ptrAudioCapturerChangeInfo audioCapturerChangeInfos) override
{coutOnCapturerStateChange enteredendl;
}
};std::shared_ptrAudioCapturerStateChangeCallback callback std::make_sharedCapturerStateChangeCallback();
int32_t state audioStreamMgr-RegisterAudioCapturerEventListener(clientPid, callback);
int32_t result audioStreamMgr-UnregisterAudioCapturerEventListener(clientPid);使用 GetCurrentRendererChangeInfos 获取所有当前正在运行的流渲染器信息包括clientuid、sessionid、renderinfo、renderstate和输出设备详细信息。 std::vectorstd::unique_ptrAudioRendererChangeInfo audioRendererChangeInfos;
int32_t currentRendererChangeInfo audioStreamMgr-GetCurrentRendererChangeInfos(audioRendererChangeInfos);使用 GetCurrentCapturerChangeInfos 获取所有当前正在运行的流捕获器信息包括clientuid、sessionid、capturerInfo、capturerState和输入设备详细信息。 std::vectorstd::unique_ptrAudioCapturerChangeInfo audioCapturerChangeInfos;
int32_t currentCapturerChangeInfo audioStreamMgr-GetCurrentCapturerChangeInfos(audioCapturerChangeInfos);使用 IsAudioRendererLowLatencySupported 检查低延迟功能是否支持。 const AudioStreamInfo audioStreamInfo;
bool isLatencySupport audioStreamMgr-IsAudioRendererLowLatencySupported(audioStreamInfo);使用 GetEffectInfoArray 接口查询指定[StreamUsage]下可以支持的音效模式。 AudioSceneEffectInfo audioSceneEffectInfo;
int32_t status audioStreamMgr-GetEffectInfoArray(audioSceneEffectInfo,streamUsage);JavaScript 用法:
JavaScript应用可以使用系统提供的音频管理接口来控制音量和设备。 请参考 [js-apis-audio.md]来获取音量和设备管理相关JavaScript接口的用法。
蓝牙SCO呼叫
可以使用提供的接口 [audio_bluetooth_manager.h] 实现同步连接导向链路SCO的蓝牙呼叫。
为监听SCO状态更改您可以使用 OnScoStateChanged.
const BluetoothRemoteDevice device;
int state;
void OnScoStateChanged(const BluetoothRemoteDevice device, int state);(可选) 静态接口 RegisterBluetoothScoAgListener(), UnregisterBluetoothScoAgListener(), 可用于注册蓝牙SCO的侦听器。
支持设备
以下是音频子系统支持的设备类型列表。 USB Type-C Headset 数字耳机包括自己的DAC数模转换器和作为耳机一部分的放大器。 WIRED Headset 模拟耳机内部不包含任何DAC。它可以有3.5mm插孔或不带DAC的C型插孔。 Bluetooth Headset 蓝牙A2DP高级音频分配模式耳机用于无线传输音频。 Internal Speaker and MIC 支持内置扬声器和麦克风并将分别用作播放和录制的默认设备。 鸿蒙OpenHarmony知识已更新←前往