私の質問はこの質問に関連していますが、逆です。 OPはリンクは、2つのsint16sサンプルを1つのuint32サンプルとして表します。
Split UInt32 (audio frame) into two SInt16s (left and right)?
2つの16ビットサンプル(左および右)に32ビットのフレームを分割したかったです。
私は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ビットフレームとして表現したり、正しい方法を示唆したりする正しい方法であるかどうかを確認すると役に立ちます。
私がしたことが間違っていると感じています。 32ビットフレームの最初の16ビットは左にし、2番目の16ビットは右にする必要があるため、これを考えると思います。全体は2つの合計ではありません......私は思う。
あなたのlとrのサンプルには、const UInt16タイプが必要ですか? – unwind