Запаздывание звука Objective C при многократном повторении

Я кодирую простую игру, в которой я перемещаю квадрат, который воспроизводит звуковой эффект каждый раз, когда квадрат движется. (как звук ходьбы)

Проблема заключается в воспроизведении звукового эффекта, вызывающего задержку обновления экрана. Как будто это было слишком много производительности для двигателя. Я спрашивал, есть ли способ правильно воспроизводить повторяющийся, но не непрерывный звук (на самом деле это не цикл, но он мог бы быть, если бы ходьба была бесконечной)

вот моя функция: ... как я инициализировал аудио объект

moveSound = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];

а вот функция где она вызывается

...
 {
  moveSound.currentTime = 0;
  [moveSound play];
 } 

есть хороший способ сделать это? Спасибо


person loïc    schedule 25.05.2010    source источник


Ответы (2)


Чтобы получить звук с меньшей задержкой, вам, вероятно, следует изучить CoreAudio API.

Ваш код будет выглядеть примерно так:

NSString *audioPath = [[NSBundle mainBundle] pathForResource:@"NameOfSound" ofType:@"caf"];
NSURL *audioURL = [NSURL fileURLWithPath:audioPath];
SystemSoundID soundId;
AudioServicesCreateSystemSoundID((CFURLRef)audioURL, &soundId);

Этот soundId действует как дескриптор созданного вами звука, поэтому всякий раз, когда вам нужно было его воспроизвести, вы вызывали

AudioServicesPlaySystemSound(soundId);
person Jamie Pinkham    schedule 25.05.2010

Хорошо, я нашел это:

Цитата -(void)setSound {

CFBundleRef mainBundle = CFBundleGetMainBundle ();

CFURLRef soundFileURLRef = CFBundleCopyResourceURL (
                                            mainBundle,
                                            CFSTR ("squareMove"),// à mettre dans un xml ou plist
                                            CFSTR ("caf"),
                                            NULL
                                            );

AudioServicesCreateSystemSoundID (
                                  soundFileURLRef,
                                  &soundFileObject
                                  );
CFRelease(soundFileURLRef);

}

и я играю звук как

AudioServicesPlaySystemSound (объект звукового файла);

Жаль, что мы не можем сделать миди

person loïc    schedule 10.06.2010