1 月 4 2010
前陣子,在工作上剛好需要對 wav 檔案格式進行判定,可是 NAudio 製作出來的格式用來作判斷又有錯誤,所以土法煉鋼寫了一個小 class:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
class WavInfo
{
    private String _Error;
    public String Error
    {
        get
        {
            return this._Error;
        }
    }
    private Boolean _PCM;
    public Boolean PCM
    {
        get
        {
            return this._PCM;
        }
    }
    private uint _Channel;
    public uint Channel
    {
        get
        {
            return this._Channel;
        }
    }
    private uint _SampleRate;
    public uint SampleRate
    {
        get
        {
            return this._SampleRate;
        }
    }
    private uint _BitsPerSample;
    public uint BitsPerSample
    {
        get
        {
            return this._BitsPerSample;
        }
    }
    private uint _ByteRate;
    public uint ByteRate
    {
        get
        {
            return this._ByteRate;
        }
    }
    private uint _BlockAlign;
    public uint BlockAlign
    {
        get
        {
            return this._BlockAlign;
        }
    }
    public WavInfo(String 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)
            {
                this._PCM = true;
            }
            this._Channel = BitConverter.ToUInt16(ReadTmp, 22);
            this._SampleRate = BitConverter.ToUInt32(ReadTmp, 24);
            this._BitsPerSample = BitConverter.ToUInt16(ReadTmp, 34);
            this._ByteRate = this._Channel * this._SampleRate * this._BitsPerSample / 8;
            this._BlockAlign = this._Channel * this._BitsPerSample / 8;
            this._Error = String.Empty;
        }
        catch (Exception e)
        {
             this._Error = e.ToString();
        }
    }
}
 - 檢查 Error 是否為空字串,就知道是否成功取得 wav 檔案資訊。
- 檢查 PCM 是否為 true,就知道該檔案是不是 PCM 格式的 wav 檔。
- wav 檔播放的時間會等於 ByteRate。
 By Joe Horn • .NET	  • Tags: .NET, Audio, C#, file, NAudio, PCM, wav
1 月 4 2010
[C#] 取得 wav 檔案格式
前陣子,在工作上剛好需要對 wav 檔案格式進行判定,可是 NAudio 製作出來的格式用來作判斷又有錯誤,所以土法煉鋼寫了一個小 class:
using System; using System.Collections.Generic; using System.Text; using System.IO; class WavInfo { private String _Error; public String Error { get { return this._Error; } } private Boolean _PCM; public Boolean PCM { get { return this._PCM; } } private uint _Channel; public uint Channel { get { return this._Channel; } } private uint _SampleRate; public uint SampleRate { get { return this._SampleRate; } } private uint _BitsPerSample; public uint BitsPerSample { get { return this._BitsPerSample; } } private uint _ByteRate; public uint ByteRate { get { return this._ByteRate; } } private uint _BlockAlign; public uint BlockAlign { get { return this._BlockAlign; } } public WavInfo(String 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) { this._PCM = true; } this._Channel = BitConverter.ToUInt16(ReadTmp, 22); this._SampleRate = BitConverter.ToUInt32(ReadTmp, 24); this._BitsPerSample = BitConverter.ToUInt16(ReadTmp, 34); this._ByteRate = this._Channel * this._SampleRate * this._BitsPerSample / 8; this._BlockAlign = this._Channel * this._BitsPerSample / 8; this._Error = String.Empty; } catch (Exception e) { this._Error = e.ToString(); } } }No related posts.
By Joe Horn • .NET 0 • Tags: .NET, Audio, C#, file, NAudio, PCM, wav