web-dev-qa-db-ja.com

AVAudioPlayerがiPhone 6および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+でサウンドを改善するにはどうすればよいですか?

[〜#〜]編集[〜#〜]

最近、音が数秒間自動的に増加したことに気付きましたが、何が問題なのかわかりません。

14
Zaid Pathan

AVAudioPlayerのボリュームを1に設定した場合、問題はシステムボリュームにあると思います。サウンドを再生するときに別のオーディオカテゴリを使用でき、ボリュームは別のカテゴリまたは別のオーディオルート(ネイティブスピーカー、ヘッドセット、Bluetoothなど)で異なります。アプリのデフォルトのカテゴリはambientですが、音楽アプリはplaybackです。サウンドを再生する前ではなく、再生するときに音量を調整してみてください。

5
user3349433

音がiPhoneの上部スピーカーから聞こえるため、音量が小さい(通話に使用)。

メインスピーカーへのAVAudioSession出力ポートをオーバーライドする必要があります。(下部スピーカー)

これはオーディオ出力をスピーカーにルーティングするコードです

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

Swift 3.

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

Swift 4のソリューション

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

P.S。フルクラスの場合は、私の Gist を確認できます

6
Bohdan Savych

メディアのボリュームも最大化する必要があります。

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
}

あなたの場合、オーディオを再生する直前にsetMediaVolume(1)を使用してください。

また、現在の音声ルートがイヤホンではなくスピーカーに向かっていることを確認してください。

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

また、Swiftプレイグラウンドでこれを経験しました。音量は元のファイルのサウンドよりもはるかに小さくなります。音量を上げるだけです。

audioPlayer?.volume = 3
0
Dary