Audio Session "Ducking" iOS 4 unterbrochen ...?

8

Ich habe eine App, die den MPAudioPlayerController verwendet, um auf die iPod Musikbibliothek zuzugreifen, und einen AVAudioPlayer, um Audio über die Musik zu legen. Ich habe diese Dokumentation als Leitfaden. Speziell:

  

Schließlich können Sie eine Kategorie erweitern, um automatisch die Lautstärke anderer Audiodaten zu verringern, wenn Ihr Audio abgespielt wird. Dies könnte zum Beispiel in einer Übungsanwendung verwendet werden. Sagen Sie, der Benutzer trainiert gerade mit seinem iPod, wenn Ihre Anwendung eine verbale Nachricht überlagern möchte - zum Beispiel: "Sie haben 10 Minuten lang gerudert." Um sicherzustellen, dass die Nachricht aus Ihrer Anwendung verständlich ist, wenden Sie die Eigenschaft kAudioSessionProperty_OtherMixableAudioShouldDuck an Audiositzung. Wenn die Ducking-Funktion aktiviert wird, werden alle anderen Audiodaten auf dem Gerät - abgesehen von Telefonaudio - in der Lautstärke reduziert.

Aber ich sehe dieses Verhalten nicht. In der Tat, was ich sehe (oder eher höre) ist, dass, wenn ich die AudioSession mit kAudioSessionProperty_OtherMixableAudioShouldDuck auf true gesetzt habe, die MPAudioPlayerController-Anfangslautstärke reduziert wird, und wenn ich dann auf dem MPAudioPlayerController die Lautstärke anhöre (und dann wieder spiele) wird auf "normale" Level erhöht. Die Wiedergabe des AVAudioPlayers hat keinen Einfluss auf den Audiopegel ...

Also habe ich einen einfachen Testfall eingerichtet, um das zu reproduzieren.

In einer ViewController-Kopfzeile:

%Vor%

und in der Implementierung:

%Vor%

Ich habe ein paar UIB-Tasten angeschlossen. Eine für musicAction (zum Abspielen / Anhalten des MPMusicPlayerControllers) und eine für die soundAction (zum Abspielen / Anhalten des AVAudioPlayers).

Wie gesagt, wenn ich auf die musicAction-Taste tippe, wird die Musik abgespielt, aber bei reduzierter Lautstärke, und wenn ich auf die soundAction-Taste tippe, wird das Overlay abgespielt, hat aber keinen Einfluss auf die Lautstärke des MPMusicPlayerControllers. Und mehr Bug-like, ist, dass, wenn ich den MPMusicPlayerController pausiere und dann spiele, die Lautstärke der Musik auf das Niveau steigt, das es gewesen wäre, wenn ich die AudioSession nicht eingerichtet hätte.

Ich bin daran interessiert zu wissen, ob jemand anderes diese Erfahrung gemacht hat, und wenn ja, wenn du eine Arbeit gefunden hast (oder mir sagen kannst, dass ich etwas falsch mache). Ansonsten denke ich, ich fahre nach Radar.

Vielen Dank,

Levi

    
levigroker 20.07.2010, 19:33
quelle

3 Antworten

9

Ich habe diesen Beitrag benutzt, als ich ein ähnliches Problem hatte und Schwierigkeiten hatte, es konsequent zu machen. Es würde für eine Weile funktionieren und dann einfach stecken bleiben "duckte". Ich habe viel Zeit damit verbracht, das zu erforschen und zu debuggen, und habe schließlich nur Apple angerufen. Sie sagten mir, ich solle mir den Breadcrumb-Beispielcode ansehen. Ich bin diesem Beispiel gefolgt und alles hat gut funktioniert.

Hier ist Apples Beispielcode:

Ссылка

Der Support / Entwickler bei Apple sagte auch, die Reihenfolge zu sehen, wie und wann sie die Session-Eigenschaften einstellen. Das war anscheinend der Trick. Nach dem Lesen vieler Beiträge hier und anderswo hatte ich Einstellungen, die miteinander in Konflikt standen. Von Grund auf neu zu beginnen und dem Brotkrumen-Beispiel zu folgen, hat es funktioniert. Ich hatte seither kein Problem.

Ich habe die gleiche Antwort hier gepostet:

Wie AVAudioSession abdocken

Für mich war diese Antwort ein Geschäftsgeheimnis, da es so schwierig war, zu arbeiten, und es funktionierten Apps auf dem Markt. Für mich war ein funktionierendes Beispiel zu sehen, das ziemlich genau das Geräusch war, das duckend und drückend war, das Gold wert.

Außerdem habe ich Apple gegenüber erwähnt, dass dies ein bekanntes Problem ist und sie nicht einverstanden waren. Ihnen war hier kein Problem bekannt. Sicher genug, wenn Sie dem breadcrumb Beispiel folgen, funktioniert es ohne irgendeine merkwürdige Sitzung, deaktivieren Sie und reactive, etc., usw.

    
zaphodtx 01.10.2011 02:06
quelle
3

Das Ducken bezieht sich nicht automatisch auf Ihre Spielsounds. Wenn Sie das Ducking einschalten, ertönt Hintergrundgeräusch. Wenn Sie die Ducking-Funktion deaktivieren und Ihre Audiositzung deaktivieren, wird der Hintergrundton wieder auf die ursprüngliche Stufe zurückgesetzt.

So nicht ducking in viewDidLoad einschalten. Schalten Sie es erst ein, wenn Sie gerade den Ton abspielen. Das führt dazu, dass sich der Hintergrundsound duckt. Wenn Ihr Sound abgespielt wurde, schalten Sie das Ducking wieder aus und schalten Sie Ihre Audiositzung wieder aus und wieder aktiv. Das bewirkt, dass sich der Hintergrundsound dockt:

%Vor%     
matt 09.01.2011 03:20
quelle
2

Die Dokumentation ist nicht klar, was das erwartete Verhalten von Ducking sein soll, aber was ich gefunden habe ist, dass, wenn Sie Ihre Audio-Sitzung für Ducking einrichten, wenn Sie die Audio-Sitzung aktivieren, Enten und wenn du es deaktivierst, duscht es. Also musst du die Audio-Session aktivieren und deaktivieren, um die Musik nur für deinen Sound-Cue zu entschlüsseln.

Ein Fehler, den ich gefunden habe, ist, dass das Ducking nicht entfernt wird, wenn Sie die Audiositzung innerhalb der audioPlayerDidFinishPlaying:successfully: -Methode von AVAudioPlayerDelegate deaktivieren, und das Volume auf dem gleichen Level bleibt. Ich habe bereits ein Radar auf diesem, aber es tut nicht weh, wenn andere ähnliche Dateien. In der Tat wird es wahrscheinlich Druck auf sie ausüben, es zu reparieren.

Sie starten die Audiositzung und halten sie an, so dass sie sich sofort duckt und duckt bleibt, so dass sie sich nicht mehr von der Musik entfernt, wenn Sie einen Ton abspielen. Das Problem, dass die Musiklautstärke nach dem Pausieren und Abspielen der Musik wieder ansteigt, klingt wie ein Fehler.

    
lucius 28.07.2010 06:26
quelle