单声道到立体声转换

Fer*_*eak 6 c algorithm audio

我在这里有以下问题:我得到一个表示音频数据的字节块(uint16_t*),生成它们的设备正在捕获单声道声音,所以很明显我在1声道上有单声道音频数据.我需要将这些数据传递给另一个设备,这是期望交错的立体声数据(因此,2个通道).我想要做的是基本上复制数据中的1个通道,以便立体声数据的两个通道都包含相同的字节.你能指点我这样做的有效算法吗?

谢谢,f.

Pau*_*l R 13

如果你只想要交错的立体声样本,那么你可以使用这样的函数:

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];
    }
}
Run Code Online (Sandbox Code Playgroud)

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

interleave(mono_buffer, mono_buffer, stereo_buffer, num_samples);
Run Code Online (Sandbox Code Playgroud)