Чтобы было понятно: я пытался найти решение, просматривая другие сообщения на этом форуме, но безрезультатно (возможно, из-за моих все еще слабых знаний программирования на 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;
}
Это работает, но только когда каждый раз, когда псевдоним отличается от предыдущего (поэтому я использую увеличивающуюся цифру в имени). Но .. Если во время игры будут воспроизводиться звуки, скажем, 10 000 раз ... это "съест" много памяти?
Нужно ли менять код? Есть ли «лучший» вариант сделать это? Я искал код условия, который закрывает его после завершения воспроизведения, но ... Я также хочу, чтобы звук воспроизводился через 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;
, но первый воспроизводимый звук останавливается, прежде чем воспроизводится второй.
Есть ли более "профессиональное" решение для этого? Или это просто отлично?
Надеюсь, я четко описал свою проблему.