Bonjour,
Je fais un logiciel de musique simple.
Il comprend un piano virtuel qui est supposé émettre des sons lorsqu'on appuie sur des touches du clavier.
J'arrive à émettre un son lors de la pression de la touche mais lorsque l'on reste appuyé sur la touche le son est lancé plein de fois. J'aimerai faire en sorte que le son soit joué lors de la pression et qu'il se stoppe lorsque l'on relâche la touche. De plus, il faut que l'on puisse jouer plusieurs sons en même temps lorsqu'on appuie sur plusieurs touches simultanément.
J'ai utilisé SlimDX pour jouer les sons.
J'ai essayé d'utiliser un évènement booléen "KeyPressed" mais sa ne marche pas
Voilà mon code.
Merci beaucoup de votre aide, ça m'aiderait énormément
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 public static XAudio2 device = new XAudio2(); public static MasteringVoice mv = new MasteringVoice(device); public static AudioBuffer buffer = new AudioBuffer(); public static Dictionary<string, WaveStream> dicOfSound = new Dictionary<string, WaveStream>(); public bool KeyPressed; private void Form1_Load(object sender, System.EventArgs e) { LoadSounds(); } public static void PlaySound(string name) { buffer.AudioData = dicOfSound[name]; buffer.AudioBytes = (int)dicOfSound[name].Length; buffer.Flags = BufferFlags.EndOfStream; SourceVoice sv = new SourceVoice(device, dicOfSound[name].Format); sv.SubmitSourceBuffer(buffer); sv.Start(); if (KeyPressed == false) { buffer.Dispose(); sv.Dispose(); } } private void Form1_KeyPress(object sender, KeyPressEventArgs e) { switch (e.KeyChar) { case 'q': KeyPressed = true; PlaySound("AudioWindowsFormsApplication.Resources.Notes.son1.wav"); break; case 's': KeyPressed = true; PlaySound("AudioWindowsFormsApplication.Resources.Notes.son2.wav"); break; } private void Form1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e) { switch (e.KeyCode) { case Keys.Q: KeyPressed = false; break; case Keys.S: KeyPressed = false; break; } } }
Partager