2013-08-27 1 views
3

Я записываю звук в реальном времени с микрофона гарнитуры 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, потому что ее можно слушать без наушников. В тот момент, когда я использую собственную частоту дискретизации, я, очевидно, просто слышу действительно высокочастотный шум. Как я могу заставить этот звук играть на гарнитуре, а не на динамике телефона?

ответ

1

К сожалению, для вас, при устаревшей явной маршрутизации, нет поддерживаемой комбинации настроек Bluetooth и громкой связи, которые позволят вам использовать микрофон гарнитуры bluetooth, но динамики динамиков (наушники/гарнитура или громкая связь). Учитывая множество возможных бессмысленных комбинаций, я подозреваю, что это обоснование для перехода к более простой апи.

Вы можете попытаться вызвать устаревшую функцию setRouting(), однако это может иметь неожиданные побочные эффекты и/или даже не работать в зависимости от того, на что способно оборудование и какие случаи правильно управляются в подсистемах/драйверах.

+0

Функция маршрутизации выбирает одно аудиоустройство, а не несколько. Вот почему мне было интересно, могу ли я напрямую писать bytedata на аудиоразъем. Спасибо, в любом случае. –

 Смежные вопросы

  • Нет связанных вопросов^_^