我的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)