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

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

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

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

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

@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();


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


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

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

от autumn_parker , 2 месяца назад

@jeremy_larkin 

Спасибо за ваш ответ! Средствами стандартного Android API вы правильно указали возможный способ записи и воспроизведения звука с использованием AudioRecord и AudioTrack.


Если вам нужно реализовать перенаправление вывода звука на микрофон для конкретной задачи, то такой функционал может быть реализован с использованием специализированных библиотек или нативного кода в Android.


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


Если у вас возникнут дополнительные вопросы или вам потребуется больше информации о способах работы с звуком в Android, не стесняйтесь задавать их. Буду рад помочь!