小编Thi*_*ler的帖子

Android:AudioRecord类问题:永远不会调用回调

我的Android Java应用程序需要将音频数据记录到RAM中并进行处理.这就是我使用"AudioRecord"类而不是"MediaRecorder"(仅记录到文件)的原因.

直到现在,我使用繁忙的循环轮询"read()"来表示音频数据.到目前为止,这一直在起作用,但它过多地占用了CPU.在两次民意调查之间,我将线程置于休眠状态以避免100%的CPU使用率.但是,这并不是一个干净的解决方案,因为无法保证睡眠时间,您必须减去安全时间,以免丢失音频片段.这不是CPU的最佳选择.对于并行运行的线程,我需要尽可能多的空闲CPU周期.

现在我使用"OnRecordPositionUpdateListener"实现了录制.根据SDK Docs,这看起来很有前途,也是正确的方法.一切似乎都有效(打开音频设备,读取()数据等)但从不调用Listner.

有人知道为什么吗?

信息:我正在使用真实的设备,而不是在仿真器下.使用Busy Loop录制基本上可以工作(但不是满意).永远不会调用Callback Listener.

这是我的源代码片段:

public class myApplication extends Activity {

  /* audio recording */
  private static final int AUDIO_SAMPLE_FREQ = 16000;
  private static final int AUDIO_BUFFER_BYTESIZE = AUDIO_SAMPLE_FREQ * 2 * 3; // = 3000ms
  private static final int AUDIO_BUFFER_SAMPLEREAD_SIZE = AUDIO_SAMPLE_FREQ  / 10 * 2; // = 200ms

  private short[] mAudioBuffer = null; // audio buffer
  private int mSamplesRead; // how many samples are recently read
  private AudioRecord mAudioRecorder; // Audio Recorder

  ... …
Run Code Online (Sandbox Code Playgroud)

audio android callback recording android-audiorecord

21
推荐指数
3
解决办法
1万
查看次数