2015-04-14 3 views
7

Ich spiele einen Sound mit AVAudioPlayer.AVAudioPlayer spielt Sound mit sehr geringer Lautstärke in iPhone 6 und 6+

Die Lautstärke in iPods (iOS7 & iOS8 beide) ist gut.

Aber wenn ich denselben Ton in iPhones spiele, spielt der Ton mit sehr niedriger Lautstärke.

Hier ist mein Code:

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

ich bereits AudioToolbox.framework Bibliothek in meinem Projekt aufgenommen haben.

Wie kann ich Sound in iPhone6 ​​und 6+ verbessern?

EDIT

Kürzlich bemerkte ich, dass automatisch der Ton für einige Sekunden erhöht wurde, aber nicht wissen, was falsch ist passiert.?

+0

mit tun Sie sind nicht die Lautstärke der gesamten Geräteeinstellung. Nur abhängig von der Hauptmenge. Ist die Hauptlautstärke auf dem gleichen Level? – Michael

+0

ja 'Volume' ist auf voll eingestellt. –

+0

Das scheint albern, aber ist sound.mp3 nicht sehr laut? –

Antwort

2

Ich denke, wenn Sie die Lautstärke von AVAudioPlayer auf 1 setzen, dann ist das Problem auf der Systemlautstärke. Sie können eine andere Audio-Kategorie verwenden, wenn Sie Ihren Sound wiedergeben und die Lautstärke in verschiedenen Kategorien oder Audiorouten unterschiedlich ist (wie native Lautsprecher, Kopfhörer oder Bluetooth). Die Standardkategorie in Ihrer App lautet ambient, aber die Musik-App ist Wiedergabe. Sie können versuchen, die Lautstärke anzupassen, wenn Sie Ihren Sound abspielen, und nicht bevor er abgespielt wird.

+0

Kann ich 'Ambient' in' Playback' ändern? –

+0

Sind Sie sicher, dass es der Fall ist, den ich oben erwähnt habe? Der Hintergrundsound wird nicht abgespielt, aber der Hintergrund wird wiedergegeben. Sie können versuchen [AVAudioSession sharedInstance] setCategory: error:]. Sie sollten jedoch darauf achten, dass Apple Ihre App ablehnt, wenn es sich nicht um einen Musikplayer oder Ähnliches handelt. – user3349433

+0

ok, also ist meine app nicht 'music player', kann also nicht so gehen. –

33

Die Lautstärke ist niedrig, da der Ton über den oberen Lautsprecher des iPhone (zum Anrufen) gesendet wird.

Sie haben die AVAudioSession aus außer Kraft zu setzen setzen Port an den Hauptlautsprecher (unten Lautsprecher)

Dies ist der Code, den Weg Audioausgang Lautsprecher

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

Swift 3.0.

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

dauerhaft einstellen: 'audioSession.setCategory (AVAudioSessionCategoryPlayAndRecord, mit: AVAudioSessionCategoryOptions.defaultToSpeaker)' – aBikis

+0

das ist die richtige Lösung. – boreas

0

Sie müssen auch die Datenträgermenge maximieren.

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 
    } 
} 

dann die Lautstärke wie folgt aus:

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

in Ihrem Fall setMediaVolume (1) rechts, bevor Sie Ihre Audio spielen.

auch sicherstellen, dass die aktuelle Audio-Route zum Lautsprecher und nicht die Hörmuschel, können Sie die

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