【问题标题】:AVAudioPlayer playing Sound with very low volume in iPhone 6 and 6+AVAudioPlayer 在 iPhone 6 和 6+ 中以非常低的音量播放声音
【发布时间】:2015-06-19 23:05:36
【问题描述】:

我正在使用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+ 的声音?

编辑

最近我注意到声音自动增加了几秒钟,但不知道发生了什么问题。?

【问题讨论】:

  • 您没有设置整个设备的音量。仅取决于 mainVolume。主卷在同一层吗??
  • 是的 Volume 已设置为已满。
  • 这看起来很傻,但是sound.mp3不是很大声吗?
  • 它在 iPod 中播放的声音很大,但在 iPhone 6 和 6+ 中却没有。
  • 而且在 Music-App 中播放歌曲也是一样的音量?也许 iPod 的声音通常更大

标签: ios swift avaudioplayer


【解决方案1】:

我认为如果您将 AVAudioPlayer 的音量设置为 1,那么问题出在系统音量上。 您可以在播放声音时使用不同的音频类别,并且在不同的类别或不同的音频路径(如本地扬声器、耳机或蓝牙)中音量不同。您的应用中的默认类别将是 ambient,但音乐应用是播放。 您可以在播放声音时而不是在播放之前尝试调整音量。

【讨论】:

  • 我可以把ambient改成playback吗?
  • 你确定是我上面提到的情况吗?背景时不会播放环境声音,但会播放。您可以尝试 [AVAudioSession sharedInstance] setCategory:error:]。但是你应该注意,如果你的应用不是音乐播放器或类似的东西,苹果可能会拒绝它。
  • 您应该知道,即使在播放类别时,您的音量仍然可以调整到与环境或其他类别不同的​​低值。
  • 所以我确实将类别设置为Playback,你有什么参考资料说我的应用程序可以被拒绝if my app is not a music player or something similar, apple may reject it.
  • 我的应用程序是RecordingPlaying 同时发出声音,当我将类别设置为Playback 时,录制停止。当我将类别设置为PlayAndRecord 时,音量再次变慢。
【解决方案2】:

音量低是因为声音来自 iPhone 的顶部扬声器(用于通话)。

您必须覆盖主扬声器的 AVAudioSession 输出端口。(底部扬声器)

这是将音频输出路由到扬声器的代码

AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.Speaker, error: &error)

Swift 3.0

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

【讨论】:

  • 永久设置:audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, with: AVAudioSessionCategoryOptions.defaultToSpeaker)
【解决方案3】:

您还需要最大化媒体音量。

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
}

在您的情况下,请在播放音频之前设置MediaVolume(1)。

还要确保当前音频路由是到扬声器而不是听筒,您可以使用

try! AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.Speaker)

【讨论】:

    【解决方案4】:

    Swift 4的解决方案

    try? session.setCategory(.playAndRecord, mode: .default, policy: .default, options: .defaultToSpeaker)
    

    P.S.完整课程可以查看我的gist

    【讨论】:

    • 嗨,这个方法。与 webrtc 合作?谢谢
    【解决方案5】:

    我在swift playground也体验过,音量比原文件的声音小很多。只是增加音量。

    audioPlayer?.volume = 3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 2015-12-22
      • 1970-01-01
      相关资源
      最近更新 更多