Jor*_*vol 7 audio android record audiorecord android-audiorecord
我正在尝试开发像iRig for android这样的应用程序,所以第一步是捕获麦克风输入并同时播放它.
我有它,但问题是我得到一些延迟,使这无法使用,如果我开始处理缓冲区,我担心它将完全无法使用.
我像这样使用audiorecord和audiotrack:
new Thread(new Runnable() {
public void run() {
while(mRunning){
mRecorder.read(mBuffer, 0, mBufferSize);
//Todo: Apply filters here into the buffer and then play it modified
mPlayer.write(mBuffer, 0, mBufferSize);
//Log.v("MY AMP","ARA");
}
Run Code Online (Sandbox Code Playgroud)
并且以这种方式实现:
// ==================== INITIALIZE ========================= //
public void initialize(){
mBufferSize = AudioRecord.getMinBufferSize(mHz,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
mBufferSize2 = AudioTrack.getMinBufferSize(mHz,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
mBuffer = new byte[mBufferSize];
Log.v("MY AMP","Buffer size:" + mBufferSize);
mRecorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
mHz,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
mBufferSize);
mPlayer = new AudioTrack(AudioManager.STREAM_MUSIC,
mHz,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
mBufferSize2,
AudioTrack.MODE_STREAM);
}
Run Code Online (Sandbox Code Playgroud)
你知道如何获得更快的反应吗?谢谢!
由于最小缓冲区大小,Android的AudioTrack\AudioRecord类具有高延迟.这些缓冲区大小的原因是为了最大限度地减少GC发生时的丢弃(在我看来,这是一个错误的决定,你可以优化自己的内存管理).
你想要做的是使用OpenSL,它可以从2.3获得.它包含用于流式音频的本机API.这是一些文档:http: //mobilepearls.com/labs/native-android-api/opensles/index.html
| 归档时间: |
|
| 查看次数: |
9280 次 |
| 最近记录: |