Frage

Wir haben ein Spiel, das zu werden freigegeben ganz in der Nähe, aber wir haben ein extrem ärgerliches Problem. Ein auf unseren Beta-Tester Telefone, er kann nicht von dem in Spiel Soundeffekt hören. Er kann aber hört die Hintergrundmusik und die Titel-Bildschirm Musik einfach gut.

Der Hintergrund und die Titelmusik werden sowohl über AVAudioPlayer gespielt werden (sie sind mehr, wir brauchen Looping und Lautstärkeregelung, etc.). Die Soundeffekte einfach werden mit AudioServicesPlaySystemSound gespielt (sie sind sehr kurz, wir haben nicht präzise Steuerung benötigen oder zu wissen, wann sie enden, etc). Dies funktioniert auf den meisten iPhones, aber nicht in diesem Fall. All dies wird mit einer Audio-Session von AVAudioSessionCategorySoloAmbient gespielt wird.

So habe ich zwei Fragen:  - Erstens ist dies eine akzeptable Umsetzung? das heißt es ist etwas, was ich verpasst, das sagt man nicht, diese beiden Frameworks mischen, oder einen Grund, warum es eine schlechte Idee, sie zu mischen?  - Zweitens hat vor so etwas wie dies jemand gesehen? Wenn ja, haben Sie einen Weg, um es?

Zusätzliche Hintergrundinformationen: Ich kann ziemlich schlüssig sagen, dass auf seinem Handy, es ist die Vermischung der beiden Frameworks ist. Er war in der Lage Töne zu hören, bis etwa die gleiche bauen, wo wir den Titel Bildschirm Musik hinzugefügt. Auch, wenn ich einer des Tons ändern durch eine AVAudioPlayer zu arbeiten, er ist in der Lage, es zu hören. Leider kann ich einfach nicht die Geräusche in AVAudioPlayers bewegen, weil es einfach nicht gut überhaupt nicht durchführt, und ich brauche eine bessere Synchronisation.

War es hilfreich?

Lösung

Ich habe zwei Anwendungen im App Store, das diese beiden Frameworks mischen. AVAudioPlayer für Klänge, die beginnen erfordern und zu stoppen und Lautstärkeregler und Audioservices Toolbox für kurze kleine Piepstöne und Klicks. Der einzige, kann ich mich vorstellen, aus der Spitze von meinem Kopf ist, dass das Volumen der AVAudioPlayer scheint von den Audioservice Klängen separat gesteuert werden. So überprüft, um sicherzustellen, dass der Tester nicht Töne ausgeschaltet hat gedreht (mit dem Vibrationsmodus-Schalter) oder die Lautstärke gedreht Weg nach unten.

Wenn das nicht hilft, sagen Sie mir mehr über Ihre Sounds / Code und ich kann einig Code zu meinen App hinzufügen, um zu sehen, ob ich das gleiche Verhalten bekommen. Natürlich klingt wie die meisten Ihre Tester dieses Problem nicht haben, und ich werde es wahrscheinlich auch nicht sehen.

Andere Tipps

EDIT 2 :
Ich habe die Ursache des Fehlers bestimmt. Das zwei verschiedene Audio-Frameworks spielt auf zwei verschiedene Lautstärkeeinstellungen. Es ist das Hauptvolumen (das ist, was oben zeigt, sobald Sie in der App sind, und hat keinen Titel drauf) und die Ruftonlautstärke (das ist, was oben zeigt, wenn Sie auf dem Home-Bildschirm ohne App geladen sind). Die AVAudioPlayer Anrufe spielen mit der Hauptlautstärkeeinstellung. Als ich die Kategorie AVAudioSessionCategorySoloAmbient (siehe Code unten) festgelegt haben, ist dies die Lautstärkeregelung, die, wenn Sie die Lautstärkewippe in der App verwenden, wird angepasst. Die SystemSounds sind jedoch an der Ruftonlautstärke gespielt. Dies wird nicht in der App kommen, und als solche ist nicht der Benutzer ihre Einstellungen während des Spiels einzustellen.

Es ist einfach, die mögliche Verwirrung für den Benutzer zu sehen: Lassen Sie uns sagen, dass sie ihre ringer zu niedrig eingestellt haben, oder sogar ausgeschaltet. Sie beginnen das Spiel zu spielen. Sie hören die Titel-Bildschirm Musik (AVAudioPlayer) und sind in der Lage die Lautstärke nach oben oder unten zu drehen und es reagiert normal. Dann beginnen sie das Spiel und die Soundeffekte spielen (SystemSounds), und sie hören nichts, weil die Ruftonlautstärke niedrig / ausgeschaltet ist. Im Bemühen, die Soundeffekte zu hören, sie stoßen entsprechend das Volumen und die Hintergrundmusik reagiert auf. So aus dieser Sicht sieht es auf jeden Fall wie die Soundeffekte sind einfach nicht spielen.

Wenn Sie diese ähnliche Situation haben, hat Ihre Benutzer sicherstellen, dass ihr Ruftonlautstärke ist, bevor das Spiel zu spielen und ihr Mute-Schalter eingeschaltet ist (das heißt nicht stumm geschaltet). Sie können auch all dies überprüfen, indem Sie den Test selbst zu tun - Drop Ihre Ruftonlautstärke und Bump In-App-Lautstärke. Ihre SystemSounds sollten aus dem Mix fallen.

Original Antwort : In neu Graben durch all die Dokumente, fand ich die Antwort. Ich war nicht richtig, die Audio-Sitzung zu aktivieren. Vorher hatte ich nur diesen Code die Kategorie festlegen:

NSError *setCategoryError = nil; 
BOOL    categoryWasSet    = [[AVAudioSession sharedInstance] 
                              setCategory: AVAudioSessionCategorySoloAmbient 
                              error: &setCategoryError]; 

Aber ich brauchte auch den folgenden Code hinzufügen, um explizit die Audiositzung zu aktivieren:

NSError *activationError  = nil;
BOOL    activationSuccess = [[AVAudioSession sharedInstance]
                              setActive: YES 
                              error: &activationError];

Ich habe mit diesem User erneut getestet, und es das Problem vollständig behoben ist. Hoffe, das hilft jeder, der ein ähnliches Problem haben könnte.

EDIT: Dies scheint nicht doch das Problem gelöst zu haben. Ich habe ein falsch positive von meinem Tester, und wenn mehr im Detail untersucht scheint es, dass er nicht wirklich der Systemsound erzeugten Töne hörte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top