首页 > 解决方案 > 如何使用 Superpowered 库播放多种声音

问题描述

我的目标是能够使用 Superpowered API 播放多种声音(为了制作鼓组),因为我需要非常低的延迟。

我在 .mm 文件中找不到整体架构。

现在,我的 .mm 文件中有:

但我找不到如何实现 .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 吗?

标签: iosaudiosuperpowered

解决方案


你所有的玩家都在“玩”到“self->stereoBuffer”。检查播放器的 process 方法的 bufferAdd 参数。如果至少有一个玩家确实将自己输出到缓冲区中,则您需要将输出“添加”到缓冲区的内容中。


推荐阅读