赞
踩
我希望录制麦克风音频流,以便我可以在其上进行实时DSP.
我想这样做而不必使用线程,并且在等待新的音频数据时没有.read()块.
更新/答案:这是Android中的一个错误. 4.2.2仍有问题,但5.01已经固定!我不确定分歧在哪里,但这就是故事.
注意:请不要说“只使用线程”.线程很好,但这不是关于它们的,Android开发人员打算让AudioRecord完全可用,而不必指定线程,也不必处理阻塞read().谢谢!
这是我发现的:
初始化AudioRecord对象时,它会创建自己的内部环型缓冲区.
当.start()被调用时,它开始记录到所述环形缓冲区(或者它实际上是什么类型).
当调用.read()时,它会读取bufferSize的一半或指定的字节数(以较小者为准)然后返回.
如果内部缓冲区中有足够多的音频样本,则read()会立即返回数据.如果还不够,则read()等待直到有,然后返回数据.
.setRecordPositionUpdateListener()可用于设置监听器,而.setPositionNotificationPeriod()和.setNotificationMarkerPosition()可分别用于设置通知Period和Position.
但是,除非满足某些要求,否则似乎永远不会调用Listener:
1:Period或Position必须等于bufferSize / 2或(bufferSize / 2)-1.
2:必须在Period或Position计时器开始计数之前调用.read() – 换句话说,在调用.start()之后再调用.read(),并且每次调用Listener时,调用.read() )再次.
3:.read()每次必须至少读取一半bufferSize.
因此,使用这些规则,我能够使
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。