当前位置:   article > 正文

android检测线程阻塞,android-audiomanager – 没有阻塞或线程的Android-dev AudioRecord

android 播放语音 线程阻塞,android语音消息

我希望录制麦克风音频流,以便我可以在其上进行实时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.

因此,使用这些规则,我能够使

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/619528
推荐阅读
相关标签
  

闽ICP备14008679号