Воспроизведение звука во время записи будет иметь низкую громкость

#ios #objective-c #audiounit #audioqueue #audiosession

#iOS #objective-c #audiounit #audioqueue #аудиосессия

Вопрос:

Я использую audiounit для записи голоса и audioqueue для воспроизведения аудиоданных. Когда я устанавливаю:

[session setCategory:AVAudioSessionCategoryPlayAndRecord error:amp;error];

Громкость воспроизводимого звука будет очень низкой. Но когда я устанавливаю:

[session setCategory:AVAudioSessionCategoryMultiRoute error:amp;error];

Хотя громкость будет нормальной. Но вывод аудиоданных с микрофона iOS не будет таким же длинным. При прежней настройке длина аудиоданных будет равна 4096, но последняя будет выводить длину в 3760 и 3764. Это приведет к сбою при кодировании audiodata.

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

Комментарии:

1. Когда я использую iPad в качестве тестового устройства, я могу использовать PlayAndRecord для получения номинальной громкости.

Ответ №1:

3760-3764 вызвано повторной дискретизацией с 48 кб до вашей частоты дискретизации 44,1 кб.

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

Кроме того, попробуйте установить предпочитаемую частоту дискретизации перед включением аудиосессии.