我目前正在开发用于Android的实时音频DSP应用...信号取自麦克风输入(在手机或平板电脑上)处理后再播放....
当我的应用程序启动时,如果有麦克风和耳机插孔,音频DSP会初始化....第一秒有扬声器或耳机的输出,但之后只有静音,似乎播放已经停了,但录音仍然在后台播放....
我使用AudioRecorder类获取RAW音频数据和播放我使用AudioTrack .... 现在我有以下代码(我希望我知道它为什么不起作用)从麦克风流中读取和播放:
public void ProcessAudio(){
_track = new AudioTrack(AudioManager.STREAM_MUSIC, _recorder.getSampleRate(),AudioFormat.CHANNEL_OUT_MONO,_recorder.getAudioFormat(), _bufferSize, AudioTrack.MODE_STATIC);
boolean first=true;
while(_IsRecording){
try {
byte sData[] = new byte[_bufferSize];
_recorder.read(sData, 0, _bufferSize);
//TODO:add audio DSP stuff here
_track.write(sData,0,_bufferSize);
if(first){
first = false;
_track.play();
}
}catch (Exception ex){
Log.e(StaticVars.SOFTWARE_TAG, "Failed:" + ex.getMessage());
}
}
_track.flush();
_track.stop();
_track.release();
}
答案 0 :(得分:0)
所以....事实证明我没有正确初始化我的AudioTrack ......一旦我改变了:
_track = new AudioTrack(AudioManager.STREAM_MUSIC, _recorder.getSampleRate(),AudioFormat.CHANNEL_CONFIGURATION_MONO,_recorder.getAudioFormat(), _bufferSize, AudioTrack.MODE_STATIC);
为:
_track = new AudioTrack(AudioManager.STREAM_MUSIC, _recorder.getSampleRate(),AudioFormat.CHANNEL_CONFIGURATION_MONO,_recorder.getAudioFormat(), _bufferSize, AudioTrack.MODE_STREAM);
它开始起作用....
修改
在Android 4.4及以下版本中,实时音频处理至少是合理的。