Audio Record create 相关代码流程、重点关键接口、参数解析以及相关log share分析比对。参数解析: audio Source: Media Record er. Audio Source.MIC,详细定义需check Media Record er. Audio Source;sampleRateInHz:默认采样率,单位Hz,44100Hz是唯一能保证在所有设备上工作的采样率;channelConfig: 描述音频通道设置, Audio Format.CHANNEL_CONFIGURATION_MONO保证能 如果你音效多,也不要指望unload方法来清除掉一些音效后再load新的进去,虽然unload后音效卸载了,但是前面分给它在SoundPool里面的Id可没有释放掉,也就是说这个时候你load新的进去只会在后面继续累加,然后累加多了就超过256了,然后就就听不到声音,然后就没有然后了。一旦报了这个错,你就听不到声音了,呵呵。其他还有点什么呢,load需要一点点时间,load后不要马上unload,load —play–unload的做法并不可取,不要load太大的音效,它只会申请1M的内存空间。 这是一个我犯了的傻逼问题,必须记录一下。 E/ Audio Record : Audio F lin ger could not create record trac k, status : -1 E/ Audio Record -JNI: Error creating Audio Record instance: initialization check failed with status -1. E/androi... Eclipse提示: 50.overlaps the location of another project: 'xxxx' new -> android project -> create project from exist source 出现如下错误信息: Invalid project description ------>detail: ->>> xxxx(projec 写了个apk测试录音,提示: 01-22 00:59:40.795   215   948 W ServiceMana ger : Permission failure: android.permission. RECORD _ AUDIO from uid=10055 pid=125 当我尝试使用以下代码通过我的Nexus 5录制音频时 record = new Audio Record (Media Record er. Audio Source.MIC,sampleRate, Audio Format.CHANNEL_IN_MONO, Audio Format.ENCODING_PCM_8BIT,BYTE_OF_SAMPLE * bufferSampleSize); record .startRec... 再一追查果然如此,在 audio policy,具体实现是在 audio f lin ger 创建 audio record 中,当一个录音流已经打开对应的声卡设备节点,另外一个录音流不应该再次开启这个节点,否则此时判断num_open_inputs > 0就会通过。这个方法将profile结构体中的card和device赋值为-1,即未打开声卡设备节点。刚开始不是以为是profile加载问题吗,于是开始重点追查profile_is_cached_for这个方法,这个方法具体实现在 audio _utils.cpp中。 最近在做一个测试,用手机的话筒来测试环境音量大小,但是音量的变化极敏感,因此一般测一小段时间的均值做为最终测试值。为了保证UI的流畅,我们不可能等着系统测试完整个时间段,这个时候可以启动一个子线程做测试,测试完成将结果返回到MainActivity显示。基本思路参见: 但是,我在测试中,只要一运行,点击测试启动子线程就会出错。 最后,仔细看了一下Log信息,发现了下面一条: Audio ...