Возможно, вы захотите выполнить преобразование на месте, чтобы сэкономить память. Зависит от того, насколько мал объем памяти у рассматриваемого устройства. Так что вы можете использовать что-то вроде этого вместо подхода Пола Р.
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];
}
}
При получении звуковых данных с монофонического устройства вы выделяете буфер, который в два раза больше необходимого, и передаете его на монофоническое устройство. Это заполнит половину буфера моно аудио. Затем вы передаете этот буфер вышеупомянутой функции, которая преобразует его в стерео. И, наконец, вы передаете буфер на стерео устройство. Вы экономите дополнительное выделение и, таким образом, используете на 33% меньше памяти для преобразования.