日期:2013-05-17  浏览次数:20481 次

C#获取WAVE文件文件头信息



前些日子在论坛里问了,没人回答,今天有空自己写了一下

文件格式依据网站

http://www.moon-soft.com/program/FORMAT/



using System;

using System.IO;

using System.Text;



namespace WAV

{

/// <summary>

/// Summary description for Wav.

/// </summary>

public class Wav

{

public Wav()

{

//

// TODO: Add constructor logic here

//

}



[STAThread]

static void Main(string[] args)

{

//

// TODO: Add code to start application here

//

string strpath=@"C:\Documents and Settings\Administrator\桌面\trojan\怀念战友.wav";//=@"F:\Music";

if(args.Length>0)

{

strpath=args[0].Trim();

}

if(File.Exists(strpath))

{

GetWavInfo(strpath);

Console.WriteLine("GetWavInfo Successfully!");

//Console.WriteLine("");

}

else

{

Console.Write("Please Enter the write filepath!\n");

Console.Write("用法: WAV [Full Path Of Your WAV filepath]");

}

}



public struct WavInfo

{

public string groupid;

public string rifftype;

public long filesize;

public string chunkid;

public long chunksize;



public short wformattag; //记录着此声音的格式代号,例如WAVE_FORMAT_PCM,WAVE_F0RAM_ADPCM等等。

public ushort wchannels; //记录声音的频道数。

public ulong dwsamplespersec;//记录每秒取样数。

public ulong dwavgbytespersec;//记录每秒的数据量。

public ushort wblockalign;//记录区块的对齐单位。

public ushort wbitspersample;//记录每个取样所需的位元数。



public string datachunkid;

public long datasize;



}



public static void GetWavInfo(string strpath)

{

WavInfo wavInfo = new WavInfo();

FileInfo fi = new FileInfo(strpath);

System.IO.FileStream fs=fi.OpenRead();

if(fs.Length>=44)

{

byte[] bInfo=new byte[44];

fs.Read(bInfo,0,44);



System.Text.Encoding.Default.GetString(bInfo,0,4);

if(System.Text.Encoding.Default.GetString(bInfo,0,4)=="RIFF"&&System.Text.Encoding.Default.GetString(bInfo,8,4)=="WAVE"&&System.Text.Encoding.Default.GetString(bInfo,12,4)=="fmt ")

{

wavInfo.groupid = System.Text.Encoding.Default.GetString(bInfo,0,4);

System.BitConverter.ToInt32(bInfo,4);

wavInfo.filesize = System.BitConverter.ToInt32(bInfo,4);



//wavInfo.filesize = Convert.ToInt64(System.Text.Encoding.Default.GetString(bInfo,4,4));

wavInfo.rifftype = System.Text.Encoding.Default.GetString(bInfo,8,4);

wavInfo.chunkid = System.Text.Encoding.Default.GetString(bInfo,12,4);

wavInfo.chunksize = System.BitConverter.ToInt32(bInfo,16);