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