AVAudioSession : Playing audio through earpiece speaker

三世轮回 提交于 2019-12-02 04:24:31

Change audio route for cancel button solve the problem

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    NSError *error = nil;
    AVAudioSession *session = [AVAudioSession sharedInstance];
    [session setCategory:AVAudioSessionCategoryPlayback error:&error];
    [session  overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil];
    [session setActive: YES error:nil];

    videoPicker = nil;
    [self dismissViewControllerAnimated:YES completion:nil];
}

Here is the solution to make AVAudioSession route to Ear Speaker (Built in Speaker) or in bottom Speaker for Swift 4.2, iOS 12, SDK 11:

1) Create a file in your project called AudioSession and implement these 3 functions.

import AVFoundation
import UIKit

let audioSession = AVAudioSession.sharedInstance()

func configureAudioSessionCategory() {
  print("Configuring audio session")
  do {
    try audioSession.setCategory(AVAudioSession.Category.playAndRecord, mode: AVAudioSession.Mode.voiceChat)
    try audioSession.overrideOutputAudioPort(AVAudioSession.PortOverride.none)
    print("AVAudio Session out options: ", audioSession.currentRoute)
    print("Successfully configured audio session.")
  } catch (let error) {
    print("Error while configuring audio session: \(error)")
  }
}

func configureAudioSessionToSpeaker(){
    do {
        try audioSession.overrideOutputAudioPort(AVAudioSession.PortOverride.speaker)
        try audioSession.setActive(true)
        print("Successfully configured audio session (SPEAKER-Bottom).", "\nCurrent audio route: ",audioSession.currentRoute.outputs)
    } catch let error as NSError {
        print("#configureAudioSessionToSpeaker Error \(error.localizedDescription)")
    }
}

func configureAudioSessionToEarSpeaker(){

    let audioSession:AVAudioSession = AVAudioSession.sharedInstance()
    do { ///Audio Session: Set on Speaker
        try audioSession.overrideOutputAudioPort(AVAudioSession.PortOverride.none)
        try audioSession.setActive(true)

        print("Successfully configured audio session (EAR-Speaker).", "\nCurrent audio route: ",audioSession.currentRoute.outputs)
    }
    catch{
        print("#configureAudioSessionToEarSpeaker Error \(error.localizedDescription)")
    }
}

2) In your current viewcontroller viewWillAppear that you play audio, call:

    configureAudioSessionCategory()

3) If you want to put audio on speaker, call function:

    configureAudioSessionToSpeaker()

If you want to put audio on mic, call function:

    configureAudioSessionToEarSpeaker()

*I will make some tags because its new for swift 4.2 and its hard (or nothing) to find on google or here while you search for this topic.

Tags: avaudio session to ear speaker, audio route to top speaker, earpiece speaker, deafult speaker, bottom speaker, loud speaker.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!