Android录音机性能不佳

时间:2012-07-18 15:47:06

标签: android audio

        //constructor
            android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
        /////////////

        //thread run() method
            int N = AudioRecord.getMinBufferSize(8000,AudioFormat.CHANNEL_IN_MONO,AudioFormat.ENCODING_PCM_16BIT);
            AudioRecord recorder = new AudioRecord(AudioSource.MIC, 8000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, N*10);
                        recorder.startRecording();

    while(!stopped)
                { 
                try {
                           //if not paused upload audio
                   if (uploadAudio == true) {

                           short[][] buffers  = new short[256][160];
                           int ix = 0;

                            //allocate buffer for audio data
                            short[] buffer = buffers[ix++ % buffers.length];

                               //write audio data to track
                           N = recorder.read(buffer,0,buffer.length);

                           //create bytes big enough to hold audio data
                           byte[] bytes2 = new byte[buffer.length * 2];

                                   //convert audio data from short[][] to byte[]

ByteBuffer.wrap(bytes2).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().put(buffer);


                        //encode audio data for ulaw
                                read(bytes2, 0, bytes2.length);

有关ulaw编码器代码,请参阅here。我使用read,maxAbsPcm和编码方法

                                //send audio data
                                //os.write(bytes2,0,bytes2.length);
                            }
                        } finally {
                    }
                }
                os.close();
            }
            catch(Throwable x)
            { 
                Log.w("AudioWorker", "Error reading voice AudioWorker", x);
            }
            finally
            { 
                recorder.stop();
                recorder.release();
            }

        ///////////

所以这个工作正常。音频以适当的格式发送到服务器,并在另一端播放。然而,音频经常跳过。例如:说1,2,3,4将以4切断回放 我认为这是一个性能问题,因为我已经计时了一些这些方法,当它们花费0秒或更短的时间时,一切都有效,但它们通常需要几秒钟。随着字节和编码的转换占用最多 知道如何优化此代码以获得更好的性能吗?或者也许是一种处理滞后的方法(可能构建缓存)?

0 个答案:

没有答案