代码之家  ›  专栏  ›  技术社区  ›  Ranjith

android中的实时录制和播放延迟问题

  •  0
  • Ranjith  · 技术社区  · 12 年前

    我正在使用 Live Audio Recording and Playing in Android and Thread & callback handling 此示例用于录制回放,但在播放录制的音频时,延迟很小。如何解决它。

    boolean m_isRun=true;
    public void loopback() {
            // Prepare the AudioRecord & AudioTrack
            try {
                buffersize = AudioRecord.getMinBufferSize(SAMPLE_RATE,
                        AudioFormat.CHANNEL_CONFIGURATION_MONO,
                        AudioFormat.ENCODING_PCM_16BIT);
    
                if (buffersize <= BUF_SIZE) {
                    buffersize = BUF_SIZE;
                }
                Log.i(LOG_TAG,"Initializing Audio Record and Audio Playing objects");
    
                m_record = new AudioRecord(MediaRecorder.AudioSource.MIC,
                        SAMPLE_RATE, AudioFormat.CHANNEL_CONFIGURATION_MONO,
                        AudioFormat.ENCODING_PCM_16BIT, buffersize * 1);
    
                m_track = new AudioTrack(AudioManager.STREAM_ALARM,
                        SAMPLE_RATE, AudioFormat.CHANNEL_CONFIGURATION_MONO,
                        AudioFormat.ENCODING_PCM_16BIT, buffersize * 1,
                        AudioTrack.MODE_STREAM);
    
                m_track.setPlaybackRate(SAMPLE_RATE);
            } catch (Throwable t) {
                Log.e("Error", "Initializing Audio Record and Play objects Failed "+t.getLocalizedMessage());
            }
    
            m_record.startRecording();
            Log.i(LOG_TAG,"Audio Recording started");
            m_track.play();
            Log.i(LOG_TAG,"Audio Playing started");
    
            while (m_isRun) {
                m_record.read(buffer, 0, BUF_SIZE);
                m_track.write(buffer, 0, buffer.length);
            }
    
            Log.i(LOG_TAG, "loopback exit");
        }
    
        private void do_loopback() {
            m_thread = new Thread(new Runnable() {
                public void run() {
                    loopback();
                }
            });
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   user1871847    12 年前

    这可以通过Android的Opensl实现。但Android正在努力实现这一目标。

    以下是一些对您有帮助的教程

    https://code.google.com/p/opensl-soundpool/

    https://code.google.com/p/high-performance-audio/