如题,小弟在论坛里看到很多问这个的,可要不就是在绕圈子,要不就是说的云里雾里的,三言两语,说一半不说一半的。
环境: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 个解决方案
#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());
}
我是这样调用的:
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 ....
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;
}
????
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());
}
我是这样调用的:
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 ....
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;
}
????
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
你解决了吗? 答案晾凉啊