0

「2つのwavファイルの混合」に関連するすべての質問と回答を調べている間、ほとんどの回答が提案されました-各wavファイルからバイトをショートに変換し、ショートの平均を取得し、出力バイト配列に書き込みます。また、私の場合、マルチチャンネルの非圧縮 PCM wav ファイル (2 チャンネル 16 ビットおよび毎秒 44100 サンプル) では、各チャンネルのデータがインターレース形式で保存されるため、データ チャンクでは最初のバイトがチャンネル用になることも読みました。 1、2 番目はチャンネル 2、3 番目はチャンネル 1、4 番目は ch2 などです。最速の変換を得るには、オプションとして Buffer.BlockCopy または Array.ConvertAll を使用することをお勧めします。

これは実際にデータを歪めませんか? 最初の短い値は、実際にはバイト ch1 + バイト ch2 になります。また、他のファイルについても、追加が完了すると、平均化のために、基本的にチャネル 2 バイトからのオーバーフローを強制的にチャネル 1 バイトに移動させ、両方のチャネルのデータを歪めます。

上記のオプションを試してみたところ、結合したい 2 つのファイルが重なっている部分で信号に顕著な歪みが生じます。

チャネルデータを別々に保つ別の方法は、最初にバイトデータを2で割ってから、追加して出力に書き込むことだと思います。今すぐこれを試して投稿します。

4

0 に答える 0