2010-11-26 9 views
0

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);
...
}

Antwort

0

Sie könnten eine OpenAL Sound-Engine für iOS in Finch, interessiert sein. Es ist sehr gut für Spiele geeignet. Es ist normalerweise besser, bereits vorhandenen Code wiederzuverwenden als eigene zu entwickeln und zu pflegen.

0

Zuerst ist es besser, mp3 zu verwenden, da WAV-Dateien riesig sind und das Laden von der Festplatte Zeit braucht. Mp3-Dateien sind auf der Festplatte kleiner, werden in den Speicher geladen und dort zum Abspielen dekomprimiert. Experimentieren Sie, indem Sie auch die MP3-Bitrate/-Codierungsqualität reduzieren.

Außerdem müssen Sie die Sounds vorab laden, um Schluckauf zu vermeiden, sonst haben Sie eine Verzögerung, wenn das erste Mal ein Sound abgespielt wird.

Verwandte Themen