在我的应用程序中,通常应该有2个重叠的声音(一首歌和一些短音)。它工作正常,直到歌曲突然停止播放。你知道我怎么解决这个问题吗? 以下是我用于添加歌曲和声音的功能:
private void musical()
{
var p1 = new System.Windows.Media.MediaPlayer();
p1.Open(new System.Uri(@"J:\penalty\penalty\penalty\bin\Debug\Avicii - The Nights (Lyrics HD).wav"));
p1.Play();
}
private void happy()
{
System.Threading.Thread.Sleep(500);
var p2 = new System.Windows.Media.MediaPlayer();
p2.Open(new System.Uri(@"J:\penalty\penalty\penalty\bin\Debug\happy.wav"));
p2.Play();
}
private void sad()
{
System.Threading.Thread.Sleep(500);
var p2 = new System.Windows.Media.MediaPlayer();
p2.Open(new System.Uri(@"J:\penalty\penalty\penalty\bin\Debug\sad.wav"));
p2.Play();
}
答案 0 :(得分:0)
如果您不将b'1b24'+struct.pack('!B', 0)+struct.pack('!B', 0)
s的引用存储为字段,但仅在本地变量中存储,则可能会收集到gargabe。这可能会延迟,因为MediaPlayer
使用的非托管资源在被释放之前需要MediaPlayer
。要解决您的问题,请考虑在字段中存储对Dispose
的引用。
MediaPlayer
然后调整您的方法以使用该字段。
private System.Windows.Media.MediaPlayer _music;
private System.Windows.Media.MediaPlayer _happy;
private System.Windows.Media.MediaPlayer _sad;
如果您想重复音频(效果不佳),您可以订阅private void musical()
{
_music = new System.Windows.Media.MediaPlayer();
_music.Open(new System.Uri(@"J:\penalty\penalty\penalty\bin\Debug\Avicii - The Nights (Lyrics HD).wav"));
_music.Play();
}
事件,以便将位置设置回到开头并重新开始播放。