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.
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äß.
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.
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.
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.
Sie sollten die Aussprache etwas vorbereiten, da sie wahrscheinlich von einer URL gepuffert wird.
Der Code:
%Vor%Tags und Links iphone ios avaudioplayer audio core-audio