implementiert ist Ich implementierte OpenAL-Code zu meinem iPhone-Spiel. Wenn ich das Spiel starte, läuft es für 1 Sekunde und bleibt für 2 Sekunden stehen, dann wird es fortgesetzt (Schluckauf-Effekt). Ich glaube, es verzögert sich aufgrund der Sound-Dateien geladen. Was ist die Lösung? Kann jemand irgendein Buch, Aufstellungsort oder Quellcode empfehlen (nicht die iphone Referenz, bitte)? Gibt es einen Ladevorgang und wo sollte ich den Ladevorgang initialisieren? Würde das helfen?Tonwiedergabeverzögerung (Hiccup), wenn OpenAL auf iphone
Im Folgenden habe ich die zugehörigen Komponenten des von mir implementierten OpenAL-Codes aufgenommen. Die Sounddatei wird abgespielt und durch eine "if" -Anweisung im Gameloop aufgerufen. Die OpenALController-Klasse dient zur Erstellung von Soundquellen und Puffern. Die Methode InitOpenAL wird in OpenALController aufgerufen. MyView ist eine benutzerdefinierte Unterklasse von UIView und mit der Hauptansicht verbunden (ich habe die Standardansicht nicht verwendet).
// MyView.m // Eine benutzerdefinierte UIView als Hauptansicht.
#import "OpenALSoundController.h"
- (void) {startPlaying
...
[self initializeValuables];
...
[self initializeTimer];
}
- (void) initializeTimer { if (TheTimer == null) {
TheTimer = [CADisplayLink displayLinkWithTarget: Selbstwähler: @selector) gameLoop)];
theTimer.frameInterval = 2;
[DerTimer addToRunLoop: [NSRunLoop currentRunLoop] forMode: NSDefaultRunLoopMode];
}
}
- (void) {gameLoop ... Wenn etwas = true // Spielen Sie den Sound [[OpenALSoundController sharedSoundController] playSound1];
...
}
...
@end
// OpenALSoundController.h @interface OpenALSoundController: NSObject {
...}
.. .
+ (OpenALSoundController *) sharedSoundController
...
@end
// OpenALSoundController.m
// Singleton Accessor
{
statischer OpenALSoundController * shared_sound_controller;
@synchronized (Selbst-)
{ if (nil == shared_sound_controller)
{ shared_sound_controller = [[OpenALSoundController alloc] init];
}
zurück shared_sound_controller;
}
zurück shared_sound_controller;
}
- (void) {initOpenAL
...
file_url = [[NSURL alloc] initFileURLWithPath: [[NSBundle main] pathForResource: @ "Feuer" ofType: @ "wav"]];
firePcmData = MyGetOpenALAudioDataAll ((CFURLRef) datei_url, & data_size, & al_format, & sample_rate);
alBufferData (fireOutputBuffer, al_format, firePcmData, data_size, sample_rate);
[file_url release];
...
alSourcei (outputSourceFire, AL_BUFFER, fireOutputBuffer);
...
}