Android实时音频信号处理器输出不起作用

时间:2015-02-15 09:08:31

标签: android android-audiorecord

我目前正在开发用于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();
}

1 个答案:

答案 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及以下版本中,实时音频处理至少是合理的。