Ma question est liée à cette question mais elle est à l'envers.représente 2 échantillons sint16s comme un seul échantillon uint32
Split UInt32 (audio frame) into two SInt16s (left and right)?
Dans la liaison au-dessus du op souhaitée pour diviser une trame de 32 bits en 2 16 échantillons de bit (gauche et droite).
J'ai 2 échantillons de 16 bits et je voudrais les exprimer comme une seule trame entrelacée de 32 bits. Ce que j'ai tenté jusqu'à présent ressemble à ceci.
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;
Est-ce légitime et correct? Je ne suis pas sûr en raison de mon inexpérience. Ma sortie audio sonne un peu particulier et j'essaie par processus d'élimination de déterminer ce qui ne va pas.
Il serait utile que quelqu'un puisse soit confirmer que ce que je fais est la bonne façon d'exprimer 2 échantillons de 16 bits comme une trame de 32 bits ou suggérer une manière correcte. J'ai le sentiment que ce que j'ai fait est faux. Je pense que c'est parce que les 16 premiers bits de la trame 32 bits devraient être à gauche et les 16 bits restants devraient être les bons. Le tout ne devrait pas être la somme des deux ... Je pense.
Peut-être que vos échantillons l et r devraient avoir le type const UInt16? – unwind