1# 管理全局音频输入设备 2 3有时设备同时连接多个音频输入设备,需要指定音频输入设备进行音频录制,此时需要使用AudioRoutingManager接口进行输入设备的管理,API说明可以参考[AudioRoutingManager API文档](../../reference/apis-audio-kit/js-apis-audio.md#audioroutingmanager9)。 4 5## 创建AudioRoutingManager实例 6 7在使用AudioRoutingManager管理音频设备前,需要先导入模块并创建实例。 8 9```ts 10import { audio } from '@kit.AudioKit'; // 导入audio模块 11 12let audioManager = audio.getAudioManager(); // 需要先创建AudioManager实例 13let audioRoutingManager = audioManager.getRoutingManager(); // 再调用AudioManager的方法创建AudioRoutingManager实例 14``` 15 16## 支持的音频输入设备类型 17 18目前支持的音频输入设备见下表: 19 20| 名称 | 值 | 说明 | 21| -------- | -------- | -------- | 22| WIRED_HEADSET | 3 | 有线耳机,带麦克风。 | 23| BLUETOOTH_SCO | 7 | 蓝牙设备SCO(Synchronous Connection Oriented)连接。 | 24| MIC | 15 | 麦克风。 | 25| USB_HEADSET | 22 | USB耳机,带麦克风。 | 26 27## 获取输入设备信息 28 29使用getDevices()方法可以获取当前所有输入设备的信息。 30 31```ts 32import { audio } from '@kit.AudioKit'; 33 34audioRoutingManager.getDevices(audio.DeviceFlag.INPUT_DEVICES_FLAG).then((data: audio.AudioDeviceDescriptors) => { 35 console.info('Promise returned to indicate that the device list is obtained.'); 36}); 37``` 38 39## 监听设备连接状态变化 40 41可以设置监听事件来监听设备连接状态的变化,当有设备连接或断开时触发回调: 42 43```ts 44import { audio } from '@kit.AudioKit'; 45 46// 监听音频设备状态变化 47audioRoutingManager.on('deviceChange', audio.DeviceFlag.INPUT_DEVICES_FLAG, (deviceChanged: audio.DeviceChangeAction) => { 48 console.info('device change type : ' + deviceChanged.type); // 设备连接状态变化,0为连接,1为断开连接 49 console.info('device descriptor size : ' + deviceChanged.deviceDescriptors.length); 50 console.info('device change descriptor : ' + deviceChanged.deviceDescriptors[0].deviceRole); // 设备角色 51 console.info('device change descriptor : ' + deviceChanged.deviceDescriptors[0].deviceType); // 设备类型 52}); 53 54// 取消监听音频设备状态变化 55audioRoutingManager.off('deviceChange', (deviceChanged: audio.DeviceChangeAction) => { 56 console.info('Should be no callback.'); 57}); 58``` 59<!--Del--> 60## 选择音频输入设备(仅对系统应用开放) 61 62选择音频输入设备,当前只能选择一个输入设备,以设备id作为唯一标识。AudioDeviceDescriptors的具体信息可以参考[AudioDeviceDescriptors](../../reference/apis-audio-kit/js-apis-audio.md#audiodevicedescriptors)。 63 64> **说明:** 65> 66> 用户可以选择连接一组音频设备(如一对蓝牙耳机),但系统侧只感知为一个设备,该组设备共用一个设备id。 67 68```ts 69import { audio } from '@kit.AudioKit'; 70import { BusinessError } from '@kit.BasicServicesKit'; 71 72let inputAudioDeviceDescriptor: audio.AudioDeviceDescriptors = [{ 73 deviceRole : audio.DeviceRole.INPUT_DEVICE, 74 deviceType : audio.DeviceType.EARPIECE, 75 id : 1, 76 name : "", 77 address : "", 78 sampleRates : [44100], 79 channelCounts : [2], 80 channelMasks : [0], 81 networkId : audio.LOCAL_NETWORK_ID, 82 interruptGroupId : 1, 83 volumeGroupId : 1, 84 displayName : "" 85}]; 86 87async function getRoutingManager() { 88 audioRoutingManager.selectInputDevice(inputAudioDeviceDescriptor).then(() => { 89 console.info('Invoke selectInputDevice succeeded.'); 90 }).catch((err: BusinessError) => { 91 console.error(`Invoke selectInputDevice failed, code is ${err.code}, message is ${err.message}`); 92 }); 93} 94 95``` 96<!--DelEnd-->