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();
}
}
我沒有在我的XML文件中任何東西,除了一個空白文件實例。我用一個空白的XML文件,因爲我想打開我的應用程序時立即錄製和播放音頻。 – Ashok
@Yogesh Lakhotia請使用評論這種迴應。 – Melquiades
我chked ur代碼顯示AudioRecorder未初始化。 我沒有與AudioRecorder類..但你可以使用MediaRecorder [鏈接](http://developer.android.com/reference/android/media/MediaRecorder.html)它比AudioRecorder –