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

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);

wavInfo.wformattag = System.BitConverter.ToInt16(bInfo,20);

wavInfo.wchannels = System.BitConverter.ToUInt16(bInfo,22);

wavInfo.dwsamplespersec = System.BitConverter.ToUInt32(bInfo,24);

wavInfo.dwavgbytespersec = System.BitConverter.ToUInt32(bInfo,28);

wavInfo.wblockalign = System.BitConverter.ToUInt16(bInfo,32);

wavInfo.wbitspersample = System.BitConverter.ToUInt16(bInfo,34);

wavInfo.datachunkid = System.Text.Encoding.Default.GetString(bInfo,36,4);

wavInfo.datasize = System.BitConverter.ToInt32(bInfo,40);

System.Console.WriteLine("groupid:"+wavInfo.groupid);

System.Console.WriteLine("filesize:"+wavInfo.filesize);

System.Console.WriteLine("rifftype:"+wavInfo.rifftype);

System.Console.WriteLine("chunkid:"+wavInfo.chunkid);

System.Console.WriteLine("chunksize:"+wavInfo.chunksize);

System.Console.WriteLine("wformattag:"+wavInfo.wformattag);

System.Console.WriteLine("wchannels:"+wavInfo.wchannels);

System.Console.WriteLine("dwsamplespersec:"+wavInfo.dwsamplespersec);

System.Console.WriteLine("dwavgbytespersec:"+wavInfo.dwavgbytespersec);

System.Console.WriteLine("wblockalign:"+wavInfo.wblockalign);

System.Console.WriteLine("wbitspersample:"+wavInfo.wbitspersample);

System.Console.WriteLine("datachunkid:"+wavInfo.datachunkid);

System.Console.WriteLine("datasize:"+wavInfo.datasize);

}

}

}

}

}

时间: 2025-01-25 20:46:42

C#获取WAVE文件文件头信息的相关文章

大神帮帮忙-java中如何获取一个文件的文件头信息

问题描述 java中如何获取一个文件的文件头信息 有没有一个方法获取一个文件的文件头.这个文件是a.exe,求教了! 解决方案 exe使用的是pe格式,参考:http://www.cnblogs.com/lzjsky/archive/2011/09/22/2184942.html 解决方案二: 所谓文件头,没有一个确切的概念,不同的文件类型,文件头的含义不同,长度不同. 如果你希望简单判断下文件类型,那么你只需要读取文件开头几个字节,这不算文件头,一般叫做文件特征. 比如exe,它开头两个字节应

PHP获取音频文件的相关信息

  这篇文章主要介绍了PHP获取音频文件的相关信息的相关资料,非常的实用,有需要的小伙伴可以参考下. 项目需求:现在有一个音频文件上传的功能,在上传后PHP需要获取这个音频文件的相关信息,例如:时长等,由于这个文件是放在买的空间上的,没有像ffmpeg这样的扩展来处理,那么PHP能不能获取到这些信息? 下面是之前在项目中用到的一个用PHP进行音频文件头部信息的读取与写入操作的实现,主要针对 WMA 和 MP3 两种格式,供参考. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 1

c/c++-如何获取一个文件的SVN信息,如 author,node status

问题描述 如何获取一个文件的SVN信息,如 author,node status 解决方案 http://www.lampblog.net/2011/01/svn-proplist%EF%BC%8D%E5%88%97%E5%87%BA%E7%9B%AE%E5%BD%95%E3%80%81%E6%96%87%E4%BB%B6%E6%88%96%E7%89%88%E6%9C%AC%E7%9A%84%E6%89%80%E6%9C%89%E5%B1%9E%E6%80%A7/

PHP获取音频文件的相关信息_php实例

项目需求:现在有一个音频文件上传的功能,在上传后PHP需要获取这个音频文件的相关信息,例如:时长等,由于这个文件是放在买的空间上的,没有像ffmpeg这样的扩展来处理,那么PHP能不能获取到这些信息? 下面是之前在项目中用到的一个用PHP进行音频文件头部信息的读取与写入操作的实现,主要针对 WMA 和 MP3 两种格式,供参考. <?php // AudioExif.class.php // 用PHP进行音频文件头部信息的读取与写入 // 目前只支持 WMA 和 MP3 两种格式, 只支持常用的

编程实战——电影管理器之利用MediaInfo获取高清视频文件的相关信息

随着高速(20M)宽带.HTPC.大容量硬盘(3T)的普及,下载高清片并利用大屏幕观看也成为普通的事情. 随着下载影片的增多,管理就有了问题,有时在茫茫文件夹下找寻一个影片也是一件费时费力的事. 于是萌生了自己编写电影管理器的想法,并逐步逐步在实现.利用博客记录编写的过程,也是和网友之间的交流.期望在交流的过程中,网友能提出一些中肯的意见,使自己少走些弯路.   我在拿到一个高清视频文件时.我希望能有办法获知以下的信息 文件名:视频文件的文件名,这个比较简单,利用FileInfo类就能获得 文件

文字文件文档信息的加密技巧

  一.老方法:让文字藏身于文件中 其实这种方法已经流传很久了,但效果很好,本法适用于藏身的文件种类较多,像EXE可执行文件.MP3音乐文件都行,最经典的是用图片文件(BMP或JPG).它的原理很简单,就是一个加法合成,将需要加密的文字信息(事先保存在一个TXT文本文件中)追加到BMP图片文件的后面.首先在D盘中新建一个1.txt文件,里面的内容是待加密的文本信息:接着将一个图片文件1.bmp也复制到D盘,它是藏身文本信息的"母体";然后执行"开始"→"运

c#通过oledb获取excel文件表结构信息

这个问题来自论坛提问,同理可以获得access等数据库的表结构信息. using System; namespace ConsoleApplication11 ...{ class Program ...{ public static void Main() ...{ getExcelFileInfo(@"c:a.xls"); } private static void getExcelFileInfo(string Path) ...{ string strConn = "

Android中Java根据文件头获取文件类型的方法_Android

本文实例讲述了Android中Java根据文件头获取文件类型的方法.分享给大家供大家参考,具体如下: 前面讲过Android系统内部的MediaFile类来获取文件类型的办法,这个类主要是根据文件的扩展名来判断,其准确性不是很好.具体可查看Android系统使用MediaFile类判断音频文件类型.其实,获取文件类型最好的办法便是根据文件头信息来判断.下面贴出相关代码: public class FileType { public static final HashMap<String, Str

通过16进制文件头判断文件类型

package cn.edu.hactcm.cfcms.utils; import java.io.FileInputStream; import java.io.IOException; import java.util.HashMap; /**  * author : CFMS :Computer files management system  * version :1.0 2013-3-1 下午10:21:32  */ public class CheckFileType {  // 缓