Как воспроизвести один и тот же звук несколько раз с перекрытием, используя OpenAL или Finch?

Финч использует OpenAL. Однако, когда у меня есть экземпляр Sound, и, скажем, -play, звук воспроизводится. Когда я вызываю -play несколько раз один за другим в быстром темпе, каждый-play останавливает и перезапускает текущее воспроизведение этого звука.

Это не то, что я хочу. Должен ли я создать несколько источников или буферов, чтобы это работало? Или я бы просто создал несколько звуков в одном файле?

1 ответ

Решение

Есть RevolverSound класс именно для этого варианта использования. Это очень просто, он выделяет ряд Sound заранее, а затем воспроизводит их по очереди:

- (void) play
{
    [[sounds objectAtIndex:current] play];
    current = (current + 1) % [sounds count];
}

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

Другие вопросы по тегам