在Visual Studio(c#)中使用mciSendString同时播放多种声音

时间:2019-04-11 21:38:32

标签: c# visual-studio audio mcisendstring

明确地说:我试图通过查看该论坛上的其他帖子来找到解决方案,但是没有效果(可能是因为我仍然对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;

但是第一次播放的声音会在第二次播放之前停止。

是否有更“专业”的解决方案?或者这还好吗?

希望我能清楚地描述我的问题。

0 个答案:

没有答案