Задержка воспроизведения звука (сбой) при использовании OpenAL на iphone - PullRequest
0 голосов
/ 26 ноября 2010

Я внедрил код 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);
...
}

Ответы [ 2 ]

0 голосов
/ 03 февраля 2011

Сначала лучше использовать mp3, поскольку файлы wav огромны, а загрузка с диска занимает много времени.Файлы MP3 меньше на диске, загружаются в память и распаковываются для воспроизведения.Попробуйте поэкспериментировать, уменьшив битрейт mp3 / качество кодирования.

Также вам необходимо предварительно загрузить звуки, чтобы избежать икоты, иначе у вас будет задержка при первом воспроизведении звука.

0 голосов
/ 27 ноября 2010

Вас может заинтересовать Finch , звуковой движок OpenAL для iOS.Это очень хорошо подходит для игр.Обычно лучше повторно использовать уже существующий код, чем разрабатывать и поддерживать свой собственный.

...