AVAudioPlayer reproduciendo Sonido con un volumen muy bajo en iPhone 6 y 6+

Estoy reproduciendo un sonido con AVAudioPlayer .

El volumen de sonido en iPods (iOS7 y iOS8 ambos) es bueno.

Pero cuando juego el mismo sonido en iPhones, el sonido se reproduce con un volumen muy bajo.

Aquí está mi código:

 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() 

Ya he incluido la biblioteca AudioToolbox.framework en mi proyecto.

¿Cómo puedo mejorar el sonido en iPhone6 ​​y 6+?

EDITAR

Recientemente noté que automáticamente el sonido se incrementó por un par de segundos, pero no sé qué sucede.

Creo que si establece el volumen de AVAudioPlayer en 1, entonces el problema está en el volumen del sistema. Puede usar una categoría de audio diferente al reproducir su sonido y el volumen es diferente en diferentes categorías o en diferentes routes de audio (como el altavoz nativo, el auricular o el bluetooth). La categoría pnetworkingeterminada de su aplicación será ambiental , pero la aplicación de Música es la reproducción . Puedes intentar ajustar tu volumen cuando estás reproduciendo tu sonido en lugar de antes de que se reproduzca.

El volumen es bajo porque el sonido viene a través del altavoz superior del iPhone (usado para llamar).

Debe anular el puerto de salida de AVAudioSession al altavoz principal. (Altavoz inferior)

Este es el código que enruta la salida de audio al altavoz

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

Swift 3.0 :

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

También necesita maximizar el volumen de los medios.

 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.shanetworkingInstance().outputVolume return slider } } return slider } } 

luego cambia el volumen de esta manera:

 func setMediaVolume(volume : Float) { MPVolumeView().volumeSlider.value = volume } 

en su caso, setMediaVolume (1) justo antes de reproducir su audio.

también asegúrese de que la ruta de audio actual sea para el altavoz y no el auricular, puede hacerlo usando

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