音频设备管理
介绍跟音频设备管理相关的方法和回调。
enumeratePlaybackDevices
获取系统中所有的播放设备列表。
List<AudioDeviceInfo> enumeratePlaybackDevices();
详情
返回值
- 方法调用成功,返回 AudioDeviceInfo 数组,包含所有音频播放设备的设备 ID 和设备名称。
- 方法调用失败: 返回空列表。
enumerateRecordingDevices
获取系统中所有的音频采集设备列表。
List<AudioDeviceInfo> enumerateRecordingDevices();
详情
返回值
- 方法调用成功,返回一个 AudioDeviceInfo 数组,包含所有音频采集设备的设备 ID 和设备名称。
- 方法调用失败: 返回空列表。
followSystemLoopbackDevice
设置声卡采集设备是否跟随系统默认的播放设备。
Future<void> followSystemLoopbackDevice(bool enable);
详情
方法仅适用于 Windows 和 macOS。
参数
- enable
- 是否跟随系统默认的播放设备:
true
:跟随。当系统默认播放设备发生改变时,SDK 立即跟随切换声卡采集设备。false
:不跟随。只有当 SDK 使用的声卡采集设备被移除后,SDK 才切换至系统默认的音频播放设备。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
followSystemPlaybackDevice
设置 SDK 使用的音频播放设备跟随系统默认的音频播放设备。
Future<void> followSystemPlaybackDevice(bool enable);
详情
参数
- enable
- 是否跟随系统默认的音频播放设备:
true
:跟随。当系统默认音频播放设备发生改变时,SDK 立即切换音频播放设备。false
:不跟随。只有当 SDK 使用的音频播放设备被移除后,SDK 才切换至系统默认的音频播放设备。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
followSystemRecordingDevice
设置 SDK 使用的音频采集设备跟随系统默认的音频采集设备。
Future<void> followSystemRecordingDevice(bool enable);
详情
- enable
- 是否跟随系统默认的音频采集设备:
true
:跟随。当系统默认的音频采集设备改变时,SDK 立即切换音频采集设备。false
:不跟随。只有当 SDK 使用的音频采集设备被移除后,SDK 才切换至系统默认的音频采集设备。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0:方法调用失败
getAudioDeviceInfo
获取音频设备信息。
Future<DeviceInfo> getAudioDeviceInfo();
详情
调用该方法后,你可以获取音频设备是否支持极低延时采集和播放。
- 该方法仅适用于 Android 平台。
- 该方法在加入频道前后均可调用。
返回值
- 非空:方法调用成功。
- 空:方法调用失败。
getAudioDeviceManager
获取 AudioDeviceManager 对象,以管理音频设备。
AudioDeviceManager getAudioDeviceManager();
返回值
一个 AudioDeviceManager 对象。
getLoopbackDevice
获取当前的声卡采集设备。
Future<String> getLoopbackDevice();
详情
该方法仅适用于 Windows 和 macOS。
返回值
当前声卡采集设备的 ID。
getPlaybackDefaultDevice
获取系统默认的音频播放设备。
Future<AudioDeviceInfo> getPlaybackDefaultDevice();
详情
返回值
默认音频播放设备的信息。详见 AudioDeviceInfo。
getPlaybackDevice
获取当前音频播放设备。
Future<String> getPlaybackDevice();
详情
返回值
当前音频播放设备。
getPlaybackDeviceInfo
获取音频播放设备信息。
Future<AudioDeviceInfo> getPlaybackDeviceInfo();
详情
返回值
AudioDeviceInfo 对象,包含音频播放设备的设备 ID 和设备名称。
getRecordingDefaultDevice
获取系统默认的音频采集设备。
Future<AudioDeviceInfo> getRecordingDefaultDevice();
详情
返回值
默认音频采集设备的信息。详见 AudioDeviceInfo。
getRecordingDevice
获取当前音频采集设备。
Future<String> getRecordingDevice();
详情
返回值
当前音频采集设备。
getRecordingDeviceInfo
获取音频采集设备信息。
Future<AudioDeviceInfo> getRecordingDeviceInfo();
详情
返回值
AudioDeviceInfo 对象,包含音频采集设备的设备 ID 和设备名称。
isSpeakerphoneEnabled
检查扬声器状态启用状态。
Future<bool> isSpeakerphoneEnabled();
- 该方法仅适用于 Android 和 iOS。
- 该方法在加入频道前后都能调用。
返回值
true
: 扬声器已开启,语音会输出到扬声器。false
: 扬声器未开启,语音会输出到非扬声器(听筒,耳机等)。
release
释放 AudioDeviceManager 对象占用的所有资源。
Future<void> release();
setEnableSpeakerphone
开启或关闭扬声器播放。
Future<void> setEnableSpeakerphone(bool speakerOn);
详情
如果 SDK 默认的音频路由(见音频路由)或 setDefaultAudioRouteToSpeakerphone 的设置无法满足你的需求,你可以调用 setEnableSpeakerphone 切换当前的音频路由。成功改变音频路由后,SDK 会触发 onAudioRoutingChanged 回调。
该方法只设置用户在当前频道内使用的音频路由,不会影响 SDK 默认的音频路由。如果用户离开当前频道并加入新的频道,则用户还是会使用 SDK 默认的音频路由。
- 该方法仅适用于 Android 和 iOS 平台。
- 该方法需要在加入频道后调用。
- 如果用户使用了蓝牙耳机、有线耳机等外接音频播放设备,则该方法的设置无效,音频只会通过外接设备播放。当有多个外接设备时,音频会通过最后一个接入的设备播放。
参数
- speakerOn
-
设置是否开启扬声器播放:
true
: 开启。音频路由为扬声器。false
: 关闭。音频路由为听筒。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
setLoopbackDevice
指定声卡采集设备。
Future<void> setLoopbackDevice(String deviceId);
详情
SDK 默认采用当前的播放设备作为声卡采集设备,如果想要指定其他音频设备作为声卡采集设备,则调用该方法并设置 deviceId 为你想要指定的声卡采集设备。
该方法可以更改当前的音频采集设备,但不改变系统默认的音频采集设备。假设系统默认的音频采集设备是麦克风 1,你在加入频道前调用该方法设置当前的音频路由为声卡 1,如果在此时进行设备检测,SDK 会对声卡 1 做设备检测。检测结束后,当你加入频道时 SDK 依然会选择使用系统默认的音频采集设备,即麦克风 1。
该方法仅适用于 Windows 和 macOS。
该方法适用的场景如下:
- 如果设置声卡采集设备为蓝牙耳机,则 SDK 会将 app A 中的音乐发布到远端。
- 如果设置声卡采集设备设置为扬声器,则 SDK 不会将 app A 中的音乐发布到远端。
- 如果设置声卡采集设备为蓝牙耳机后,又改用有线耳机播放 app A 中的音乐,则需要重新调用该方法,设置声卡采集设备为有线耳机,则 SDK 会继续将 app A 中的音乐发布到远端。
参数
- deviceId
-
指定 SDK 的声卡采集设备。由 enumeratePlaybackDevices 获取。插拔设备不会影响 deviceId。
最大长度为 MaxDeviceIdLengthType。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
setPlaybackDevice
指定播放设备。
Future<void> setPlaybackDevice(String deviceId);
详情
该方法可以更改当前的音频路由,但不会改变系统默认的音频路由。假设系统默认的音频路由是扬声器 1,你在加入频道前调用该方法设置当前的音频路由为扬声器 2,如果在此时进行设备检测,SDK 会对扬声器 2 进行检测。检测结束后,当你加入频道时 SDK 依然会选择使用系统默认的音频路由,即扬声器 1。
参数
- deviceId
-
指定播放设备。由 enumeratePlaybackDevices 获取。插拔设备不会影响 deviceId。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
setRecordingDevice
指定音频采集设备。
Future<void> setRecordingDevice(String deviceId);
详情
该方法可以更改当前的音频采集设备,但不改变系统默认的音频采集设备。假设系统默认的音频采集设备是麦克风 1,你在加入频道前调用该方法设置当前的音频路由为蓝牙耳机 1,如果在此时进行设备检测,SDK 会对蓝牙耳机 1 进行检测。检测结束后,当你加入频道时 SDK 依然会选择使用系统默认的音频采集设备,即麦克风 1。
参数
- deviceId
-
音频采集设备的 Device ID。可通过 enumerateRecordingDevices 获取。插拔设备不会影响 deviceId。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
setRecordingDeviceVolume
设置音频采集设备音量。
Future<void> setRecordingDeviceVolume(int volume);
详情
该方法仅适用于 Windows 和 macOS。
参数
- volume
- 音频采集设备音量。取值范围 [0,255]。0 代表无声,255 代表最大音量。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
startAudioDeviceLoopbackTest
开始音频设备回路测试。
Future<void> startAudioDeviceLoopbackTest(int indicationInterval);
详情
该方法测试音频采集和播放设备是否能正常工作。一旦测试开始,音频采集设备会采集本地音频,然后使用音频播放设备播放出来。SDK 会按设置的时间间隔触发两个 onAudioVolumeIndication 回调,分别报告音频采集设备(uid = 0)和音频播放设置(uid = 1)的音量信息。
- 该方法仅适用于 Windows 和 macOS。
- 该方法在加入频道前后都可调用。
- 该方法仅支持主播角色调用。
- 该方法仅在本地进行音频设备测试,不涉及网络连接。
- 完成测试后,必须调用 stopAudioDeviceLoopbackTest 停止音频设备回路测试。
参数
- indicationInterval
- SDK 触发 onAudioVolumeIndication 回调的时间间隔,单位为毫秒。建议设置到大于 200 毫秒。不得少于 10 毫秒,否则会收不到 onAudioVolumeIndication 回调。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
startPlaybackDeviceTest
启动音频播放设备测试。
Future<void> startPlaybackDeviceTest(String testAudioFilePath);
详情
该方法测试音频播放设备是否能正常工作。启动测试后,SDK 播放指定的音频文件,测试者如果能听到声音,说明播放设备能正常工作。
调用该方法后,SDK 会每隔 100 ms 触发一次 onAudioVolumeIndication 回调,报告 uid = 1 及播放设备的音量信息。
- 该方法需要在加入频道前调用。
- 该方法仅适用于 Windows 和 macOS。
参数
- testAudioFilePath
-
音频文件的绝对路径,路径字符串使用 UTF-8 编码格式。
- 支持文件格式: wav、mp3、m4a、aac。
- 支持文件采样率: 8000、16000、32000、44100、48000。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
startRecordingDeviceTest
启动音频采集设备测试。
Future<void> startRecordingDeviceTest(int indicationInterval);
详情
该方法测试音频采集设备是否能正常工作。调用该方法后,SDK 会按设置的时间间隔触发 onAudioVolumeIndication 回调,报告 uid = 0 及采集设备的音量信息。
- 该方法仅适用于 Windows 和 macOS。
- 该方法需要在加入频道前调用。
参数
- indicationInterval
- SDK 触发 onAudioVolumeIndication 回调的时间间隔,单位为毫秒。建议设置到大于 200 毫秒。不得小于 10 毫秒,否则会收不到 onAudioVolumeIndication 回调。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
stopAudioDeviceLoopbackTest
停止音频设备回路测试。
Future<void> stopAudioDeviceLoopbackTest();
详情
- 该方法仅适用于 Windows 和 macOS。
- 该方法在加入频道前后都可调用。
- 该方法仅支持主播角色调用。
- 在调用 startAudioDeviceLoopbackTest 后,必须调用该方法停止音频设备回路测试。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
stopPlaybackDeviceTest
停止音频播放设备测试。
Future<void> stopPlaybackDeviceTest();
详情
该方法停止音频播放设备测试。调用 startPlaybackDeviceTest 后,必须调用该方法停止测试。
- 该方法仅适用于 Windows 和 macOS。
- 该方法需要在加入频道前调用。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
stopRecordingDeviceTest
停止音频采集设备测试。
Future<void> stopRecordingDeviceTest();
详情
该方法停止音频采集设备测试。调用 startRecordingDeviceTest 后,必须调用该方法停止测试。
- 该方法仅适用于 Windows 和 macOS。
- 该方法需要在加入频道前调用。
异常
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。
- < 0: 方法调用失败。
onAudioDeviceStateChanged
音频设备变化回调。
final void Function(String deviceId, MediaDeviceType deviceType, MediaDeviceStateType deviceState)? onAudioDeviceStateChanged;
提示系统音频设备状态发生改变,比如耳机被拔出。
参数
- deviceId
- 设备 ID。
- deviceType
- 设备类型定义。详见 MediaDeviceType。
- deviceState
- 设备状态。
onAudioDeviceVolumeChanged
音频设备或 app 的音量发生改变回调。
final void Function(MediaDeviceType deviceType, int volume, bool muted)? onAudioDeviceVolumeChanged;
当音频播放、采集设备或 app 的音量发生改变时,会触发该回调。
参数
- deviceType
- 设备类型定义。详见 MediaDeviceType。
- volume
- 音量。范围为 [0,255]。
- muted
-
音频设备是否为静音状态:
true
: 音频设备已静音。false
: 音频设备未被静音。