AVAudioPlayer 在 iPhone 6 和 6+ 中以非常低的音量播放声音
AVAudioPlayer playing Sound with very low volume in iPhone 6 and 6+
我正在使用 AVAudioPlayer
播放声音。
iPod(iOS7 和 iOS8 两者)的音量很好。
但是当我在 iPhone 上播放相同的声音时,声音播放的音量非常小。
这是我的代码:
var audioPlayer: AVAudioPlayer?
var soundURL:NSURL? = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("sound", ofType: "mp3")!)
audioPlayer = AVAudioPlayer(contentsOfURL: soundURL, error: nil)
audioPlayer?.prepareToPlay()
audioPlayer?.volume = 1
audioPlayer?.play()
我已经在我的项目中包含了 AudioToolbox.framework 库。
如何改善 iPhone6 和 6+ 的声音?
编辑
最近发现声音会自动增大几秒,但不知道是怎么回事。?
我想如果你把AVAudioPlayer的音量设置为1,那么问题出在系统音量上。
您可以在播放声音时使用不同的音频类别,并且音量在不同类别或不同音频路径(如母语扬声器、耳机或蓝牙)中不同。您应用中的默认类别将是 ambient,但音乐应用程序的 playback。
您可以尝试在播放声音时而不是在播放之前调整音量。
音量很小,因为声音是通过 iPhone(用于通话)中的顶部扬声器发出的。
您必须覆盖主扬声器的 AVAudioSession 输出端口。(底部扬声器)
这是将音频输出路由到扬声器的代码
AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.Speaker, error: &error)
Swift 3.0:
do {
try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)
} catch _ {
}
您还需要将媒体音量调到最大。
extension MPVolumeView {
var volumeSlider:UISlider {
self.showsRouteButton = false
self.showsVolumeSlider = false
self.hidden = true
var slider = UISlider()
for subview in self.subviews {
if subview.isKindOfClass(UISlider){
slider = subview as! UISlider
slider.continuous = false
(subview as! UISlider).value = AVAudioSession.sharedInstance().outputVolume
return slider
}
}
return slider
}
}
然后像这样改变音量:
func setMediaVolume(volume : Float) {
MPVolumeView().volumeSlider.value = volume
}
在您的情况下,请在播放音频之前设置媒体音量 (1)。
还要确保当前的音频路由是到扬声器而不是听筒,您可以使用
try! AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.Speaker)
Swift 4
的解决方案
try? session.setCategory(.playAndRecord, mode: .default, policy: .default, options: .defaultToSpeaker)
P.S.完整的class你可以查看我的gist
我在swift游乐场也遇到过,音量比原文件中的声音小很多。调大音量就行了。
audioPlayer?.volume = 3
我正在使用 AVAudioPlayer
播放声音。
iPod(iOS7 和 iOS8 两者)的音量很好。
但是当我在 iPhone 上播放相同的声音时,声音播放的音量非常小。
这是我的代码:
var audioPlayer: AVAudioPlayer?
var soundURL:NSURL? = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("sound", ofType: "mp3")!)
audioPlayer = AVAudioPlayer(contentsOfURL: soundURL, error: nil)
audioPlayer?.prepareToPlay()
audioPlayer?.volume = 1
audioPlayer?.play()
我已经在我的项目中包含了 AudioToolbox.framework 库。
如何改善 iPhone6 和 6+ 的声音?
编辑
最近发现声音会自动增大几秒,但不知道是怎么回事。?
我想如果你把AVAudioPlayer的音量设置为1,那么问题出在系统音量上。 您可以在播放声音时使用不同的音频类别,并且音量在不同类别或不同音频路径(如母语扬声器、耳机或蓝牙)中不同。您应用中的默认类别将是 ambient,但音乐应用程序的 playback。 您可以尝试在播放声音时而不是在播放之前调整音量。
音量很小,因为声音是通过 iPhone(用于通话)中的顶部扬声器发出的。
您必须覆盖主扬声器的 AVAudioSession 输出端口。(底部扬声器)
这是将音频输出路由到扬声器的代码
AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.Speaker, error: &error)
Swift 3.0:
do {
try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)
} catch _ {
}
您还需要将媒体音量调到最大。
extension MPVolumeView {
var volumeSlider:UISlider {
self.showsRouteButton = false
self.showsVolumeSlider = false
self.hidden = true
var slider = UISlider()
for subview in self.subviews {
if subview.isKindOfClass(UISlider){
slider = subview as! UISlider
slider.continuous = false
(subview as! UISlider).value = AVAudioSession.sharedInstance().outputVolume
return slider
}
}
return slider
}
}
然后像这样改变音量:
func setMediaVolume(volume : Float) {
MPVolumeView().volumeSlider.value = volume
}
在您的情况下,请在播放音频之前设置媒体音量 (1)。
还要确保当前的音频路由是到扬声器而不是听筒,您可以使用
try! AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.Speaker)
Swift 4
的解决方案try? session.setCategory(.playAndRecord, mode: .default, policy: .default, options: .defaultToSpeaker)
P.S.完整的class你可以查看我的gist
我在swift游乐场也遇到过,音量比原文件中的声音小很多。调大音量就行了。
audioPlayer?.volume = 3