Подтвердить что ты не робот

Низкий уровень записи в сочетании с AVAudioSessionCategoryPlayAndRecord

Когда я устанавливаю:

[[AVAudioSession sharedInstance] setCategory:
    AVAudioSessionCategoryPlayAndRecord error:NULL];

... запись и воспроизведение отлично работают, только громкость воспроизведения примерно на 60% ниже, чем когда я просто воспроизвожу один и тот же звук без записи и настроек PlayAndRecord.

Мне нужно получить пики большого объема (чтобы проверить, ударил ли пользователь микрофон), для чего я начал сеанс записи. Но без настроек AVAudio..PlayandRecord, я не могу воспроизводить какие-либо звуки тем временем. Вот почему я выполнил эту команду.

Любая помощь?

спасибо Chris

4b9b3361

Ответ 1

Для всех с одинаковой проблемой перенаправьте вывод на динамик:

[[AVAudioSession sharedInstance] setCategory:
    AVAudioSessionCategoryPlayAndRecord error:NULL];
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute,
    sizeof(audioRouteOverride), &audioRouteOverride);

Это работает.

Ответ 2

Сегодня я столкнулся с этой проблемой, и кажется, что этот ответ немного устарел. AudioSessionsSetProperty (...) теперь устарел.

Кажется, что все работает, обеспечивая полную громкость через динамики, но автоматически маршрутизируя звук в наушники, если они подключены до запуска приложения:

[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error: nil];

И если вы предпочитаете воспроизведение звука через громкоговорители на полной громкости, даже если наушники подключены, это тоже работает:

[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];

Ответ 3

Я узнал (см. листинг 7-9 в документации iOS), что предлагаемое решение выше по переопределению аудио маршрута перестает работать после подключения и удаляет наушники,

Итак, если вы хотите, чтобы изменение в маршруте аудио было постоянным в текущем сеансе аудио (листинг 7-10 в документации iOS), тот же источник, который вы можете установите аудиодорожку по умолчанию, используя

NSError *setCategoryErr = nil;
NSError *activationErr  = nil;
//Set the general audio session category
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error: &setCategoryErr];

//Make the default sound route for the session be to use the speaker
UInt32 doChangeDefaultRoute = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof (doChangeDefaultRoute), &doChangeDefaultRoute);

//Activate the customized audio session
[[AVAudioSession sharedInstance] setActive: YES error: &activationErr];

и, конечно же, обязательно привяжите структуру AudioToolbox и импортируйте ее с помощью

#import <AudioToolbox/AudioServices.h>

Ответ 4

Не забывайте оператор import. Возможно, очевидно для более опытных программистов...

#import <AudioToolbox/AudioServices.h>

Ответ 5

Кроме того, вам необходимо добавить в свой проект рамки AudioToolbox и AVFoundation с помощью Right-Cliking on Frameworks → Add → Existing Frameworks.

В противном случае может возникнуть ошибка компоновщика: "_ AudioSessionSetProperty", на которую ссылаются:     - [OpenBook startRecording] в OpenBook.o

Ответ 6

В моем случае в дополнение к использованию опции AVAudioSessionCategoryOptionDefaultToSpeaker мне пришлось удалить изменяющийся режим аудиосессии с AVAudioSessionModeDefault на AVAudioSessionModeMeasurement.

Итак, если вы используете другие режимы, отличные от AVAudioSessionModeDefault, будьте осторожны.

Ответ 7

Я столкнулся с этим сегодня, и большинство ответов, похоже, не применяются к недавним изменениям iOS. Ответ Lucian выше с параметром defaultToSpeaker правильный, хотя по-прежнему кажется, что по-разному ведут себя в Simulator и на устройстве время от времени. Мне помогло установить категорию, режим и параметры в один вызов, который доступен в iOS 10+ следующим образом:

try session.setCategory(AVAudioSessionCategoryPlayAndRecord, mode: AVAudioSessionModeDefault, options: .defaultToSpeaker)

Использование этого аудио было до максимума и оставалось таким образом.