在未压缩的情况下,我知道我需要读取wav header ,拉出 channel ,位数和采样率的数量,然后从那里进行计算:
( channel )*(位)*(样本/秒)*(秒)=(文件大小)

有没有更简单的方法-免费的库,或者.net框架中的东西?

如果.wav文件被压缩(例如,使用mpeg编解码器),该怎么办?

最佳答案

您可以考虑使用mciSendString(...)函数(为清楚起见,省略了错误检查):

using System;
using System.Text;
using System.Runtime.InteropServices;

namespace Sound
{
    public static class SoundInfo
    {
        [DllImport("winmm.dll")]
        private static extern uint mciSendString(
            string command,
            StringBuilder returnValue,
            int returnLength,
            IntPtr winHandle);

        public static int GetSoundLength(string fileName)
        {
            StringBuilder lengthBuf = new StringBuilder(32);

            mciSendString(string.Format("open \"{0}\" type waveaudio alias wave", fileName), null, 0, IntPtr.Zero);
            mciSendString("status wave length", lengthBuf, lengthBuf.Capacity, IntPtr.Zero);
            mciSendString("close wave", null, 0, IntPtr.Zero);

            int length = 0;
            int.TryParse(lengthBuf.ToString(), out length);

            return length;
        }
    }
}

关于c# - 如何确定C#中.wav文件的长度(即持续时间)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/82319/

10-09 08:15