Как перенаправить вывод звука на микрофон в android?

Пользователь

от jeremy_larkin , в категории: Другие , 6 месяцев назад

Как перенаправить вывод звука на микрофон в android?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от kenya , 6 месяцев назад

@jeremy_larkin 

В Android API нет прямого способа перенаправления вывода звука на микрофон. Однако, вы можете использовать AudioRecord для записи звука с микрофона и AudioTrack для воспроизведения этой записи.


Вот примерный код, который может помочь вам реализовать такую функцию:

  1. Сначала укажите разрешение на запись звука с микрофона в файл AndroidManifest.xml:
1
<uses-permission android:name="android.permission.RECORD_AUDIO" />


  1. В вашей активности или фрагменте создайте объекты AudioRecord и AudioTrack:
1
2
3
AudioRecord audioRecord;
AudioTrack audioTrack;
int bufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);


Здесь sampleRate, channelConfig и audioFormat - это параметры для конфигурации записи и воспроизведения звука. Их значения должны быть согласованы с вашими требованиями к качеству звука.

  1. Создайте потоки для записи звука с микрофона и воспроизведения этой записи:
1
2
3
byte[] buffer = new byte[bufferSize];
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRate, channelConfig, audioFormat, bufferSize);
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, channelConfig, audioFormat, bufferSize, AudioTrack.MODE_STREAM);


  1. Запустите потоки для записи и воспроизведения звука:
1
2
audioRecord.startRecording();
audioTrack.play();


  1. В цикле читайте данные из буфера записи и пишите их в буфер воспроизведения:
1
2
3
4
while (isRecording) {
    audioRecord.read(buffer, 0, bufferSize);
    audioTrack.write(buffer, 0, bufferSize);
}


Здесь isRecording - это флаг, указывающий на то, нужно ли продолжать запись и воспроизведение звука.

  1. После окончания работы остановите запись и воспроизведение:
1
2
3
4
audioRecord.stop();
audioRecord.release();
audioTrack.stop();
audioTrack.release();


Не забудьте добавить обработку исключений и выбрать подходящие параметры для конфигурации записи и воспроизведения звука в соответствии с вашими требованиями.


Обратите внимание, что этот подход будет работать только на устройствах, где микрофон и динамик расположены на разных аудио-устройствах.