Мой вопрос связан с этим вопросом, но наоборот.
Разделите UInt32 (аудиокадр) на два SInt16 (левый и верно)?
В приведенной выше ссылке оператор хотел разделить 32-битный кадр на 2 16-битных образца (левый и правый).
У меня есть 2 16-битных образца, и я хотел бы выразить их как один 32-битный чередующийся кадр.
То, что я пробовал до сих пор, выглядит так.
UInt32* ar = malloc(totalFramesInFile * sizeof (ar));
for (int b=0; b < totalFramesInFile; b++)
{
UInt32 l = soundStructArray[audioFile].audioDataLeft[b];
UInt32 r = soundStructArray[audioFile].audioDataRight[b];
UInt32 t = (UInt32) l + r;
ar[b] = t;
}
soundStructArray[audioFile].audioData = ar;
Это законно и правильно? Я не уверен из-за своей неопытности. Мой аудиовыход звучит немного странно, и я пытаюсь методом исключения определить, что происходит не так.
Было бы полезно, если бы кто-нибудь мог либо подтвердить, что то, что я делаю, - это правильный способ выразить 2 16-битных выборки в виде 32-битного кадра, либо предложить правильный способ.
У меня есть ощущение, что то, что я сделал, неправильно. Я думаю, это потому, что первые 16 бит 32-битного кадра должны быть левыми, а вторые 16 бит — правыми. Все это не должно быть суммой двух..... Я думаю.