Meine Frage bezieht sich auf diese Frage, aber es ist in umgekehrter Reihenfolge.repräsentieren 2 sint16s Proben als eine einzige Uint32 Probe
Split UInt32 (audio frame) into two SInt16s (left and right)?
In der Verbindung über dem op wollte einen 32-Bit-Rahmen in 2 16-Bit-Abtastwerte (links und rechts) spalten.
Ich habe 2 16-Bit-Samples und möchte sie als 32-Bit-Interleaved-Frame ausdrücken.
Was ich bisher versucht habe, sieht so aus.
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;
Ist das legitim und korrekt? Ich bin mir aufgrund meiner Unerfahrenheit nicht sicher. Mein Audio-Ausgang klingt etwas eigenartig und ich versuche durch Eliminierung festzustellen, was schief geht.
Es wäre hilfreich, wenn jemand bestätigen könnte, dass das, was ich mache, der richtige Weg ist, um 2 16-Bit-Samples als 32-Bit-Frame auszudrücken oder einen korrekten Weg vorzuschlagen.
Ich habe das Gefühl, dass das, was ich getan habe, falsch ist. Ich denke dies, weil die ersten 16 Bits des 32-Bit-Rahmens die linke und die zweiten 16 Bits die richtige sein sollten. Das Ganze sollte nicht die Summe der beiden sein ...... denke ich.
Vielleicht sollten Ihre l und r Proben Typ const UInt16 haben? – unwind