音频设备管理
enumeratePlaybackDevices
枚举系统中的音频播放设备。
virtual IAudioDeviceCollection *enumeratePlaybackDevices() = 0;
该方法返回一个 IAudioDeviceCollection 对象,包含系统中的所有音频播放设备。使用该对象后,必须调用 release 方法释放资源。
返回值
- 方法调用成功,返回一个 IAudioDeviceCollection 对象,详见 IAudioDeviceCollection。
- 方法调用失败,返回 NULL。
enumerateRecordingDevices
枚举音频采集设备。
virtual IAudioDeviceCollection *enumerateRecordingDevices() = 0;
该方法返回一个 IAudioDeviceCollection 对象,其中包含系统中的所有音频采集设备。使用该对象后,你必须调用 release 方法释放资源。
返回值
- 方法调用成功,返回 IAudioDeviceCollection 对象,详见 IAudioDeviceCollection。
- 方法调用失败,返回 NULL。
followSystemLoopbackDevice
followSystemPlaybackDevice
followSystemRecordingDevice
getApplicationVolume
getAudioDeviceInfo
获取音频设备信息。
virtual int getAudioDeviceInfo(DeviceInfo& deviceInfo) = 0;
调用该方法可以获取音频设备是否支持超低延迟采集和播放。
- 该方法仅适用于 Android 平台。
- 你可以在加入频道前或后调用该方法。
参数
- deviceInfo
- 输入和输出参数,表示音频设备信息。详见 DeviceInfo。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
getCount
获取音频播放设备或音频采集设备的总数。
virtual int getCount() = 0;
如果在调用该方法前调用了 enumeratePlaybackDevices,SDK 会返回音频播放设备的数量;如果在调用该方法前调用了 enumerateRecordingDevices,SDK 会返回音频采集设备的数量。
返回值
方法调用成功,返回音频播放设备或音频采集设备的总数。
所属接口类getDefaultDevice [2/2]
获取系统默认音频设备及其类型。
virtual int getDefaultDevice(char deviceName[MAX_DEVICE_ID_LENGTH], char deviceTypeName[MAX_DEVICE_ID_LENGTH], char deviceId[MAX_DEVICE_ID_LENGTH]) = 0;
该方法仅适用于 macOS 平台。调用该方法前,你需要先调用 enumeratePlaybackDevices 或 enumerateRecordingDevices 获取设备列表。
参数
- deviceName
- 输出参数,系统默认音频设备的名称。
- deviceTypeName
- 输出参数,音频设备的类型,例如内置设备、USB 或 HDMI。
- deviceId
- 输出参数,系统默认音频设备的设备 ID。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
getDefaultDevice [1/2]
获取系统默认音频设备。
virtual int getDefaultDevice(char deviceName[MAX_DEVICE_ID_LENGTH], char deviceId[MAX_DEVICE_ID_LENGTH]) = 0;
- 该方法仅适用于 Windows 和 macOS 平台。
- 在调用该方法前,你需要先调用 enumeratePlaybackDevices 或 enumerateRecordingDevices 获取设备列表。
参数
- deviceName
- 输出参数,系统默认音频设备的名称。
- deviceId
- 输出参数,系统默认音频设备的设备 ID。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
getDevice [2/2]
按索引获取音频设备的名称、类型和 ID。
virtual int getDevice(int index, char deviceName[MAX_DEVICE_ID_LENGTH], char deviceTypeName[MAX_DEVICE_ID_LENGTH], char deviceId[MAX_DEVICE_ID_LENGTH]) = 0;
参数
- index
- 设备的索引。
- deviceName
- 输出参数,设备名称。
- deviceTypeName
- 输出参数,音频设备的类型,例如内建、USB 和 HDMI。
- deviceId
- 输出参数,设备 ID。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
getDevice [1/2]
获取指定索引的视频设备的信息。
virtual int getDevice(int index, char deviceName[MAX_DEVICE_ID_LENGTH], char deviceId[MAX_DEVICE_ID_LENGTH]) = 0;
参数
- index
- 视频设备的索引值。该值必须小于 getCount 返回的设备数量。
- deviceName
- 输出参数,表示设备名称。最大长度为 MAX_DEVICE_ID_LENGTH_TYPE。
- deviceId
- 输出参数,表示视频设备的设备 ID。最大长度为 MAX_DEVICE_ID_LENGTH_TYPE。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
getLoopbackDevice
getPlaybackDevice
getPlaybackDeviceInfo [1/2]
获取音频播放设备的信息。
virtual int getPlaybackDeviceInfo(char deviceId[MAX_DEVICE_ID_LENGTH], char deviceName[MAX_DEVICE_ID_LENGTH]) = 0;
参数
- deviceId
- 音频播放设备的 ID,最大长度为 MAX_DEVICE_ID_LENGTH_TYPE。
- deviceName
- 输出参数,播放设备的名称,最大长度为 MAX_DEVICE_ID_LENGTH_TYPE。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
getPlaybackDeviceInfo [2/2]
获取音频播放设备的信息和类型。
virtual int getPlaybackDeviceInfo(char deviceId[MAX_DEVICE_ID_LENGTH], char deviceName[MAX_DEVICE_ID_LENGTH], char deviceTypeName[MAX_DEVICE_ID_LENGTH]) = 0;
该方法仅适用于 macOS 平台。
参数
- deviceId
- 音频播放设备的 ID。
- deviceName
- 输出参数,播放设备的名称。
- deviceTypeName
- 输出参数,音频播放设备的类型,例如内置设备、USB 和 HDMI。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
getPlaybackDeviceMute
getPlaybackDeviceVolume
getRecordingDevice
getRecordingDeviceInfo [1/2]
getRecordingDeviceInfo [2/2]
获取音频采集设备的信息和类型。
virtual int getRecordingDeviceInfo(char deviceId[MAX_DEVICE_ID_LENGTH], char deviceName[MAX_DEVICE_ID_LENGTH], char deviceTypeName[MAX_DEVICE_ID_LENGTH]) = 0;
该方法仅适用于 macOS 平台。
参数
- deviceId
- 音频播放设备的 ID,最大长度为 MAX_DEVICE_ID_LENGTH_TYPE。
- deviceName
- 输出参数,表示播放设备的名称,最大长度为 MAX_DEVICE_ID_LENGTH_TYPE。
- deviceTypeName
- 输出参数,表示音频采集设备的类型,例如内置设备、USB 和 HDMI,最大长度为 MAX_DEVICE_ID_LENGTH_TYPE。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
getRecordingDeviceMute
getRecordingDeviceVolume
isApplicationMute
release
release
setApplicationMute
setApplicationVolume
setDevice
指定视频采集设备的设备 ID。
virtual int setDevice(const char deviceId[MAX_DEVICE_ID_LENGTH]) = 0;
- 插拔设备不会改变其设备 ID。
- 该方法仅适用于 Windows 和 macOS 平台。
参数
- deviceId
- 设备 ID。你可以通过调用 enumerateVideoDevices 获取。信息最大长度为 MAX_DEVICE_ID_LENGTH_TYPE。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
setLoopbackDevice
设置 SDK 的声卡采集设备。
virtual int setLoopbackDevice(const char deviceId[MAX_DEVICE_ID_LENGTH]) = 0;
SDK 默认使用当前播放设备作为声卡采集设备。如果你希望指定其他音频设备作为声卡采集设备,可以调用该方法,并将 deviceId 设置为目标设备。你可以通过该方法更改当前使用的音频路由,但不会更改默认音频路由。例如,若默认音频路由为麦克风,在加入频道前调用该方法将音频路由设置为声卡并开始设备测试,SDK 会在声卡上进行测试。测试完成并加入频道后,SDK 仍使用麦克风进行音频采集。
适用场景
- 如果将声卡采集设备设置为蓝牙耳机,SDK 会将 App A 播放的音乐发布到远端。
- 如果将声卡采集设备设置为扬声器,SDK 不会将 App A 播放的音乐发布到远端。
- 如果先将声卡采集设备设置为蓝牙耳机,之后改用有线耳机播放 App A 的音乐,则需要再次调用该方法,将声卡采集设备设置为有线耳机,SDK 才会继续将音乐发布到远端。
参数
- deviceId
- 指定 SDK 的声卡采集设备。你可以通过调用 enumeratePlaybackDevices 获取设备 ID。最大长度为 MAX_DEVICE_ID_LENGTH_TYPE。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
setPlaybackDevice
设置音频播放设备。
virtual int setPlaybackDevice(const char deviceId[MAX_DEVICE_ID_LENGTH]) = 0;
你可以调用此方法更改当前使用的音频路由,但不会更改默认音频路由。例如,若默认音频路由为扬声器 1,在加入频道前调用此方法将音频路由设置为扬声器 2 并开始设备测试,SDK 会在扬声器 2 上进行设备测试。设备测试完成并加入频道后,SDK 仍会使用默认音频路由扬声器 1。
参数
- deviceId
- 指定音频播放设备的 ID。你可以通过调用 enumeratePlaybackDevices 获取设备 ID。连接或断开音频设备不会改变
deviceId的值。信息最大长度为 MAX_DEVICE_ID_LENGTH_TYPE。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
setPlaybackDeviceMute
setPlaybackDeviceVolume
setRecordingDevice
设置音频采集设备。
virtual int setRecordingDevice(const char deviceId[MAX_DEVICE_ID_LENGTH]) = 0;
你可以调用此方法更改当前使用的音频路由,但不会更改默认音频路由。例如,默认音频路由为麦克风,在加入频道前调用此方法将音频路由设置为蓝牙耳机并开始设备测试,SDK 会在蓝牙耳机上进行设备测试。设备测试完成并加入频道后,SDK 仍使用麦克风进行音频采集。
参数
- deviceId
- 音频采集设备的 ID。你可以通过调用 enumerateRecordingDevices 获取设备 ID。连接或断开音频设备不会改变
deviceId的值。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
setRecordingDeviceMute
setRecordingDeviceVolume
startAudioDeviceLoopbackTest
开始音频设备回路测试。
virtual int startAudioDeviceLoopbackTest(int indicationInterval) = 0;
该方法用于测试本地音频采集设备和播放设备是否正常工作。调用该方法后,音频采集设备会采集本地音频,音频播放设备会播放采集到的音频。SDK 会按照设置的时间间隔触发两个独立的 onAudioVolumeIndication 回调,分别报告采集设备(uid = 0)和播放设备(uid = 1)的音量信息。
- 该方法仅适用于 Windows 和 macOS 平台。
- 可以在加入频道前或加入频道后调用该方法。
- 该方法仅在主播角色调用时生效。
- 该方法仅测试本地音频设备,不涉及网络状况。
- 测试完成后,请调用 stopAudioDeviceLoopbackTest 停止音频设备回路测试。
参数
- indicationInterval
- SDK 触发 onAudioVolumeIndication 回调的时间间隔(毫秒)。建议设置为大于 200 毫秒的值。该值不能小于 10 毫秒,否则无法收到 onAudioVolumeIndication 回调。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
startPlaybackDeviceTest
开始本地音频播放设备测试。
virtual int startPlaybackDeviceTest(const char *testAudioFilePath) = 0;
该方法用于测试本地音频播放设备是否正常工作。调用该方法后,SDK 会播放你指定的音频文件。如果你能听到声音,说明播放设备工作正常。调用该方法后,SDK 每 100 毫秒触发一次 onAudioVolumeIndication 回调,报告 uid = 1 及播放设备的音量信息。该方法与 startEchoTest 的区别在于,startPlaybackDeviceTest 仅检测本地音频播放设备是否正常,而 startEchoTest 可同时检测音视频设备和网络状况。
参数
- testAudioFilePath
- 音频文件路径,UTF-8 编码的字符串。支持的文件格式包括 wav、mp3、m4a 和 aac。支持的采样率包括 8000、16000、32000、44100 和 48000 Hz。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
startRecordingDeviceTest
开始音频采集设备测试。
virtual int startRecordingDeviceTest(int indicationInterval) = 0;
调用该方法可以测试本地音频采集设备是否正常工作。调用后,SDK 会按照设定的时间间隔触发 onAudioVolumeIndication 回调,报告 uid 为 0 的采集设备音量信息。该方法仅检测本地音频采集设备,而 startEchoTest 方法还可检测音视频设备和网络状况。
参数
- indicationInterval
- 触发 onAudioVolumeIndication 回调的时间间隔(毫秒)。该值必须大于 10,否则无法收到 onAudioVolumeIndication 回调,且 SDK 返回错误码 -2。建议设置为 100。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
- -2:参数无效,请检查参数设置。
stopAudioDeviceLoopbackTest
停止音频设备回路测试。
virtual int stopAudioDeviceLoopbackTest() = 0;
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
stopPlaybackDeviceTest
停止音频播放设备测试。
virtual int stopPlaybackDeviceTest() = 0;
调用 startPlaybackDeviceTest 开始测试后,必须调用该方法停止测试。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
stopRecordingDeviceTest
停止音频采集设备测试。
virtual int stopRecordingDeviceTest() = 0;
调用 startRecordingDeviceTest 开始音频采集设备测试后,必须调用该方法停止测试。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
onAudioDeviceStateChanged
音频设备状态发生变化回调。
virtual void onAudioDeviceStateChanged(const char* deviceId, int deviceType, int deviceState)
该回调用于通知音频设备的状态发生变化,例如设备上的耳机被拔出。
参数
- deviceId
- 设备 ID。
- deviceType
- 设备类型,详见 MEDIA_DEVICE_TYPE。
- deviceState
- 设备状态,详见 MEDIA_DEVICE_STATE_TYPE。
onAudioDeviceVolumeChanged
音频设备或 App 音量变化时触发的回调。
virtual void onAudioDeviceVolumeChanged(MEDIA_DEVICE_TYPE deviceType, int volume, bool muted)
参数
- deviceType
- 设备类型,详见 MEDIA_DEVICE_TYPE。
- volume
- 音量值,范围为 [0, 255]。
- muted
- 音频设备是否静音:
- true:音频设备已静音。
- false:音频设备未静音。