音频设备管理
更新时间: 2024/09/18 16:26:13
在音频场景中,您可能需要根据实际的场地情况选择采用音频的采集和播放设备,例如在室内场景中选用听筒进行音频播放。NERTC SDK 支持自由切换音频设备。
注意事项
耳机连接时,自动使用耳机播放。此时即使设置音频播放设备为扬声器或听筒,仍旧使用耳机播放,耳机断开连接时,恢复音频播放设备的配置。
实现方法
-
获取音频设备列表。
- 在初始化 RTC SDK 后,调用
IRtcEngine.AudioDeviceManager
方法获得IAudioDeviceManager
实例。
cpp
IRtcEngine rtcEngine = IRtcEngine.GetInstance(); private void GetAudioDeviceManager(){ var manager = rtcEngine.AudioDeviceManager; if(manager != null){ //仅桌面端支持 //TODO: } }
- 调用
EnumerateRecordDevices
方法获取录音设备列表,调用EnumeratePlayoutDevices
方法获取播放设备列表。
cpp
IRtcEngine rtcEngine = IRtcEngine.GetInstance(); //枚举采集(麦克风)设备 private void GetAudioRecordDevices() { var collection = rtcEngine.AudioDeviceManager.EnumerateRecordDevices(); if(collection == null) { return; } for(int idx = 0; idx < collection.GetCount(); idx++) { string deviceId = null; string deviceName = null; int result = collection.GetDevice((ushort)idx, out deviceName, out deviceId); if(result != (int)RtcErrorCode.kNERtcNoError) // { continue; } //TODO: } collection.Destroy(); } //枚举播放设备 private void GetAudioPlaybackDevices() { var collection = rtcEngine.AudioDeviceManager.EnumeratePlayoutDevices(); if (collection == null) { return; } for (int idx = 0; idx < collection.GetCount(); idx++) { string deviceId = null; string deviceName = null; int result = collection.GetDevice((ushort)idx, out deviceName, out deviceId); if (result != (int)RtcErrorCode.kNERtcNoError) { continue; } //TODO: } collection.Destroy(); }
- 在初始化 RTC SDK 后,调用
-
指定音频采集设备和播放设备。
调用
SetRecordDevice
指定音频采集设备,调用SetPlayoutDevice
指定音频播放设备。cpp
IRtcEngine rtcEngine = IRtcEngine.GetInstance(); //设置采集设备 private void SetRecordDevice() { //默认sdk自动选择设备 rtcEngine.AudioDeviceManager.SetRecordDevice(RtcConstants.kNERtcAudioDeviceAutoID); //选择指定设备 string deviceId = "YOUR SELECTED DEVICE ID";//通过枚举设备获得deviceId rtcEngine.AudioDeviceManager.SetRecordDevice(deviceId); } //设置采集设备 private void SetPlayoutDevice() { //默认sdk自动选择设备 rtcEngine.AudioDeviceManager.SetPlayoutDevice(RtcConstants.kNERtcAudioDeviceAutoID); //选择指定设备 string deviceId = "YOUR SELECTED DEVICE ID";//通过枚举设备获得deviceId rtcEngine.AudioDeviceManager.SetPlayoutDevice(deviceId); }
-
操作音频设备。
指定音频采集设备和播放设备之后,就可以通过 AudioDeviceManager 提供的一系列 API 操作音频设备,实现设备的静音、音量调节等功能。
- 调用
SetRecordDeviceVolume
方法设置音频采集设备的音量。 - 调用
SetPlayoutDeviceVolume
方法设置音频播放设备的音量。
cpp
IRtcEngine rtcEngine = IRtcEngine.GetInstance(); private void SetDeviceVolume() { uint volume = 90; //设置音频采集设备的音量 rtcEngine.AudioDeviceManager.SetRecordDeviceVolume(volume); //设置音频播放设备的音量 rtcEngine.AudioDeviceManager.SetPlayoutDeviceVolume(volume); } //静音设备 private void MuteDevice() { bool muted = true; //静音麦克风(桌面端) rtcEngine.AudioDeviceManager.SetRecordDeviceMute(muted); //静音扬声器(桌面端) rtcEngine.AudioDeviceManager.SetPlayoutDeviceMute(muted); //静音麦克风(桌面端、移动端) rtcEngine.SetRecordDeviceMute(muted); //静音扬声器(桌面端、移动端) rtcEngine.SetPlayoutDeviceMute(muted); }
操作音量除了使用
SetRecordDeviceVolume
或SetPlayoutDeviceVolume
接口,还可以使用AdjustRecordingSignalVolume
或AdjustPlaybackSignalVolume
这对接口。二者的区别在于,前者修改的是设备音量,若其他应用程序也在使用当前设备,则会同样影响其他应用程序的声音大小。而后者只修改信号音量,不会影响其他应用程序。
- 调用
-
获取设备状态。
- 调用
GetRecordDeviceMute
获取音频采集设备、播放设备的静音状态。 - 调用
GetPlayoutDeviceMute
获取音频播放设备的静音状态。 - 调用
GetRecordDeviceVolume
获取音频采集设备的音量。 - 调用
GetPlayoutDeviceVolume
获取音频播放设备的音量。
cpp
IRtcEngine rtcEngine = IRtcEngine.GetInstance(); private void GetDeviceMute(){ bool muted = false; //静音麦克风(桌面端) rtcEngine.AudioDeviceManager.GetRecordDeviceMute(ref muted); //静音扬声器(桌面端) rtcEngine.AudioDeviceManager.GetPlayoutDeviceMute(ref muted); //静音麦克风(桌面端、移动端) rtcEngine.GetRecordDeviceMute(ref muted); //静音扬声器(桌面端、移动端) rtcEngine.GetPlayoutDeviceMute(ref muted); } //获取设备音量(桌面端) private void GetDeviceVolume() { uint volume = 0; //获取音频采集设备的音量 rtcEngine.AudioDeviceManager.GetRecordDeviceVolume(ref volume); //获取音频播放设备的音量 rtcEngine.AudioDeviceManager.GetPlayoutDeviceVolume(ref volume); }
- 调用
-
音频设备测试。
在加入房间之前,我们经常会测试已设置的设备以确保其可用性和正常工作。您可以通过如下两种方式测试音频设备的可用性:
-
同时测试录音设备与播放设备。
调用
StartAudioDeviceLoopbackTest
或StopAudioDeviceLoopbackTest
接口,可以将录音设备采集到的声音输送到播放设备,同时测试录音设备与播放设备。cpp
//开始音频设备检测 private void startAudioDeviceLoopbackTest() { //监听本端音量变化 rtcEngine.OnLocalAudioVolumeIndication = OnLocalAudioVolumeIndicationHandler; rtcEngine.AudioDeviceManager.StartAudioDeviceLoopbackTest(1000); } private void OnLocalAudioVolumeIndicationHandler(int volume, bool enableVad) { //TODO: } //关闭音频设备检测 private void stopAudioDeviceLoopbackTest() { rtcEngine.AudioDeviceManager.StopAudioDeviceLoopbackTest(); }
-
分别测试录音设备与播放设备
cpp
IRtcEngine rtcEngine = IRtcEngine.GetInstance(); private void startRecordDeviceTest() { //监听本端音量变化 rtcEngine.OnLocalAudioVolumeIndication = OnLocalAudioVolumeIndicationHandler; //开启麦克风设备检测 rtcEngine.AudioDeviceManager.StartRecordDeviceTest(1000); } private void OnLocalAudioVolumeIndicationHandler(int volume, bool enableVad) { //TODO: } //关闭麦克风检测 private void stopRecordDeviceTest() { rtcEngine.AudioDeviceManager.StopRecordDeviceTest(); } //扬声器设备检测 private void startPlayoutDeviceTest() { //测试文件,如D:/test.mp3 string testFile = "/path/to/file"; rtcEngine.AudioDeviceManager.startPlayoutDeviceTest(testFile); } //关闭扬声器设备检测 pri void stopPlayoutDeviceTest() { rtcEngine.AudioDeviceManager.StopPlayoutDeviceTest(); }
-
此文档是否对你有帮助?