110,566
社区成员
发帖
与我相关
我的任务
分享
static void FindAndPlayOneSound(string fileName, double volume = 1,int speedRatio = 1)
{
App.Current.Dispatcher.Invoke((Action)(() =>
{
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.Volume = volume;
mediaPlayer.SpeedRatio = speedRatio;
mediaPlayer.Open(new Uri(fileName));
mediaPlayer.MediaOpened += (sender, e) =>
{
mediaPlayer.Play();
};
mediaPlayer.MediaEnded += (sender, e) =>
{
mediaPlayer.Close();
mediaPlayerList.Remove(mediaPlayer);
mediaPlayer = null;
GC.Collect(0);
};
mediaPlayer.MediaFailed += (sender, e) =>
{
mediaPlayer.Close();
mediaPlayerList.Remove(mediaPlayer);
mediaPlayer = null;
GC.Collect(0);
};
//if (mediaPlayerList.Count>30)
//{
// for(int i=0;i<20&&i<mediaPlayerList.Count;)
// {
// mediaPlayerList[0].Stop();
// mediaPlayerList[0].Close();
// mediaPlayerList[0] = null;
// mediaPlayerList.RemoveAt(0);
// }
//}
mediaPlayerList.Add(mediaPlayer);
}));
}
static public void Speak(string say, double volume = 1, int speedRatio = 1)
{
FindAndPlayOneSound(AppDomain.CurrentDomain.BaseDirectory + string.Format("SoundFile\\{0}\\{1}.wav", CurrentVoice, say), volume, speedRatio);
}
ThreadPool.QueueUserWorkItem(obj =>
{
while (true)
{
Thread.Sleep(100);
Functions.PlayScanSound(volume: 0.5);
Functions.Speak("36");
}
});
mediaPlayerList.Add(mediaPlayer);
if (mediaPlayerList.Count > 30)
{
while (mediaPlayerList.Count>20)
{
mediaPlayerList[0].Stop();
mediaPlayerList[0].Close();
mediaPlayerList[0] = null;
mediaPlayerList.RemoveAt(0);
}
}
看了下,重复播放一个文件下,是固定残留8个,
wav文件很短,就是报36的一个语音合成的wav