#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).
Кроме того, попробуйте установить предпочитаемую частоту дискретизации перед включением аудиосессии.