c# winform 获取已存在的.wav文件的时间长度

时间:2020-12-04 19:43:42
  
  如题,小弟在论坛里看到很多问这个的,可要不就是在绕圈子,要不就是说的云里雾里的,三言两语,说一半不说一半的。

  环境:VS2008 + .Net Framework 3.5 ,C# winform 应用程序

  我想要的是最直接的:
  1、不要什么用mediaplayer控件之类的,我用的是SoundPlayer sp = new SoundPlayer()这种方法播放。
  2、不要用TimeSpan存放在播放前和播放后取的时间差,因为我的语音文件是可以剪辑的,时间长度随时会变,而且时间长度要写入数据库的,不能够在播放了以后才取得时间长度。

  Wave文件是微软自己的格式,应该会有api可以操作的吧,可我对Win32的API了解尚浅,时间紧迫,来这里问问对API熟悉又经验的前辈们,帮帮小弟。

  不过话说回来,如果.net 3.5的类库里有就最好了,可我也不知道。请前辈们帮下小弟,尽量给简单、直接的实现的方法,如果要掉api请给出个例子,不要三言两语,小弟在此先谢过各位大大了。

8 个解决方案

#1


#2


这位大哥,你给我的代码我看了看,也试过了一下,我在LoadWave()里试图返回m_Second,可调用时候返回了异常,m_WaveData.Read(_Temp4, 0, 4)。运行到这一行的时候提示说“无法访问已经关闭的文件”,请问该如何处理,或者大哥您把代码整合一下,给个直接返回时间的函数我吧.

我是这样调用的:

private void button1_Click(object sender, EventArgs e)
        {
            WaveInfo wav = new WaveInfo(@"D:\server\Record\20090618\admin-188800001663-陈兆-20090618-1702.wav");
            MessageBox.Show(wav.LoadWave().ToString());
        }  

#3


WaveInfo wav = new WaveInfo(@"D:\server\Record\20090618\admin-188800001663-陈兆-20090618-1702.wav"); 
MessageBox.Show(wav.Second.ToString()); 什么时候LoadWave()成public ....

#4


是我改成public的。。。。

大哥,能在你的类的基础上帮我写个直接获取时间长度的方法吗,谢谢

#5


WaveInfo wav = new WaveInfo(@"D:\server\Record\20090618\admin-188800001663-陈兆-20090618-1702.wav"); 
MessageBox.Show(wav.Second.ToString()); 

你想要

  public static double GetWavFileTime(string p_File)
        {
            WaveInfo _WaveFileInfo = new WaveInfo(p_File);
            return _WaveFileInfo.Second;
        }
????

#6


恩,只要能获取所指定的wav文件的时间长度就可以了,谢谢

#7


我也正好遇到这个问题学习下

#8


你解决了吗? 答案晾凉啊

#1


#2


这位大哥,你给我的代码我看了看,也试过了一下,我在LoadWave()里试图返回m_Second,可调用时候返回了异常,m_WaveData.Read(_Temp4, 0, 4)。运行到这一行的时候提示说“无法访问已经关闭的文件”,请问该如何处理,或者大哥您把代码整合一下,给个直接返回时间的函数我吧.

我是这样调用的:

private void button1_Click(object sender, EventArgs e)
        {
            WaveInfo wav = new WaveInfo(@"D:\server\Record\20090618\admin-188800001663-陈兆-20090618-1702.wav");
            MessageBox.Show(wav.LoadWave().ToString());
        }  

#3


WaveInfo wav = new WaveInfo(@"D:\server\Record\20090618\admin-188800001663-陈兆-20090618-1702.wav"); 
MessageBox.Show(wav.Second.ToString()); 什么时候LoadWave()成public ....

#4


是我改成public的。。。。

大哥,能在你的类的基础上帮我写个直接获取时间长度的方法吗,谢谢

#5


WaveInfo wav = new WaveInfo(@"D:\server\Record\20090618\admin-188800001663-陈兆-20090618-1702.wav"); 
MessageBox.Show(wav.Second.ToString()); 

你想要

  public static double GetWavFileTime(string p_File)
        {
            WaveInfo _WaveFileInfo = new WaveInfo(p_File);
            return _WaveFileInfo.Second;
        }
????

#6


恩,只要能获取所指定的wav文件的时间长度就可以了,谢谢

#7


我也正好遇到这个问题学习下

#8


你解决了吗? 答案晾凉啊