C# Windows 窗体中的 WMP 在显示 GIF 后停止播放声音
Posted
技术标签:
【中文标题】C# Windows 窗体中的 WMP 在显示 GIF 后停止播放声音【英文标题】:WMP in C# Windows Form stops playing sound after displaying GIF 【发布时间】:2017-01-11 07:22:12 【问题描述】:我正在制作一个 Windows 窗体应用程序,它应该在播放音乐时播放动画 gif。
我使用了 SoundPlayer,一切正常。然后我发现我无法使用 SoundPlayer 播放多个音频文件,这是一个问题(需要背景音乐和效果)。
所以我稍微研究了一下 DirectSound,但每次我执行与 DirectSound 相关的任何操作(设备、缓冲区...)时,我的应用程序都会冻结。
所以现在我正在尝试 WMP,起初我很高兴,但是当我启用 GIF(透明,以防万一)时,音乐在不到一秒的时间内停止,而你可以看到 GIF 停止一个框架左右,就像它正在加载重物。每次同时播放音频和 GIF 时都会发生这种情况,无论其中一个是否提前开始。当我使用 SoundPlayer 时,我可以一次播放 20 个动画 GIF,而不会影响音频。
总结一下:
SoundPlayer = 只有一个音频文件,不可接受
DirectSound = 由于某种原因冻结(也许值得再试一次?不过我想把这个问题的重点放在 WMP 上,反正我丢失了代码)
WMP = 不能很好地配合动画 GIF,这是必需的。
我尝试播放 .wav 和 .mp3 文件,没有区别。 我之前添加了 wmp.dll 引用。
using System;
using System.Windows.Forms;
using System.Media;
private void button2_Click(object sender, EventArgs e)
var player = new WMPLib.WindowsMediaPlayer();
player.URL = "song.wav";
pictureBox1.Visible = true;
关于 WMP 有什么我应该知道的吗?你能推荐一些其他的方法吗?当处理达到一定的内存使用率时,音频似乎停止了。它稳定在大约 45 MB,但是一旦我播放音频文件,它就会开始增加,并一直播放到大约 48 MB,然后停止并返回到 45 MB。
感谢您抽出宝贵时间并以任何方式帮助我。
编辑:我使用的是分辨率为 500x500 的 GIF 图片,我使用 SizeMode=StretchImage 使其看起来更小(200x200)。在这种情况下,音乐播放了大约 0.2 秒。我将资源图片的大小调整为 100x100,使用 StretchImage 使其再次显示为 200x200,音乐播放大约 8 秒,如果我一次加载两个 GIF,大约 4 秒。更改 .mp3 比特率使其只有 170KB 根本没有帮助。我的意思是我的谷歌浏览器占用了我 3GB 的内存并且仍然可以正常播放多个视频,而我的表单甚至不占用 50MB 并且很挣扎。当然,必须有一种播放 GIF 和歌曲的方法。是否有某种 MemoryAssignLimit 属性?或者当涉及到更大的资源时,WMP 是否会失败?是不是WinForms设置的限制?
【问题讨论】:
【参考方案1】:遵循this 解决方案,它就像魅力一样,到处都是 GIF 和 30 首重叠的歌曲,除非我愿意,否则什么都不会停止。太好了。
【讨论】:
以上是关于C# Windows 窗体中的 WMP 在显示 GIF 后停止播放声音的主要内容,如果未能解决你的问题,请参考以下文章
在 c# 中使用文本框中的数据库值打开特定的 Windows 窗体