HarmonyOS 如何指定不同的录音设备进行录音?

​如何指定不同的录音设备进行录音?

目前正在进行APPHarmonyOS化的开发工作,在原有Unity工程中,有选择不同输入设备进行录音的项目需求,比如手机的麦克风,和蓝牙耳机的麦克风。实现如下:

// Unity代码:

Microphone.Start(deviceName, true, nLenSec, nDeviceFreq);

其中deviceName,即输入设备名称。

1,我司在查阅贵司API文档时(API11 Developer Preview1),使用了audio.AudioCapturer进行录音操作,在使用audio.createAudioCapturer函数时,发现传入参数,没有具体输入设备的指定,其中的audio.SourceType,枚举为:

SOURCE_TYPE_INVALID,SOURCE_TYPE_MIC,SOURCE_TYPE_VOICE_RECOGNITION...,

感觉不是指的哪个具体设备。

2,再次查阅文档,发现如下代码,可返回手机麦克风和蓝牙麦克风:​

this.audioRoutingManager.getDevices(audio.DeviceFlag.INPUT_DEVICES_FLAG).then((data: audio.AudioDeviceDescriptors) => { 
  console.info('Promise returned to indicate that the device list is obtained.'); 
  data.forEach((value: audio.AudioDeviceDescriptor)=>{ 
    console.info('device:' + value.deviceType + ' display:'+value.displayName + ' name:'+value.name + ' sample:' + value.sampleRates + ' channel:' + value.channelCounts); 
  }); 
});

3,也能监听到设备的拔插:

// 监听音频设备状态变化 
this.audioRoutingManager.on('deviceChange', audio.DeviceFlag.INPUT_DEVICES_FLAG, (deviceChanged: audio.DeviceChangeAction) => { 
  console.info('device change type : ' + deviceChanged.type);  // 设备连接状态变化,0为连接,1为断开连接 
  console.info('device descriptor size : ' + deviceChanged.deviceDescriptors.length); 
  console.info('device change descriptor : ' + deviceChanged.deviceDescriptors[0].deviceRole);  // 设备角色 
  console.info('device change descriptor : ' + deviceChanged.deviceDescriptors[0].deviceType);  // 设备类型 
});

​当前总结:但仅仅获取这些输入设备列表对我们项目需求还不够,感知设备的拔插,或许可以适时刷新输入设备,但对最终需求还是不能满足。我们的目的,是指定输入设备,比如指定蓝牙耳机麦克风,而不是手机麦克风,进行录音。【但未发现相关API,如有,希望能指出。】

另外,我们想了另一种可能,即HarmonyOS系统,会不会通过在系统界面,选择设备,来指定输入设备的呢?但我们进行了选择音频设备的操作(视频看附件),进行录音后,发现输入设备还是手机麦克风在执行(大概是这样,不太确定),这与我们的预期不符。此外,即使做最好的打算,假设确实这样操作能使输入设备变更,我们也不知道通过什么API来获取当前音频设备已变更的通知,如果有,能否告知,我们再进一步测试。​

HarmonyOS
4天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

​当前三方应用不支持指定录音输入设备,仅系统应用支持此能力。

对于audioRoutingManager.on('preferredInputDeviceChangeForCapturerInfo')这个接口:

这个接口监听的是优先级最高的录音设备,并不是当前录音设备,它的含义是,应用传入一个AudioCapturerInfo,监听的是,如果应用使用这个AudioCapturerInfo开始录音,那么它会使用什么录音设备,因为不同的AudioCapturerInfo可能对应不同的录音设备,所以并不一定就是当前设备(不过大部分场景二者是一致的)​。

分享
微博
QQ
微信
回复
4天前
相关问题
HarmonyOS 录音,希望能有录音Demo
52浏览 • 1回复 待解决
HarmonyOS录音报错问题
406浏览 • 1回复 待解决
HarmonyOS录音音频如何存放,以及遍历
321浏览 • 1回复 待解决
求大佬告知如何实现录音监听
1828浏览 • 1回复 待解决
HarmonyOS 应用拉起系统录音
371浏览 • 1回复 待解决
AudioCapturer录音+AudioRenderer播放音频
1151浏览 • 1回复 待解决
录音如何获取 当前输入音量大小
5526浏览 • 1回复 待解决
js fa怎么实现录音功能呢?
5179浏览 • 1回复 待解决
如何进行不同规格AES加解密
670浏览 • 1回复 待解决