0

我有 3 个文件,两个是单声道的,一个是立体声的。我想一起玩。目前我的代码是这样的,但似乎输出不正确。

bool silence = !player1->process(stereoBuffer, false, numberOfSamples, vol);
silence = !(playerLeft->process(stereoBuffer, !silence, numberOfSamples,vol));
silence = !(playerRight->process(stereoBuffer, !silence, numberOfSamples,vol));
if (!silence) {
        SuperpoweredFloatToShortInt(stereoBuffer, output, numberOfSamples);
        return true;
    }

有人知道这里有什么问题吗?我想我应该使用这种方法

void SuperpoweredFloatToShortIntInterleave(float *inputLeft, float *inputRight, short int *output, unsigned int numberOfSamples);

左右有 2 个缓冲区,但是如何将数据添加player1到这 2 个缓冲区中?请帮忙。

4

1 回答 1

1

您需要对 playerLeft 和 playerRight 的静音值进行逻辑或运算,因为它在 player1 之后可能已经为真。

silence |= !playerLeft->process(...
silence |= !playerRight->process(...

您还可以将静音“翻转”为“hasAudio”以便于理解:

bool hasAudio = player1->process(stereoBuffer, false, ...
hasAudio |= playerLeft->process(stereoBuffer, hasAudio, ...
hasAudio |= playerRight->process(stereoBuffer, hasAudio, ...
于 2018-10-25T12:27:22.070 回答