c# 打开WAV 文件 (.wav) 原始数据
时间: 2024-09-07 10:01:28 浏览: 60
在C#中打开WAV文件并读取其原始数据,可以通过以下步骤实现:
1. 创建一个能够读取文件的`FileStream`对象。
2. 使用`BinaryReader`来读取文件的内容。
3. 解析WAV文件的头部信息,确定数据块的位置和大小。
4. 根据头部信息读取音频数据。
WAV文件是一种标准的音频文件格式,它的头部信息包含了关于文件的元数据,比如采样率、声道数、位深度等。这些信息通常存储在一个称为“块”(chunk)的结构中,典型的块包括"fmt"(格式块)和"data"(数据块)。"fmt"块包含了音频数据的格式信息,而"data"块则包含了实际的音频样本数据。
下面是一个简单的示例代码,用于读取WAV文件的头部信息和音频数据:
```csharp
using System;
using System.IO;
using System.Text;
public class WaveFileReader
{
public void ReadWaveFile(string filePath)
{
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
using (BinaryReader br = new BinaryReader(fs))
{
// 读取RIFF头部
string riffHeader = new string(br.ReadChars(4));
if (riffHeader != "RIFF") throw new Exception("不是有效的WAV文件");
// 读取文件大小
int fileSize = br.ReadInt32();
// 跳过"Wave"
br.ReadChars(4);
// 读取"fmt "块
string fmtHeader = new string(br.ReadChars(4));
if (fmtHeader != "fmt ") throw new Exception("不是有效的WAV文件");
int fmtLength = br.ReadInt32();
int audioFormat = br.ReadInt16();
int channels = br.ReadInt16();
int sampleRate = br.ReadInt32();
int byteRate = br.ReadInt32();
int blockAlign = br.ReadInt16();
int bitsPerSample = br.ReadInt16();
// 读取"data"块
string dataHeader = new string(br.ReadChars(4));
if (dataHeader != "data") throw new Exception("不是有效的WAV文件");
int dataSize = br.ReadInt32();
// 这里可以读取dataSize长度的音频样本数据
// byte[] audioData = br.ReadBytes(dataSize);
Console.WriteLine("声道数: " + channels);
Console.WriteLine("采样率: " + sampleRate);
Console.WriteLine("位深度: " + bitsPerSample);
Console.WriteLine("音频数据大小: " + dataSize);
}
}
}
}
```
在这个例子中,我们首先检查了文件是否为有效的WAV格式,然后读取了"fmt"和"data"块的信息。一旦读取了这些信息,你就可以进一步处理音频数据,比如解码为音频信号或者进行声音的播放。
阅读全文