Ios 将AVAudioPlayer输出更改为Swift中的扬声器?

Ios 将AVAudioPlayer输出更改为Swift中的扬声器?,ios,iphone,swift,avaudioplayer,Ios,Iphone,Swift,Avaudioplayer,我的iphone应用程序中有一个简单的AVAudioPlayer,它可以工作,但输出应该是手机扬声器而不是耳机。我在这里找到了,但不知道如何将其“翻译”为swift(AudioSessionSetProperty让我困惑) 我能理解这是多么令人困惑,因为我刚刚找到了答案。因此,AudioSessionSetProperty在iOS 7中被弃用 添加以下内容: session.overrideOutputAudioPort(AVAudioSessionPortOverride.Speaker, e

我的iphone应用程序中有一个简单的AVAudioPlayer,它可以工作,但输出应该是手机扬声器而不是耳机。我在这里找到了,但不知道如何将其“翻译”为swift(AudioSessionSetProperty让我困惑)


我能理解这是多么令人困惑,因为我刚刚找到了答案。因此,
AudioSessionSetProperty
在iOS 7中被弃用

添加以下内容:

session.overrideOutputAudioPort(AVAudioSessionPortOverride.Speaker, error: nil)
确保先调用
AVAudioSession.sharedInstance()

在Swift 3或4中:

let audioSession = AVAudioSession.sharedInstance()

do {
    try audioSession.overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)
} catch let error as NSError {
    print("audioSession error: \(error.localizedDescription)")
}
为避免出现
OSStatus
错误-50(用户462990在评论中提到),必须在设置会话类别(下面的代码)后调用
overrideOutputAudioPort


试试这些功能。它们很有吸引力

func SetSessionPlayerOn()
{
    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord)
    } catch _ {
    }
    do {
        try AVAudioSession.sharedInstance().setActive(true)
    } catch _ {
    }
    do {
        try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)
    } catch _ {
    }
}
func SetSessionPlayerOff()
{
    do {
        try AVAudioSession.sharedInstance().setActive(false)
    } catch _ {
    }
}
斯威夫特5

    func setSessionPlayerOn() {
        do {
            try AVAudioSession.sharedInstance().setCategory(.playAndRecord)
        } catch _ {
        }
        do {
            try AVAudioSession.sharedInstance().setActive(true)
        } catch _ {

        }
        do {
            try AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)
        } catch _ {

        }
    }

在会话设置过程中,您可以将音频会话默认设置为内置扬声器,而不是接收器

        do {
            // 1) Configure your audio session category, options, and mode
            try session.setCategory(AVAudioSessionCategoryPlayAndRecord, mode: AVAudioSessionModeVoiceChat, options: [.defaultToSpeaker])
            // 2) Activate your audio session to enable your custom configuration
            try session.setActive(true)
        } catch let error as NSError {
            print("Failed to set the audio session category and mode: \(error.localizedDescription)")
        }

你能把这个代码整合到Marko的代码里吗?我在他的代码中看到一个AVAudioPlayer,在你的代码中看到一个AVAudioSession。这些是如何结合在一起的?我尝试将您的代码添加到我的项目中,但不断出现错误。我正使用此代码,但在执行时出现错误“操作无法完成。(OSStatus错误-50)。”有什么想法吗?这里是一个多一点的解释,我发现了什么,解决了什么问题,当我试图实现一个导航风格的提示,汽车音响或电话扬声器,如果没有连接到电话。希望这对其他人有所帮助,您只需在需要时调用SetSessionPlayerOn()。是否有办法将扬声器更改为内置耳机。我正在处理音频呼叫,但默认情况下它是在扬声器上,我无法更改。您是否尝试过用布尔值替换为负值的上述代码@是的,这让演讲者很生气。我想要的是激活靠近前摄像头的耳机。注意:我正在使用opentok库进行视频/音频通话。我还想在opentok库上实现内置耳机进行音频通话。有人能帮我吗。对于Swift 3-4,请使用以下代码:尝试录制会话。overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)
  func SetEarSepeakerOn()
    {
        do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord)
        } catch _ {
        }
        do {
            try AVAudioSession.sharedInstance().setActive(true)
        } catch _ {
        }
        do {
            try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.none)
        } catch _ {
        }
    }
    func setSessionPlayerOn() {
        do {
            try AVAudioSession.sharedInstance().setCategory(.playAndRecord)
        } catch _ {
        }
        do {
            try AVAudioSession.sharedInstance().setActive(true)
        } catch _ {

        }
        do {
            try AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)
        } catch _ {

        }
    }
        do {
            // 1) Configure your audio session category, options, and mode
            try session.setCategory(AVAudioSessionCategoryPlayAndRecord, mode: AVAudioSessionModeVoiceChat, options: [.defaultToSpeaker])
            // 2) Activate your audio session to enable your custom configuration
            try session.setActive(true)
        } catch let error as NSError {
            print("Failed to set the audio session category and mode: \(error.localizedDescription)")
        }