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
...