2016-06-25 5 views
0

ich auf einem einfachen Spiel arbeite und nach jedem Bildschirm berühren, eine Animation auf einem kleinen UIImageView geschieht und dies sehr gut passieren und die App läuft reibungslos mit CADisplayLink als Timer.AVAudioPlayer Schluckauf die App manchmal

Ich fügte hinzu, eine MP3-Datei nach jeder Berührung mit 1 Sekunde lengh als AVAudioPlayer vorstellen, ein Geräusch wie zu spielen:

Also das erste Mal, dass ich den Bildschirm ersten Schluckauf berühren Bip ein geschieht die App freeze für weniger als ein Zweitens, dass ich sagen kann, dass es ok ist, denn es ist das erste Mal, dass der Sound Speicher reserviert.

Das Problem passiert später, wenn Sie den Bildschirm wieder berühren, wenn ich es früher als 3 Sekunden berühre, macht die App keinen Schluckauf, aber wenn ich 4 Sekunden und mehr warte, beginnt die App nach jeder Berührung zu schlucken.

Jedes Mal, wenn ich berühren immer wieder früher als 3 Sekunden zwischen berührt, funktioniert die App nicht Schluckauf, aber nach 4 Sekunden zwischen Berührungen, der App Schluckauf.

Jede Idee, Schluckauf zu lösen?

Dies ist ein Code benötigt, wenn

@property (nonatomic, strong) AVAudioPlayer *mySound; 

- (void)viewDidLoad { 

NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"bip" ofType:@"mp3"]; 
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:soundFilePath]; 
AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil]; 

self.mySound = newPlayer; 

[mySound prepareToPlay]; 
[mySound setDelegate:self]; 
} 

und nach Berührung kommt

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
UITouch *touch = [[event allTouches] anyObject]; 
CGPoint location = [touch locationInView:touch.view]; 
if (location.x < viewWidth/2) { 
    [mySound play]; 
} else { 
    [mySound play]; 
} 
} 
+0

Könnten Sie einen anderen Code zeigen, die in Ihrer Taste ist? – Ro4ch

+0

Ich benutze keine Taste und bekomme einfach die Berührung irgendwo auf dem Bildschirm. Ich habe meine Frage für dich bearbeitet. –

Antwort

0

Machen Sie einen sehr kurzen stillen Klang. Verwenden Sie Ihren Timer, um dies (mit einem anderen Sound-Player) jede Sekunde oder so zu spielen. - Sie sehen, was die Idee hier ist; Wir versuchen, den Medienserver am Leben zu erhalten, damit er bereit ist zu gehen, wenn wir unseren Soundeffekt wollen. Da Sie sagen, dass es vor 3 Sekunden kein Problem gibt, denke ich, dass der Medienserver nach 3 Sekunden wieder in den Ruhezustand gegangen ist. Unser Ziel ist es, es zu "kitzeln", damit es nicht passieren kann.

Im Allgemeinen aber mein Eindruck ist, dass AVAudioPlayer nicht für diese Art der Sache gedacht. Sie sollten wahrscheinlich AVAudioEngine verwenden, die ausgeführt werden kann und die Wiedergabe von Sounds ohne Latenz ermöglicht.

+0

Matt Ich habe es aber nicht gelöst, weiß aber nicht ob ich es richtig gemacht habe. Ich habe keine if-Anweisung gemacht, die alle 1 Sekunde ausgelöst wird, aber ich habe eine if-Anweisung, die jede Sekunde feuert und die [mySound prepareToPlay] in sie steckt, aber nicht gelöst. Matt: Ich habe die App am Simulator getestet und das Problem ist nicht auffällig, aber wenn ich es auf meinem Handy (6s +) teste, passiert das Problem wie zuvor. –

+0

danke Matt sooo viel :)) das hat es gerade gelöst. Kannst du mir sagen, dass diese Veröffentlichung des Medienservers durch das ARC verursacht wird, wenn es eingeschaltet ist? Ich mag einen 1 Minute still Loop-Sound machen, lebt zu halten, denken Sie, ob dies eine gute Möglichkeit für die Gesamtleistung ist, weil dies ein Mal aufgerufen wird, eine Minute und es gibt weniger Chance, mit einem anderen Prozess zu stören? –