Jan 04
前陣子,在工作上剛好需要對 wav 檔案格式進行判定,可是 NAudio 製作出來的格式用來作判斷又有錯誤,所以土法煉鋼寫了一個小 class:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
public class Wave
{
public struct Format
{
public String FileName = String.Empty;
public Boolean PCM = false;
public uint Channel = 0;
public uint SampleRate = 0;
public uint BitsPerSample = 0;
public uint ByteRate = 0;
public uint BlockAlign = 0;
};
private Format _fmt;
private void fillUp()
{
_fmt.ByteRate = _fmt.Channel * _fmt.SampleRate * _fmt.BitsPerSample / 8;
_fmt.BlockAlign = _fmt.Channel * _fmt.BitsPerSample / 8;
}
public Format getType(String fileName)
{
_fmt.FileName = fileName;
try
{
FileStream fs = File.OpenRead(@fileName);
Byte[] readTmp = new Byte[36];
fs.Read(readTmp, 0, 36);
fs.close();
if (BitConverter.ToUInt16(readTmp, 20) == 1)
{
_fmt.PCM = true;
}
_fmt.Channel = BitConverter.ToUInt16(readTmp, 22);
_fmt.SampleRate = BitConverter.ToUInt32(readTmp, 24);
_fmt.BitsPerSample = BitConverter.ToUInt16(readTmp, 34);
fillUp();
}
catch (Exception e)
{
Console.WriteLine("Wave.getType(fileName) Error : " + e.ToString());
}
return _fmt;
}
}
- 檢查 FileName 是否為空字串,就知道是否成功呼叫 getType() 。
- 檢查 PCM 是否為 true,就知道該檔案是不是 PCM 格式的 wav 檔。
- wav 檔播放的時間會等於 ByteRate。
(Visited 1756 times)





Recent Comments