Tôi hiện đang sử dụng AudioRecord để ghi âm thanh từ micrô của thiết bị Android và sau đó đi thẳng đến một AudioTrack phát ra âm thanh Tai nghe của thiết bị Android.Android - Tôi có thể làm điều này với MediaRecord/MediaPlayer thay vì AudioRecord/Track không?
Tôi tự hỏi mình có thể làm tương tự nhưng với các lớp MediaPlayer và MediaRecorder thay vì tôi cần sử dụng mã hóa AMR-NB có sẵn trên các lớp Media chứ không phải các lớp Audio.
Sự cố của tôi với MediaRecorder và MediaPlayer là có vẻ như tôi phải ghi vào một tệp và sau đó phát tệp đó?
Đây không phải là điều tôi muốn làm, có cách nào để phát âm thanh từ Mic sang Tai nghe với các lớp Media?
Mã của tôi sử dụng các lớp Âm thanh bên dưới, có thể thực hiện điều gì đó tương tự với MediaPlayer và MediaRecorder không?
public class Record extends Thread
{
static final int bufferSize = 200000;
final short[] buffer = new short[bufferSize];
short[] readBuffer = new short[bufferSize];
public void run() {
isRecording = true;
android.os.Process.setThreadPriority
(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
int buffersize = AudioRecord.getMinBufferSize(11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
arec = new AudioRecord(MediaRecorder.AudioSource.MIC,
11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
MediaRecorder.AudioEncoder.AMR_NB,
buffersize);
atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL,
11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
MediaRecorder.AudioEncoder.AMR_NB,
buffersize,
AudioTrack.MODE_STREAM);
Log.d("AUDIO", "sample rate = : " + arec.getSampleRate());
atrack.setPlaybackRate(11025);
byte[] buffer = new byte[buffersize];
arec.startRecording();
atrack.play();
while(isRecording) {
arec.read(buffer, 0, buffersize);
atrack.write(buffer, 0, buffer.length);
}
}
}
Vì vậy, tôi sẽ phải sử dụng các lớp Âm thanh như trên và tự mã hóa âm thanh? –
Thật không may là có. May mắn thay, bạn có thể tìm thấy một codec mã nguồn mở khá dễ dàng, và bạn có thể có tùy chọn sử dụng C (NDK) hoặc Java (Dalvik/SDK) để mã hóa. –