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