Mono to Stereo conversion

后端 未结 5 1631
日久生厌
日久生厌 2021-01-02 20:25

I have the following issue here: I get a block of bytes (uint16_t*) representing audio data, and the device generating them is capturing mono sound, so obviously I have mono

5条回答
  •  情话喂你
    2021-01-02 20:57

    You might want to do the conversion in-place to save some memory. Depends on how small an amount of memory the device in question has. So you might want to use something like this instead of Paul R's approach:

    void interleave(uint16_t buf[], const int len)
    {
        for (int i = len / 2 - 1, j = len - 1; i > 0; --i) {
            buf[j--] = buf[i];
            buf[j--] = buf[i];
        }
    }
    

    When getting the sound data from the mono device, you allocate a buffer that's twice as big as needed and pass that to the mono device. This will fill half the buffer with mono audio. You then pass that buffer to the above function, which converts it to stereo. And finally you pass the buffer to the stereo device. You save an extra allocation and thus use 33% less memory for the conversion.

提交回复
热议问题