오디오 버퍼를 생성하여 새로운 클래스로 보내려고했습니다. 이 클래스에서는 AudioTracker로이 버퍼를 재생할 수는 있지만 작동하지 않습니다. 소리가 시간에 들릴 수는 있지만 소리는 halleffect와 같습니다. 나는 내 실수에 대한 이드가없고이 문제에 대한 답을 찾지 못했습니다. 도와 주시면 감사하겠습니다. 내가 문제를 파악,오디오 버퍼를 전송하여 직접 재생할 수 있습니까?
public class input {
private static final String TAG = "Aufnahme";
private AudioRecord recorder = null;
private boolean isRecording = false;
private int SAMPLERATE = 8000;
private int CHANNELS = AudioFormat.CHANNEL_CONFIGURATION_MONO;
private int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
private int bufferSize = AudioRecord.getMinBufferSize(SAMPLERATE, CHANNELS,
AUDIO_FORMAT);
private Thread recordingThread = null;
public void startRecording() {
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLERATE,
CHANNELS, AUDIO_FORMAT, bufferSize);
recorder.startRecording();
isRecording = true;
recordingThread = new Thread(new Runnable()
{
public void run() {
writeAudioData();
}
});
recordingThread.start();
}
public void stopRecording() {
isRecording = false;
recorder.stop();
recorder.release();
recorder = null;
recordingThread = null;
}
private void writeAudioData() {
byte data[] = new byte[bufferSize];
while (isRecording) {
recorder.read(data, 0, bufferSize);
send(data);
}
}
private void send(byte[] data) {
int minBufferSize = AudioTrack.getMinBufferSize(8000,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 8000,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, minBufferSize,
AudioTrack.MODE_STREAM);
at.play();
at.write(data, 0, bufferSize);
at.stop();
at.release();
}
수정 사항에 대한 축하해! 가능한 경우 다른 사람들이 귀하의 솔루션에서 배울 수 있도록 귀하의 대답을 '수락'으로 표시하십시오. 건배 ~ –
나는 bufferSize 및 minbufferSize를 가지고 놀았으며 오디오 데이터를 충실하게 재생할 수있었습니다. 입력 버퍼를 8192로 고정하고 1024로 출력했습니다. 더 조정할 수는 있지만 제 목적을 충족시킵니다. 원래 코드를 보내 주셔서 감사합니다. 원하는대로 작동합니다. – axs