Я внедрил код OpenAL в мою игру для iPhone. Когда я запускаю игру, она запускается в течение 1 секунды и останавливается на 2 секунды, а затем возобновляется (эффект сбоя). Я считаю, что это задерживается из-за загрузки звуковых файлов. Каково решение? Кто-нибудь может порекомендовать какую-либо книгу, сайт или исходный код (не ссылка на iphone, пожалуйста)? Есть ли процесс загрузки и где я должен инициализировать процесс загрузки? Это поможет?
Ниже я включил соответствующие компоненты кода OpenAL, который я реализовал. Звуковой файл будет воспроизводиться и вызываться оператором if в цикле игры. Класс OpenALController предназначен для создания источников звука и буферов, а метод InitOpenAL вызывается в OpenALController . MyView - это пользовательский подкласс UIView, связанный с основным видом (я не использовал вид по умолчанию).
// MyView.m
// Настроенный UIView в качестве основного вида.
#import "OpenALSoundController.h"
- (void) startPlaying {
...
[self initializeValuables];
...
[self initializeTimer];
}
- (void) initializeTimer {
if (theTimer == ноль) {
theTimer = [CADisplayLink displayLinkWithTarget: автоматический выбор: @selector) gameLoop)];
theTimer.frameInterval = 2;
[theTimer addToRunLoop: [NSRunLoop currentRunLoop] forMode: NSDefaultRunLoopMode];
}
}
- (void) gameLoop {
...
Если что-то = правда
// Воспроизвести звук
[[OpenALSoundController sharedSoundController] playSound1];
...
}
...
@ Конец
// OpenALSoundController.h
@interface OpenALSoundController: NSObject {
...}
...
+ (OpenALSoundController *) sharedSoundController
...
@ Конец
// OpenALSoundController.m
// Синглтон-аксессор
{
статический OpenALSoundController * shared_sound_controller;
@synchronized (само)
{
if (nil == shared_sound_controller)
{
shared_sound_controller = [[OpenALSoundController alloc] init];
}
return shared_sound_controller;
}
return shared_sound_controller;
}
- (недействительно) initOpenAL {
...
file_url = [[NSURL alloc] initFileURLWithPath: [[NSBundle mainBundle] pathForResource: @ "fire" ofType: @ "wav"]];
firePcmData = MyGetOpenALAudioDataAll ((CFURLRef) file_url, & data_size, & al_format, & sample_rate);
alBufferData (fireOutputBuffer, al_format, firePcmData, data_size, sample_rate);
[file_url release];
...
alSourcei (outputSourceFire, AL_BUFFER, fireOutputBuffer);
...
}