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

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

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

// Unity代码:

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

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

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

SOURCE_TYPE_INVALID,SOURCE_TYPE_MIC,SOURCE_TYPE_VOICE_RECOGNITION...,
  • 1.

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

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); 
  }); 
});
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

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);  // 设备类型 
});
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

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

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

HarmonyOS
2024-11-12 08:46:58
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
put_get

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

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

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

分享
微博
QQ
微信
回复
2024-11-12 15:44:58
相关问题
HarmonyOS 录音,希望能有录音Demo
896浏览 • 1回复 待解决
HarmonyOS 录音功能问题
823浏览 • 1回复 待解决
HarmonyOS录音报错问题
1035浏览 • 1回复 待解决
HarmonyOS 录音音量获取
534浏览 • 1回复 待解决
HarmonyOS 录音上传文件
858浏览 • 1回复 待解决
求大佬告知如何实现录音监听
2820浏览 • 1回复 待解决
HarmonyOS 如何实现实时录音转文字
868浏览 • 1回复 待解决
HarmonyOS录音音频如何存放,以及遍历
1676浏览 • 1回复 待解决
AudioCapturer录音+AudioRenderer播放音频
2352浏览 • 1回复 待解决
HarmonyOS 应用拉起系统录音
1317浏览 • 1回复 待解决
HarmonyOS 录音和语音播放相关demo
682浏览 • 1回复 待解决
HarmonyOS 录音发送Uint8Array
574浏览 • 1回复 待解决
录音如何获取 当前输入音量大小
6211浏览 • 1回复 待解决
js fa怎么实现录音功能呢?
6145浏览 • 1回复 待解决