首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当其他应用程序使用Mic时,如何获取麦克风数据?

当其他应用程序使用Mic时,如何获取麦克风数据?
EN

Stack Overflow用户
提问于 2020-09-12 11:00:48
回答 1查看 605关注 0票数 2

安卓中多个应用程序间的麦克风音频输入共享

我在使用当前的应用程序时遇到了这个问题,在这个应用程序中,我希望同时在两个(可以是多个)应用程序之间共享麦克风音频。

我尝试通过AudioRecord类记录音频数据。

代码语言:javascript
复制
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC
, 44100, AudioFormat.CHANNEL_IN_STEREO
, AudioFormat.ENCODING_PCM_16BIT
,pcmBufferSize);
//for reading data 
private ByteBuffer buffer = ByteBuffer.allocateDirect(BUFFER_SIZE); //define at class level
.
.
.
buffer.rewind();
audioRecord.read(buffer, buffer.remaining());

问题是,当任何其他应用程序开始使用麦克风时,我们就会得到无声的数据包。

根据正式文件

Android 10 (API级别29)及更高级别的应用程序在运行过程中可以切换输入音频流。在大多数情况下,如果一个新的应用程序获得音频输入,以前的捕捉应用继续运行,但收到沉默。在某些情况下,系统可以继续向这两个应用程序提供音频。下面将解释各种共享场景。

但我已经看到许多应用程序共享音频输入没有任何问题。例如,对于缩放,当一个变焦呼叫正在进行时,我启动一个音频记录器,然后两个应用程序都会获得音频。

另一个例子是欧姆莱特拱廊,他们能够记录麦克风音频,即使麦克风访问其他应用程序。例如:假设我正在通过Omlet Arcade播放一些战斗王牌游戏,那么我的音频就可以被我的队友(在游戏中)听到,也可以被观看我的视频流的人听到。

因此,如果堆栈溢出社区能够引导我找到解决方案,这将是非常有帮助的。

EN

回答 1

Stack Overflow用户

发布于 2020-09-19 09:35:20

不确定您是否查看了您引用的文档的下面部分,但它在下一节中详细说明了为什么某些应用程序可以共享音频输入:

有四种主要的共享方案:

  • 助理+普通应用程序
  • 无障碍服务+普通应用程序
  • 两个普通应用程序
  • 语音呼叫+普通应用程序

语音呼叫+普通应用程序: 如果AudioManager.getMode()返回的音频模式是MODE_IN_CALL或MODE_IN_COMMUNICATION,则语音呼叫是活动的。 Android根据以下规则共享输入音频:

  • 呼叫总是接收音频。
  • 该应用程序可以捕获语音通话,如果它是一个特权(预装)应用程序的许可CAPTURE_AUDIO_OUTPUT。
  • 如果它是可访问性服务,应用程序可以捕获音频。

要捕获语音呼叫的上行链路(TX)、下行链路(RX)或两者,应用程序必须指定音频源MediaRecorder.AudioSource.VOICE_UPLINKMediaRecorder.AudioSource.VOICE_DOWNLINK和/或设备AudioDeviceInfo.TYPE_TELEPHONY

此外,它还指定了如何在Android 11中为录制的音频设置隐私敏感级别,例如将其设置为“不敏感”,允许将音频与其他应用程序共享。希望这有助于理解从哪里开始

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63859616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档