基本的なサウンド編集プログラムをJavaで作成しようとしていますが、16ビットのWAVEファイル形式で大きな問題が発生しています。
サウンドファイルにあると思われるサンプルの数をJavaに尋ねたところ、予想の2倍の数が得られました。Javaに80000バイトのサンプルの正弦波を生成するように指示すると、2秒ではなく1秒間再生されました(サンプルレートは1秒あたり約40000でしたが)。
さらに検索したところ、ファイルの「フレームサイズ」が2であり、「サンプル」が実際には1バイトではなく2バイトであり、これが16ビットオーディオファイルと呼ばれていることがわかりました。実験として、サウンドファイルをバイトの配列に書き込み、1バイトおきに0に設定して、結果を再生しました。奇数のサンプルだけを保持した場合、サウンドファイルはわずかな静的ノイズで再生されました。偶数のみを保持すると、その静的ノイズはサウンドファイルなしで自然に再生されました。これにより、偶数バイトには、実際に再生されるサウンドが含まれている奇数バイトの静的バイトの正確な逆が含まれていると思います。一緒に再生すると、偶数バイトは奇数バイトのスタティックを無音にし、サウンドの忠実度を高めます。
このWebサイトには、16ビットサウンドエンコーディングの基本についてのかなり良い説明があります。ただし、先に進んでファイルの編集を1バイトずつ開始するだけでは十分ではありません。より高い忠実度を維持しながら、16ビット(またはそれ以上)のサウンドファイルをバイト単位で編集するにはどうすればよいですか?サンプルあたり8ビットではなく16ビットでサウンドをエンコードするための式は何ですか?