簡単に言うと、オーディオ信号出力を int r にしています。つまり、r の値は 32768 ~ - 32768 です。
正規化ルーチンを作成しようとしましたが、何らかの理由で次のコードが半波を生成し、上部のみが表示されます。つまり、0 より上のすべてが負の値ではありません。
ここにあります(difはint、dif_vorherも)
if (r * 8 > 32768)
dif = dif_vorher;
else if (r * 8 < -32768)
dif = dif_vorher;
else
dif = r * 8;
dif_vorher = dif;
次に、raw ファイルに書き込む準備ができています。
if (dif != 0)
{
putc((char) ( (unsigned)dif & 0xff),ausgabe);
putc((char) (((unsigned)dif >> 8) & 0xff),ausgabe);
}
この生ファイルには上限値しかありません。私も試しました
if (r * 8 > 32768)
dif = 32768;
else if (r * 8 < -32768)
dif = -32768;
else
dif = r * 8;
と
if (r * 8 > 32768 || r * 8 < -32768)
dif = -32768;
else
dif = r * 8;
私が使用する場合を除いて、同じ結果
if (r * 8 > 32768)
dif = 32768;
else if (r * 8 < -32768)
dif = -32768;
else
dif = r * 8;
上部も歪んでいます。
なぜ負の部分が省略されているのですか?
編集: r * 8 の最大値は 524272 で、最小値は 0 であることがわかりました。したがって、r_max = 524272/8 = 65534; 65534/2 = 32767 ですので、32768 だけ負の値にならないように値をシフトさせているようです。