一尘不染

单声道到立体声转换

algorithm

我在这里遇到以下问题:我得到了一个代表音频数据的字节块(uint16_t
*),并且生成它们的设备正在捕获单声道声音,因此很明显,我在1通道上具有单声道音频数据。我需要将此数据传递到另一台设备,该设备需要交错的立体声数据(因此为2个通道)。我要做的基本上是复制数据中的1通道,以便立体声数据的两个通道都包含相同的字节。您能指出一个有效的算法吗?

谢谢,f。


阅读 286

收藏
2020-07-28

共1个答案

一尘不染

如果只需要交错的立体声样本,则可以使用如下函数:

void interleave(const uint16_t * in_L,     // mono input buffer (left channel)
                const uint16_t * in_R,     // mono input buffer (right channel)
                uint16_t * out,            // stereo output buffer
                const size_t num_samples)  // number of samples
{
    for (size_t i = 0; i < num_samples; ++i)
    {
        out[i * 2] = in_L[i];
        out[i * 2 + 1] = in_R[i];
    }
}

要从单个单声道缓冲区生成立体声,则只需为in_L和in_R传递相同的指针,例如

interleave(mono_buffer, mono_buffer, stereo_buffer, num_samples);
2020-07-28