1

複数の WAV ファイルを結合する必要がある音楽プロジェクトに取り組んでいます。My Code は正常に動作しますが、結合された 2 つの WAV ファイル間でカチッという音がはっきりと聞こえます。それは大きな問題です。

私はオーディオエンジニアです。たとえば、DAW (デジタル オーディオ ワークステーション) で連続したサンプルを使用する場合、2 つの WAV サンプル間のこのクリック ノイズを防ぎたい場合は、クロスオーバー フェードを作成する必要があります (基本的に、これは最初のサンプルのフェードアウトとフェードインです)。次のサンプルで)。

したがって、私の質問は、2 つの WAV ファイルを連結しながら、このようなクロスオーバー フェードを作成できるかどうかです。連結されたウェーブ ファイル間のクリック ノイズを取り除く必要があります。

WAV ファイルを連結する方法を以下に C# コードを示します。これは、同じ「形式」の WAV ファイルで機能します。このコードを見つけました ( 2 つ以上の .WAV ファイルをプログラムで結合する方法は? )。さらに、このFadeIn/FadeOut の可能性を見つけましたが、これをコードに適用する方法がわかりません。さらに、これがクリックノイズを防ぐかどうかはわかりません。

アドバイスと解決策ありがとうございます。うまくいけば、Mark Heath がこれを読んでくれます :)。

よろしく、アレックス

ウェーブファイル形式:

1 秒あたりの平均バイト数: 264600 | サンプルあたりのビット数: 24 | ブロック整列: 6 | チャンネル: 2 | エンコーディング: PCM | 特大サイズ: 0 | サンプルレート: 44100 |

    public static void Concatenate(string outputFile, IEnumerable<string> sourceFiles)
{
    byte[] buffer = new byte[6]; //1024 was the original. but my wave file format has the blockAlign 6. So 1024 was not working for me. 6 does.
    WaveFileWriter waveFileWriter = null;

    try
    {
        foreach (string sourceFile in sourceFiles)
        {
            using (WaveFileReader reader = new WaveFileReader(sourceFile))
            {
                if (waveFileWriter == null)
                {
                    // first time in create new Writer
                    waveFileWriter = new WaveFileWriter(outputFile, reader.WaveFormat);
                }
                else
                {
                    if (!reader.WaveFormat.Equals(waveFileWriter.WaveFormat))
                    {
                        throw new InvalidOperationException("Can't concatenate WAV Files that don't share the same format");
                    }
                }

                int read;
                while ((read = reader.Read(buffer, 0, buffer.Length)) > 0)
                {
                    waveFileWriter.WriteData(buffer, 0, read);
                }
            }
        }
    }
    finally
    {
        if (waveFileWriter != null)
        {
            waveFileWriter.Dispose();
        }
    }
}
4

1 に答える 1