Sound nicht das Spiel mit AVAudioPlayer
Ich gesucht habe und ich glaube, mein problem ist ziemlich einzigartig. Ich bin mir bewusst, dass der Simulator 5.1 Fehler bei der Verwendung von AVAudioPlayer, das ist nicht mein problem. Ich bin auf einem iOS 5.1 Gerät.
Hier ist meine header-Datei:
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <AVFoundation/AVAudioPlayer.h>
-(IBAction)pushBell;
@end
und meine Umsetzung-Datei:
#import "BellViewController.h"
@interface BellViewController ()
@end
@implementation BellViewController
-(IBAction)pushBell {
NSString *soundPath =[[NSBundle mainBundle] pathForResource:@"bell1" ofType:@"caf"];
NSURL *soundURL = [NSURL fileURLWithPath:soundPath];
NSError *error;
AVAudioPlayer *theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:&error];
[theAudio setDelegate:self];
[theAudio setNumberOfLoops:0];
[theAudio play];
}
@end
Und ich habe eine Schaltfläche in mein .xib, der spielt die Datei.
Um sicherzustellen, dass ich verwiesen meine audio-Datei korrekt, ich habe bewusst geben Sie einen falschen Dateinamen und in der Tat bekam ich eine Ausnahme. Um sicherzustellen, dass die Datei abspielbar ist, ich Mail es mir und spielte es auf dem Gerät.
Wenn ich Tippen Sie auf die Schaltfläche höre ich nichts. Es gibt keine Fehler. Ich weiß nicht, was falsch ist.
Mehr Informationen
iPhone 4 mit iOS 5.1
Xcode 4.3.2
Audio ist über 700kbps umgewandelt .caf-format mit afconvert aus einer großen .wav-Datei.
- Haben Sie Schritt für Schritt durch mit dem debugger? Haben Sie überprüfen Sie den Inhalt der NSError?
Du musst angemeldet sein, um einen Kommentar abzugeben.
GELÖST.
1.- Überprüfen Sie, ob Ihre Datei wurde Hinzugefügt, um "Copy Bundle Resources" in den Build-Phasen.
2.- ViewController.m
3.- Verbinden Sie die IBAction auf Ihre Schaltfläche im Interface Builder.
Getan.
War dies mein Problem, ich bin einfach nur Entsendung es hier, falls es hilft jemand!
Ob Sie es glauben oder nicht, es scheint ein bug im iOS 5.1 auf dem iPad 2 zumindest), wo, wenn Sie hatte die Side-Schalter Stumm geschaltet und es war Stumm, dann legen Sie die Side-Schalter zum Sperren der Rotation, AVAudioPlayer sounds lassen sich NICHT ABSPIELEN, außer über Kopfhörer!
Also musste ich auf die app "Einstellungen", ändern Sie den Schalter wieder Stumm zu schalten, dann ausschalten des iPad schalten Sie es wieder Sperren, um die Drehung und die app gestartet, um richtig zu arbeiten.
Ihre
theAudio
AVAudioPlayer
aufgehoben wird, bevor Sie überhaupt anfangen zu spielen (da es verteilt sich wie eine lokale variable innerhalb pushBell Methode.Den code ändern zu:
header-Datei:
Umsetzung Datei:
Ich gehe davon aus, dass
BellController
ist einUIViewController
, wenn es eine andere Art von Klasse, einfach ändern Sie den code entsprechend.alloc init
ist nicht genug, um sicherzustellen, dass ein Objekt bleibt im Speicher! Vielen Dank 🙂Ich denke, dass es ein Speicher-Problem, sollten Sie instanziieren die
AVAudioPlayer *theAudio
als eine Globale Klasse-Objekt und initialisieren es in derinit
Methode. Dann führen Sie einfach die[theAudio play];
Methode in der-(IBAction)pushBell
Methode.Reagierte ich nicht eine ähnliche Frage im Zusammenhang mit spielen, ein system-sound (die in der Tat ist das, was Sie versuchen zu tun), check it out, meine Antwort ist an der Unterseite:
Konnte nicht spielen sound system nach der Umstellung auf iOS 5
Durch die Art und Weise zu spielen die Glocke als ein system, sound,
AVAudioPlayer
ist besser geeignet, um zu spielen, Tonspuren, keine Glocken und Effekte.Ich hoffe, dass es hilft.
Ich Stimme mit hooleyhoop. Versuchen
sehen, was kommt.
Andere alternative wäre, um den Spieler-Objekt in
viewDidLoad
oderinitWithNib
und speichern Sie es als eine Eigenschaft an dem Objekt. Auf diese Weise können Sie etwas verwenden wie[self.theAudio prepareToPlay];
Zu vermeiden, laden Sie die audio-jedes mal, wenn Sie drücken Sie die Taste, die Sie sparen könnten einige Zeit, wenn es qualitativ hochwertige audio. Dann rufen Sie einfach
[self.theAudio play];
in SieIBAction
Methode.Sorry, wenn diese Antwort ist ein wenig schlampig - Eingabe auf einem iPad kann so nicht überprüfen, richtig.
Sollten Sie ihm einige Zeit zur Vorbereitung der Aussprache, da es wahrscheinlich die Pufferung von einer URL.
Code: