AxWindowsMediaPlayer剪辑有时候不会播放
我有一个简单的单线程窗体.NET 4.5应用程序,用户在听用户说话的话(wav文件),然后选择正确的图片来表示这个词。AxWindowsMediaPlayer剪辑有时候不会播放
的问题是,剪辑有时会(非常少见的 - 的时间约1%completelly随机)不能玩...
用于播放剪辑的方法:
public static void PlayWordAudio(Word word, AxWMPLib.AxWindowsMediaPlayer player)
{
string tempFile = Path.GetTempFileName() + ".wav";
MemoryStream stream = new MemoryStream(word.Audio);
using (Stream fileStream = File.OpenWrite(tempFile))
{
stream.WriteTo(fileStream);
}
player.URL = tempFile;
File.Delete(tempFile);
}
有人可以建议解决这个问题?也许我不应该在方法结尾删除文件?但后来临时文件就会堆积起来......
我在Windows 7上......
看来我解决了这个问题......它实际上是导致此文件的删除...
解决方案:
public static void PlayWordAudio(Word word, AxWMPLib.AxWindowsMediaPlayer player)
{
string tempFile = Path.GetTempFileName() + ".wav";
MemoryStream stream = new MemoryStream(word.Audio);
using (Stream fileStream = File.OpenWrite(tempFile))
{
stream.WriteTo(fileStream);
}
player.URL = tempFile;
RunDelayed(5000, File.Delete, tempFile); //if we delete file immediately then clip sometimes would not be played
}
public delegate void DelayedFuncion(string param);
public static void RunDelayed(int delay, DelayedFuncion function, string param = null)
{
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
DelayedArgs args = new DelayedArgs() { delayedFunction = function, param = param };
timer.Tag = args;
timer.Tick += TimerElapsed;
timer.Interval = delay;
timer.Start();
}
private static void TimerElapsed(object sender, EventArgs e)
{
System.Windows.Forms.Timer timer = sender as System.Windows.Forms.Timer;
timer.Stop();
DelayedArgs args = timer.Tag as DelayedArgs;
args.delayedFunction(args.param);
}
class DelayedArgs
{
public Util.DelayedFuncion delayedFunction;
public string param;
}
我猜的文件被删除的速度比它可以得到发挥。
你能在File.Delete(tempFile);
代替尝试这种利用PlayStateChange事件
player.PlayStateChange += (snd, psce) => {
switch (psce.newState)
{
case 1: // Stopped (maybe use 12 => Last)
File.Delete(tempFile);
break;
default:
Debug.WriteLine(psce.newState);
break;
}
};
你可能有,如果你保持玩家对象周围很长一段时间退订事件。
我试过你的解决方案,但我得到了:访问路径'C:\\ Users \\ David \\ AppData \\ Local \\ Temp \\ tmp5F17.tmp.wav'被拒绝。在File.Delete行...不知道为什么..也许该文件仍然播放,因此不释放。如果我使用12而不是1,这些文件不会被删除......我的解决方案如下,我只是用它。 Thanx无论如何 - 我没有想到这种可能性 - 也许有可能使它工作.. – davidhq 2013-03-19 16:32:13
你必须张贴一些代码你正在使用,以便我们帮助你。 – fmendez 2013-03-18 15:29:42