Ударное приложение - Laggy Sounds ... Как исправить? - PullRequest
0 голосов
/ 13 сентября 2010

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

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

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

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

Вот звуковой код, у меня есть предварительно загруженный массив 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. например: [drumObject triggerSound: 3].

Вся помощь приветствуется!

Ответы [ 2 ]

1 голос
/ 01 мая 2013

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

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

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

1 голос
/ 13 сентября 2010

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

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