Вопрос, связанный с этим вопросом, но он обратный.представляют 2 образца sint16s в качестве одного образца uint32
Split UInt32 (audio frame) into two SInt16s (left and right)?
В ссылке выше оп хотел разделить 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 бит должны быть правыми. Все это не должно быть суммой двух ... я думаю.
Возможно, ваши образцы l и r должны иметь тип const UInt16? – unwind 2010-11-26 08:57:31