Как воспроизвести несколько звуков с помощью библиотеки Superpowered

Моя цель - иметь возможность воспроизводить несколько звуков (для создания ударной установки), используя Superpowered API, поскольку мне нужна очень низкая задержка.

Я не могу найти общую архитектуру в файле .mm.

На данный момент у меня есть в моем .mm файле:

  • 1 выход SuperpowerIOSAudioIO*
  • 10 SuperpoweredAdvancedAudioPlayer* (игроков[10]), так как у меня 10 барабанов

Но я не могу найти, как реализовать остальную часть файла .mm, в частности цикл audioProcessing.

У меня есть это в настоящее время:

static bool audioProcessing(Superpowered *clientdata, float **buffers, unsigned int inputChannels, unsigned int outputChannels, unsigned int numberOfSamples, unsigned int samplerate, uint64_t hostTime) {
    Superpowered *self = clientdata;

    bool overallSilence = true;
    for(int i = 0; i < 10; i++) {
        SuperpoweredAdvancedAudioPlayer *player = self->players[i];
        bool silence = !player->process(self->stereoBuffer, false, numberOfSamples);
        if (silence == false) {
            overallSilence = false;
        }
    }

    if (!overallSilence) SuperpoweredDeInterleave(self->stereoBuffer, buffers[0], buffers[1], numberOfSamples); // The stereoBuffer is ready now, let's put the finished audio into the requested buffers.

    return !overallSilence;
}

и когда я хочу воспроизвести звук:

- (void)playWithPlayerAtIndex:(int) index {
    SuperpoweredAdvancedAudioPlayer* player = players[index];
    player->seek(0);

    player->play(false);
}

Но с этим я могу воспроизводить только один звук за раз.

Кто-нибудь знает Superpowered API?


person user3620372    schedule 22.05.2018    source источник


Ответы (1)


Все ваши плееры "играют" в "self->stereoBuffer". Проверьте параметр bufferAdd метода процесса проигрывателя. Нужно "добавлять" вывод к содержимому буфера, если хоть один игрок вывел себя в него.

person Gabor Szanto    schedule 23.05.2018