Bonsoir,
Je suis en train d'écrire un programme qui permet d'enregistrer et lire le son en provenance du micro.
Le partie enregistrement fonctionne correctement sans problème, mais la partie lecture du son me pose un petit soucis lorsque j'essaie de lire avec:
J'ai un message d'erreur: DSERR_PRIOLEVELNEEDED
Code : Sélectionner tout - Visualiser dans une fenêtre à part soundBuffer.Play(0, BufferPlayFlags.Default);
Voila mon code pour lire le son précédemment enregistrer:
Je ne voie vraiment pas pourquoi je me ramasse ce DSERR_PRIOLEVELNEEDED à chaque fois que je souhaite lire mes données.
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 byte[] pData = GetSoundData(); //GetSoundData() renvoie un tableau de byte qui sont mes données audio, si j'enregistre cela au format wav que je les lis avec un lecteur audio aucun soucis,donc pas de données corrompu ou autre et mon WaveFormat est donc correct. int bufferSize = pData.Length; BufferDescription bd = new BufferDescription(); bd.BufferBytes = bufferSize; bd.CanGetCurrentPosition = true; bd.Control3D = false; bd.ControlEffects = true; bd.ControlFrequency = true; bd.ControlPan = true; bd.ControlPositionNotify = true; bd.ControlVolume = true; bd.DeferLocation = true; bd.Format = waveFormat; bd.GlobalFocus = false; bd.LocateInHardware = false; bd.LocateInSoftware = false; bd.PrimaryBuffer = false; bd.StaticBuffer = false; bd.StickyFocus = true; //--Recherche périphérique DevicesCollection dc = new DevicesCollection(); int deviceID=-1; for (int i = 0; i < dc.Count; i++) { if (dc[i].Description.ToString().ToLower().Contains("nom_de_ma_carte_son_que_je_souhaite_utiliser")) { deviceID = i; break; } } Device d = new Device(dc[deviceID].DriverGuid); //---- SecondaryBuffer soundBuffer = new SecondaryBuffer(bd, d); soundBuffer.Volume = 0; //max volume soundBuffer.Write(0, pData, LockFlag.None); soundBuffer.SetCurrentPosition(0); soundBuffer.Play(0, BufferPlayFlags.Default);
Partager