录制的声音非常低,Android上录制了很多噪音

时间:2011-09-16 09:34:42

标签: android audio-recording audio

我正在尝试使用AudioRecord类和写入来录制语音 使用AudioTrack类读取扬声器的字节数。我能听到 来自扬声器的声音但声音非常低而且很多 噪音随着录制的声音而出现。

任何可以解决此问题的解决方案,以减少噪音和响亮 实际的声音。

我正在使用以下代码:

    package com.my.mic.record;

    import android.media.AudioFormat;
    import android.media.AudioManager;
    import android.media.AudioRecord;
    import android.media.AudioTrack;
    import android.media.MediaRecorder;
    import android.util.Log;

    public class Record extends Thread
    {

           int numCrossing,p,numSamples,af;

           static final int bufferSize = 200000;
           short[] buffer = new short[bufferSize];
           short[] readBuffer = new short[bufferSize];
           boolean isRecording;
           AudioManager am;

           public AudioRecord arec;
           public AudioTrack atrack;

           private int sampleRate = 8000;


           public void run() {


                   isRecording = true;

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

                   int buffersize =
    AudioRecord.getMinBufferSize(sampleRate,AudioFormat.CHANNEL_CONFIGURATION_MONO,
    AudioFormat.ENCODING_PCM_16BIT);

                   arec = new
    AudioRecord(MediaRecorder.AudioSource.MIC,sampleRate,AudioFormat.CHANNEL_CONFIGURATION_MONO,AudioFormat.ENCODING_PCM_16BIT,
                                   buffersize);

                   //buffersize = arec.getMinBufferSize(arec.getSampleRate(),
    arec.getChannelConfiguration(), arec.getAudioFormat());

                   atrack = new
    AudioTrack(AudioManager.STREAM_MUSIC,arec.getSampleRate(),arec.getChannelConfiguration(),arec.getAudioFormat(),
                                   buffersize,AudioTrack.MODE_STREAM);

                   am.setRouting(AudioManager.MODE_NORMAL,AudioManager.ROUTE_EARPIECE,
    AudioManager.ROUTE_ALL);
                   //am.setMode(AudioManager.MODE_NORMAL);


                   Log.d("SPEAKERPHONE", "Is speakerphone on? : " +
    am.isSpeakerphoneOn());

                   atrack.setPlaybackRate(sampleRate);


                   byte[] buffer = new byte[buffersize];
                   arec.startRecording();
                   atrack.play();
                   //atrack.setStereoVolume(atrack.getMaxVolume(),
    atrack.getMaxVolume());

                   final float frequency = sampleRate;
           float increment = (float)((2*Math.PI) * frequency / 44100); //
    angular increment for each sample
           float angle = 0;
           //AndroidAudioDevice device = new AndroidAudioDevice( );

                   while(isRecording) {

                           try {

                                   arec.read(buffer, 0, buffersize);
                                   atrack.write(buffer, 0, buffer.length);

                           } catch (Exception e) {
                                   Log.d("Record", ""+e);
                           }
                   }

                   arec.stop();
                   atrack.stop();
                   //device.releaseTrack();
                   isRecording = false;
           }


           public boolean isRecording() {
                   return isRecording;
           }

           public void setRecording(boolean isRecording) {
                   this.isRecording = isRecording;
           }

           public AudioManager getAm() {
                   return am;
           }

           public void setAm(AudioManager am) {
                   this.am = am;
           }

       public void stopRecording(){
               arec.stop();
       arec.release();
       atrack.stop();
       atrack.release();
       arec=null;
       atrack=null;
       setRecording(false);
       this.stop();
       }
}

1 个答案:

答案 0 :(得分:0)

转到this工作音频记录示例,如果您在模拟器中进行测试,则采样率ll为8000默认值。对于设备将采样率提高到44100或高并记录它,它会更好地工作。