4

いくつかの連結された小さなWAVファイルで構成されたRAWオーディオファイルがあります。このファイルをSoundForgeで48,000、8ビットPCM、署名付き、モノラルとして開いて再生できます。

私がC#でやりたいのは、ファイル内の個々のWAVを、同じかそれより短い長さの新しいデータでプログラムで上書きすることです。これは、ほぼ可能に近いと思います。RAWファイルでFile.ReadAllBytesを実行し、バイト配列をループして、各WAVの開始位置と終了位置を決定できます。次に、PCで新しいWAVファイルを選択し、ヘッダーを削除して、残りのデータをRAWファイルに書き込みます。新しいWAVが宛先よりも小さい場合は、差を0で埋めます。

ただし、上記の設定でSound Forgeで新しいファイルを開くと、すべてのWAVが通常の「クリスマスツリー」の形よりも固いブロックのように見え、すべてが大きく歪んで再生されます。これを初めて体験した後、私の新しいソースWAVはすべて41,000、16ビットPCM、署名付き、ステレオ形式であることに気づきました。新しく作成したRAWファイルをこの形式で開いたところ、見た目も再生も問題ありません。

最初に、すべての新しいWAVを48,000、8ビットPCM、署名付き、モノラルに変換する必要があると考えました。次に、アプリケーションを実行して、それらをRAWファイルにコピーします。データをRAWファイルにコピーする前に、NAudioを使用してファイルの変換を行うコードを作成しましたが、それでも同じ問題が残ります。また、最初にSound Forgeで新しいWAVを手動で変換しようとしましたが、それでも同じ問題が発生します。

ここで何が欠けていますか?ありがとう。

4

1 に答える 1

1

このコードは、あなたが説明したことを行います(パディングなし)。mainFile を開き、指定された位置に別のファイルを挿入します。両方のファイルの形式が同じであれば、問題なく動作します。

public void InsertWave(string mainFile, string insertFile, long position)
{
    byte[] data = File.ReadAllBytes(insertFile);

    using (FileStream main = File.OpenWrite(mainFile))
    {
        main.Seek(position, SeekOrigin.Begin);
        main.Write(data, 0, data.Length);
        main.Close();
    }
}

両方のファイルが 48,000 Hz、8 ビット PCM、符号付き、モノラルである場合、何も問題はありません。ただし、一方のファイルがモノラルでもう一方がステレオの場合、または一方が 8 ビットで他方が 16 ビットの場合、出力は歪んでしまいます。

ファイルが実際に使用している形式は問題ではありません。両方のフォーマットが同じで、位置がサンプル サイズの倍数である限り、常に有効なウェーブ ファイルになります。

したがって、出力が歪んでいる場合は、ファイルの形式が異なる可能性が非常に高くなります。ステレオをモノラルに変換する場合は、両方のチャンネルをミックスすることはできないことにも注意する必要があります。同じ音量を維持するには、レベルを 6dB 下げる必要があります。

于 2012-07-29T22:46:02.520 に答える