2010-09-13 4 views
0

У меня есть приложение для барабанов, которое я создал, основываясь на AVAudioPlayer вместо обычных звуков системы, чтобы иметь немного контроля.Приложение для барабанов - лагги-звуки ... Как исправить?

Проблема заключается в том, что, когда сразу воспроизводятся два или более звука, он мешает и останавливает все звуки, поэтому ваш удар барабана становится прерывистым и случайным образом остановлен.

Например: бум бум бум бум chhhhh ч --- бум бо ---- chhhhh

Если вы можете сказать вообще от этого звукоподражания.

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

- (void)triggerSound:(NSInteger)soundNumber { 
    NSInteger deltaNum = soundNumber*numberOfBuffers; 
    AVAudioPlayer *lowBuffer = [bufferBox objectAtIndex:deltaNum]; 
    Boolean soundFired = FALSE; 
    // Find an unused buffer if possible, otherwise play sound from first buffer. 
    for (int i=0; i<numberOfBuffers; i++) { 
     NSLog(@"Buffer loop: %d", i); 
     NSLog(@"Buffer to load: %d", deltaNum); 
     AVAudioPlayer *tempBuffer = [bufferBox objectAtIndex:deltaNum+i]; 
     if (!tempBuffer.playing) { 
      tempBuffer.currentTime = 0; 
      [tempBuffer play]; 
      soundFired = TRUE; 
      break; 
     } else if (lowBuffer.currentTime>tempBuffer.currentTime) { 
      lowBuffer = tempBuffer; 
     } 
    } 
    if (!soundFired) { 
     lowBuffer.currentTime = 0; 
     [lowBuffer play]; 
     soundFired = TRUE; 
    } 
} 

Этот метод вызывается нажатием кнопки IBAction. ex: [triggerObject triggerSound: 3].

Вся помощь оценивается!

ответ

1

У меня было много лучшего опыта с API OpenAL для некоторых игр. Это очень разные и более низкие уровни (вам приходится иметь дело с источниками и буферами), но для меня это работало намного лучше, чем AVAudioPlayer.

+0

Спасибо, я рассмотрю это вместо этого! Cheers –

+0

* note * OpenAL не поддерживает сжатие AAC или MP3 из коробки. Вам придется вручную распаковывать и передавать их в буферы OpenAL. – Till

1

Вы можете попробовать использовать движок игры iOS для ваших потребностей в аудио.

Например: http://gamua.com/sparrow/

Вы на самом деле не использовать графическую часть этого двигателя. Просто импортируйте и используйте аудио часть фреймворка (который предоставляет простой API поверх OpenAL).

+0

Это на самом деле то, что я закончил делать некоторое время назад; Я пошел с cocosdenshion как мой двигатель, и он отлично работает :) –

Смежные вопросы