2014-02-27 35 views
0

您好我一直在嘗試使用AudioRecord類來記錄通過MIC音頻並將其存儲在尺寸2048錄音使用AudioRecord類和回放使用AudioTrack類

的緩衝區,我試圖從播放的音頻記錄使用AudioTrack類創建另一個相同大小的緩衝區來緩衝自己。當我運行應用程序時,它顯示我的main.xml文件,並顯示「不幸的應用程序已停止」。它沒有記錄任何東西。我只想從錄製緩衝區本身播放音頻。誰能幫我嗎?這是我的代碼。

public class Main extends Activity { 

class AudRecord 
{ 
    public AudioRecord recorder; 
    public boolean isRecording; 
    public int SAMPLERATE; 
    public int CHANNELS; 
    public int AUDIO_FORMAT; 
    public int buffer; 
    public Thread recordingThread; 

    public AudRecord() 
    { 
     recorder = null; 
     isRecording = false; 
     SAMPLERATE = 44100; 
     CHANNELS = AudioFormat.CHANNEL_IN_MONO; 
     AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT; 
     recordingThread = null; 
     buffer = 2048; 
    } 
    public void StartRecording() { 


     recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLERATE, 
       CHANNELS, AUDIO_FORMAT, buffer); 

     recorder.startRecording(); 
     isRecording = true; 

     recordingThread = new Thread(new Runnable() 

     { 
      public void run() { 
       writeAudioData(); 
      } 

     }); 
     recordingThread.start(); 

    } 



    void writeAudioData() { 


     byte data[] = new byte[2048]; 

     while (isRecording) { 

      recorder.read(data, 0, buffer); 
      send(data); 

     } 
    } 

    public void send(byte[] data) { 

     int buffers = 2048; 
     AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, 
       AudioFormat.CHANNEL_OUT_MONO, 
       AudioFormat.ENCODING_PCM_16BIT, buffers, 
       AudioTrack.MODE_STREAM); 

     at.play(); 
     at.write(data, 0, buffers); 
     at.stop(); 
     at.release(); 

    } 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    AudRecord rec= new AudRecord(); 
    rec.StartRecording(); 

} 

}

回答

0

不幸的是應用程序已經停止這意味着您的XML文件有問題。

AudioRecording使用MediaRecorder

public class MainActivity extends Activity { 

MediaRecorder recorder = new MediaRecorder(); 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    ((Button) findViewById(R.id.btnStart)).setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     start(); 
    } 
    }); 
((Button) findViewById(R.id.btnStop)).setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     stop(); 
    } 
    }); 
    } 
    public void start() 
    { 
     recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     recorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath()+"yourfilename.3gpp"); 
     recorder.prepare(); 
     recorder.start(); 
    } 
    public void stop() 
    { 
     recorder.stop(); 
     recorder.reset(); 
     recorder.release(); 
    } 
} 
+0

我沒有在我的XML文件中任何東西,除了一個空白文件實例。我用一個空白的XML文件,因爲我想打開我的應用程序時立即錄製和播放音頻。 – Ashok

+0

@Yogesh Lakhotia請使用評論這種迴應。 – Melquiades

+0

我chked ur代碼顯示AudioRecorder未初始化。 我沒有與AudioRecorder類..但你可以使用MediaRecorder [鏈接](http://developer.android.com/reference/android/media/MediaRecorder.html)它比AudioRecorder –

相關問題