明确地说:我试图通过查看该论坛上的其他帖子来找到解决方案,但是没有效果(可能是因为我仍然对C#编程缺乏了解)。
我目前正在开发RTS游戏。就像游戏一样-它们发出声音。
当前,当使用此代码按下按钮时,我可以同时播放声音:
using System.Runtime.InteropServices;
int a = 1;
[DllImport("winmm.dll")]
static extern Int32 mciSendString(string command, StringBuilder buffer, int bufferSize, IntPtr hwndCallback);
private void button4_Click(object sender, EventArgs e)
{
mciSendString(@"open 2.wav type waveaudio alias sound2" + a, null, 0, IntPtr.Zero);
mciSendString(@"play sound2" + a, null, 0, IntPtr.Zero);
// mciSendString("close sound2" + a, null, 0, IntPtr.Zero);
a+=1;
}
它有效,但是仅当别名每次都不同于以前时(这就是为什么我在名称中使用递增数字的原因)。但是..如果要播放游戏过程中的声音,可以说是1万次。.它会“消耗”很多内存吗?
应该更改代码吗?有“更好”的选择吗?我一直在寻找条件代码,以便在播放完成后将其关闭,但是..我还想让声音在声音播放0.2秒后播放(取决于所使用的声音,播放时间为2-10秒)-这样会产生回声。我看到了一些带有Dispose字的代码,但是我不知道如何使用它。
当我写这篇文章时,我想我想出了一个可能的解决方案:
mciSendString("open 1.wav type waveaudio alias sound1" + a, null, 0, IntPtr.Zero);
mciSendString("play sound1" +a, null, 0, IntPtr.Zero);
mciSendString("close sound1" +(a-1), null, 0, IntPtr.Zero);
a+=1;
但是第一次播放的声音会在第二次播放之前停止。
是否有更“专业”的解决方案?或者这还好吗?
希望我能清楚地描述我的问题。