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

кодирам в проста игра, в която премествам квадрат, който изпълнява звуков ефект всеки път, когато квадратът се движи. (като ходещ звук)

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

ето моята функция: ... начина, по който инициализирах аудио обекта

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

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

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

има ли добър начин да го направя? Мерси


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


Отговори (2)


За да получите аудио с по-ниска латентност, вероятно трябва да погледнете в API на CoreAudio.

Вашият код ще изглежда така:

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

Добре намерих това:

Blockquote -(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 (soundFileObject);

Жалко, че не можем да направим midi

person loïc    schedule 10.06.2010