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

Как получить выход AVAudioPlayer в динамик

Я записываю аудио с помощью AVAudioRecorder, как показано в Как записать звук на iPhone с помощью AVAudioRecorder?

Затем я использую AVAudioPlayer для воспроизведения записи. Однако звук выходит из уха, а не громкоговорителя. Как мне перейти на перенаправление звука на громкоговоритель?

ТИА!

4b9b3361

Ответ 1

От http://www.iphonedevsdk.com/forum/iphone-sdk-development-advanced-discussion/12890-audiosessionsetproperty-problem-playing-sound-listening-mic.html -

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);    
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);

Ответ 2

Я понимаю, что этот вопрос довольно старый, но когда я боролся с той же проблемой, я нашел простое решение, которое, надеюсь, поможет любому, кто хочет использовать громкие медиа-динамики, в отличие от динамиков приемника. Метод, который я использовал, заключался в настройке аудио сессии с параметром DefaultToSpeaker в AVAudioSessionCategoryOptions:

В Swift (если ваш сеанс аудио называется session) -

session.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions:AVAudioSessionCategoryOptions.DefaultToSpeaker, error: nil)

В Obj-C -

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error: nil];

Ответ 3

Swift 3

Перед записью звука, который я установил:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord)

и перед воспроизведением я установил:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)

Цель C

перед записью:

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryRecord error:nil];

перед воспроизведением:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];

Ответ 4

Это отлично работает для меня в Swift2

let session = AVAudioSession.sharedInstance()
try! session.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: AVAudioSessionCategoryOptions.DefaultToSpeaker)

Ответ 5

Это старый вопрос, но другой ответ мне не помог... Тем не менее, я нашел решение, которое я отправляю для будущей справки, если кому-то (или мне от будущего!) это нужно.

Решение описано в следующем сообщении в блоге: iOS: принудительно вывести аудиосигнал на динамики, когда наушники подключены.

Вам необходимо создать новый Objective-C класс AudioRouter в вашем проекте. Затем импортируйте AudioRouter.h в свой заголовочный файл класса, в котором вы запускаете аудиофункции. Затем в соответствующем файле .m добавьте следующие строки в метод viewDidLoad:

AudioRouter *foobar = [[AudioRouter alloc] init];
[foobar initAudioSessionRouting];
[foobar forceOutputToBuiltInSpeakers];

Теперь у вас есть звук (например, AVAudioPlayer), который выведен на громкоговоритель! Обратите внимание, что если вы подключаете наушники в то время как приложение работает, все аудиовыходы направляются на наушники.

Ответ 6

Swift2:

try session.setCategory(AVAudioSessionCategoryPlayAndRecord,
    withOptions:AVAudioSessionCategoryOptions.DefaultToSpeaker)

Ответ 7

Swift 3

 let audioSession = AVAudioSession.sharedInstance()

    do {
        try audioSession.overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)
    } catch let error as NSError {
        print("Audio Session error: \(error.localizedDescription)")
    }