weixin_43889242
weixin_43889242
2019-03-09 16:33

安卓两个录音线程冲突的问题?

5
  • java
  • android

安卓两个录音线程冲突的问题:我在做一个音频制作的安卓项目,用到了一个第三方JNI库。有一个活动里我想在按下一个按钮时,同时开始录音(用AudioRecord)和用麦克风检测外界声音的频率(开启JNI,然后process不停调用JNI里的一个检测函数)。

但很明显发生了冲突,如果是前者先开始录音,后者检测不到东西,用来存储检测到的数值的arraylist的是空的;如果后者先开始不停检测,前者录不到任何声音,只能得到一个空的的wav文件。很明显他们两个的数据源都是MediaRecorder.AudioSource.MIC。

因为JNI方法是无法改变的,一定是用麦克风当数据源,所以只能改我的录音机来让他们两个都能检测到声音。

【因为像全民K歌、唱吧、酷狗等软件,都有检测用户声音的频率对其进行打分的功能,而且同时进行了录音线程,没有发生任何冲突,我就感觉很不解!
我不相信他们是对录音得到的pcm切片进行分析得到的检测频率,因为这会有极大的延迟。】

【有一个同事说了他的思路。像任何安卓手机在打电话时,它的通话线程是一定要占用MIC的,而且无法改动。他提到了手机内录(打电话的时候同步录音)软件的开发,先打开那个软件,让软件得到.AudioSource.MIC,但软件保存录音后又会做一个数据输出口。再进行通话时,通话的线程用的AudioSource.MIC是假的,是内录软件的输出,蒙骗了通话线程,这样就实现了同步录音和通话。不知道这个软件之间的蒙骗,能不能做在我们自己的软件内部,就是把我的“录音机”做成“内录软件”】

急需解答!!

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

1条回答