ios - 如何使用 Superpowered 库播放多种声音
问题描述
我的目标是能够使用 Superpowered API 播放多种声音(为了制作鼓组),因为我需要非常低的延迟。
我在 .mm 文件中找不到整体架构。
现在,我的 .mm 文件中有:
- 1 个超级强大的 IOSAudioIO* 输出
- 10 SuperpoweredAdvancedAudioPlayer* (players[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 吗?
解决方案
你所有的玩家都在“玩”到“self->stereoBuffer”。检查播放器的 process 方法的 bufferAdd 参数。如果至少有一个玩家确实将自己输出到缓冲区中,则您需要将输出“添加”到缓冲区的内容中。
推荐阅读
- laravel-backpack - 如何将数据放入查看列表页面?
- c++ - 加载共享库时出错:无法在外部硬件上打开共享对象文件 ::
- ansible - 向 GlusterFS 添加新的 OpenShift 节点
- python - 扑克游戏用不同的牌交换牌
- machine-learning - 没有矩阵转置的向量化梯度下降
- javascript - 如何使用 scrollTop 在导航点击时进行滚动
- python - 使用不带 SQLAlchemy 的 psycopg2 将 Pandas 数据框转换为 PostgreSQL 表?
- python - Python - ValueError:('只能比较标记相同的系列对象','发生在索引 Alkaline_Phosphotase')
- plugins - Notepad++ 比较插件 - 忽略评论?
- python - 在不使用 requirements.txt 的情况下将 python 项目移动到另一台 PC