Я записываю звук в реальном времени с микрофона гарнитуры bluetooth и воспроизвожу его на динамике телефона.Запись данных в гнездо для Android Android
Streaming Код:
int bufferSize = AudioRecord.getMinBufferSize(samplingRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
arec = new AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION, samplingRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);
//STREAM_MUSIC - no sound
//STREAM_ALARM - beep from phone's speaker
//STREAM_RING - no sound
//STREAM_NOTIFICATION - no sound
//STREAM_SYSTEM - no sound
//STREAM_VOICE_CALL - plays back on bt headset
//STREAM_DTMF - sound from loud speaker, not very clear but works for now
atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, samplingRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize, AudioTrack.MODE_STREAM);
atrack.setPlaybackRate(samplingRate);
byte[] buffer = new byte[bufferSize];
arec.startRecording();
atrack.play();
while(isRecording) {
arec.read(buffer, 0, bufferSize);
atrack.write(buffer, 0, buffer.length);
}
Конфигурация с поддержкой BLUETOOTH кода гарнитуры микрофона:
audioManager.setBluetoothScoOn(true);
audioManager.startBluetoothSco();
//works for MODE_IN_COMMUNICATION - however there's a lot of echo when on speaker phone
//works fine for MODE_IN_CALL
audioManager.setMode(AudioManager.MODE_IN_CALL);
//turning speakerphone on causes a lot of disturbance
//audioManager.setSpeakerphoneOn(true);
//samplingRate = AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM_VOICE_CALL);
samplingRate = 16000;
Однако, даже если у меня есть setSpeakerphoneOn(false)
и вставить наушники в гнездо для наушников, звук воспроизводится из телефона, а не гарнитуры. Как мне это преодолеть? Поворот громкоговорителя вызывает много шума.
Я использую частоту дискретизации 16000, потому что ее можно слушать без наушников. В тот момент, когда я использую собственную частоту дискретизации, я, очевидно, просто слышу действительно высокочастотный шум. Как я могу заставить этот звук играть на гарнитуре, а не на динамике телефона?
Функция маршрутизации выбирает одно аудиоустройство, а не несколько. Вот почему мне было интересно, могу ли я напрямую писать bytedata на аудиоразъем. Спасибо, в любом случае. –