要通过代码生成 .wav 音频文件,您可以:

1. 创建 AudioFormat 对象以指定音频格式:

AudioFormat format = new AudioFormat(22050, 16, 1); 

// 采样率 22050,位深度 16 位,单声道

2. 创建 WaveFormat 和 WaveStream 对象:

WaveFormat waveFormat = WaveFormat.CreateIeeeFloatWaveFormat(format);
FileStream outputStream = File.Create("test.wav");
WaveStream waveStream = new WaveStream(waveFormat, outputStream);

3. 打开 WaveStream 并开始写入样本:

waveStream.Open();

// 写入音频样本...
waveStream.Write(leftSample, 0, leftSample.Length);  
waveStream.Write(rightSample, 0, rightSample.Length);

waveStream.Close();  
outputStream.Close(); 
leftSample 和 rightSample 是包含音频采样值的 byte 数组。

4. (可选)添加 RIFF 头以产生标准 .wav 文件:

BinaryWriter writer = new BinaryWriter(outputStream);
writer.Write(Encoding.UTF8.GetBytes("RIFF"));
writer.Write((uint)outputStream.Length - 8); 
writer.Write(Encoding.UTF8.GetBytes("WAVE"));

//…

写入 RIFF 头要在打开 WaveStream 之前。

一个完整的示例:

byte[] leftSample = {1, 2, 3, 4};
byte[] rightSample = {5, 6, 7, 8};

AudioFormat format = new AudioFormat(22050, 16, 1);
WaveFormat waveFormat = WaveFormat.CreateIeeeFloatWaveFormat(format); 

using (FileStream outputStream = File.Create("test.wav")) {
    using (BinaryWriter writer = new BinaryWriter(outputStream)) {
        writer.Write(Encoding.UTF8.GetBytes("RIFF"));
        writer.Write((uint)outputStream.Length - 8);  
        writer.Write(Encoding.UTF8.GetBytes("WAVE"));
    }

    using (WaveStream waveStream = new WaveStream(waveFormat, outputStream)) {
        waveStream.Open();
        waveStream.Write(leftSample, 0, leftSample.Length);
        waveStream.Write(rightSample, 0, rightSample.Length);
        waveStream.Close(); 
    }  
} 

这将生成一个包含一段简单音频的 test.wav 文件。
希望这个示例能帮助您了解如何通过 C# 代码生成 .wav 格式的音频文件。如果您有任何其他问题,欢迎在这里与我讨论。我会尽量提供详细的解释和示例来帮助您实现自定义的音频生成需求。 (已编辑)

文档更新时间: 2023-05-30 21:37   作者:admin