Объектив C звук отстает при многократном повторении - PullRequest
0 голосов
/ 25 мая 2010

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

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

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

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

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

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

Есть ли хороший способ сделать это? ТНХ

Ответы [ 2 ]

1 голос
/ 25 мая 2010

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

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

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

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

AudioServicesPlaySystemSound(soundId);
0 голосов
/ 10 июня 2010

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

Blockquote - (недействительными) 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 (SoundFileObject);

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

...