Как получить выход AVAudioPlayer в динамик
Я записываю аудио с помощью AVAudioRecorder, как показано в Как записать звук на iPhone с помощью AVAudioRecorder?
Затем я использую AVAudioPlayer для воспроизведения записи. Однако звук выходит из уха, а не громкоговорителя. Как мне перейти на перенаправление звука на громкоговоритель?
ТИА!
Ответы
Ответ 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)")
}