Sound wird nicht mit AVAudioPlayer wiedergegeben

8

Ich habe gesucht und ich glaube mein Problem ist ziemlich einzigartig. Ich kenne den Bug von Simulator 5.1, wenn ich AVAudioPlayer benutze, was nicht mein Problem ist. Ich laufe auf einem iOS 5.1-Gerät.

Hier ist meine Header-Datei:

%Vor%

und meine Implementierungsdatei:

%Vor%

Und ich habe eine Schaltfläche in meiner .xib, die die Datei abspielt.

Um sicherzugehen, dass ich meine Audiodatei korrekt referenziert habe, habe ich absichtlich einen falschen Dateinamen eingegeben und tatsächlich habe ich eine Ausnahme bekommen. Um sicherzustellen, dass die Datei spielbar ist, habe ich sie mir selbst geschickt und auf dem Gerät abgespielt.

Wenn ich auf den Knopf tippe, höre ich nichts. Es gibt keine Fehler. Ich weiß nicht, was falsch ist.

Weitere Informationen iPhone 4 mit iOS 5.1 Xcode 4.3.2 Audio ist etwa 700kbps konvertiert in .caf-Format mit afconvert aus einer großen .wav-Datei.

    
Aen Tan 01.04.2012, 09:10
quelle

6 Antworten

20

Gelöst.

1.- Überprüfen Sie, ob Ihre Datei zu "Bundle-Ressourcen kopieren" in Build-Phasen hinzugefügt wurde.

2.- ViewController.m

%Vor%

3.- Verbinden Sie die IBAction mit Ihrer Schaltfläche in Interface Builder.

Fertig.

    
3lvis 01.04.2012, 11:36
quelle
18

Das war mein Problem, also poste ich es nur hier, falls es jemandem hilft!

Ob Sie es glauben oder nicht, es scheint einen Bug zu geben (zumindest in iOS 5.1 auf iPad 2). Wenn Sie den Side Switch auf Mute gestellt haben und er stummgeschaltet war, dann stellen Sie den Side Switch auf Lock Rotation, AVAudioplayer Sounds SPIELT NICHT außer über Kopfhörer!

Ich musste also zur App "Einstellungen" wechseln, den Schalter wieder auf "Stumm" stellen, dann die Stummschaltung des iPads aktivieren, zurück in "Sperrdrehung" schalten und meine App funktionierte ordnungsgemäß.

    
jowie 26.04.2012 14:27
quelle
14

Ihre theAudio AVAudioPlayer wird freigegeben, bevor sie überhaupt abgespielt werden kann (da sie als lokale Variable innerhalb der pushBell-Methode zugewiesen wurde.

Ändern Sie Ihren Code in:

Header-Datei:

%Vor%

Implementierungsdatei:

%Vor%

Ich nehme an, dass BellController ein UIViewController ist, wenn es eine andere Art von Klasse ist, modifiziere einfach den Code entsprechend.

    
Rok Jarc 01.04.2012 10:14
quelle
4

Ich denke, dass es sich um ein Speicherproblem handelt, Sie sollten das AVAudioPlayer *theAudio als globales Klassenobjekt instanziieren und es in der init -Methode initialisieren. Führen Sie dann einfach die Methode [theAudio play]; in der Methode -(IBAction)pushBell aus.

Ich habe geantwortet, mache ein ähnliches Problem im Zusammenhang mit dem Abspielen eines System-Sounds (was in der Tat ist, was du versuchst zu tun), schau es dir an, meine Antwort ist unten:

Sound des Systems konnte nicht wiedergegeben werden Wechsel zu iOS 5

Denken Sie übrigens daran, die Glocke als Systemsound zu spielen, AVAudioPlayer eignet sich besser zum Abspielen von Soundtracks, nicht von Glocken und Effekten.

Ich hoffe, dass es hilft.

    
Carles Estevadeordal 01.04.2012 09:56
quelle
2

Ich stimme mit hooleyhoop überein. Probieren Sie

aus %Vor%

um zu sehen, was herauskommt.

Eine weitere Alternative wäre, das Player-Objekt entweder in viewDidLoad oder initWithNib einzurichten und es als Eigenschaft für Ihr Objekt zu speichern. Auf diese Weise können Sie etwas wie      [self.theAudio prepareToPlay];

Um zu vermeiden, dass jedes Mal, wenn Sie die Taste drücken, die Audiodaten geladen werden, was bei hoher Audioqualität Zeit sparen kann. Dann rufe einfach [self.theAudio play]; in deiner IBAction Methode auf.

Entschuldigung, wenn diese Antwort ein wenig schlampig ist - Tippen auf einem iPad, so kann nicht richtig überprüft werden.

    
Jon Hocking 01.04.2012 09:39
quelle
1

Sie sollten die Aussprache etwas vorbereiten, da sie wahrscheinlich von einer URL gepuffert wird.

Der Code:

%Vor%     
Sidwyn Koh 01.04.2012 09:59
quelle