[DirectSound] Problème lecture de données
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:
Code:
soundBuffer.Play(0, BufferPlayFlags.Default);
J'ai un message d'erreur: DSERR_PRIOLEVELNEEDED
Voila mon code pour lire le son précédemment enregistrer:
Code:
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); |
Je ne voie vraiment pas pourquoi je me ramasse ce DSERR_PRIOLEVELNEEDED à chaque fois que je souhaite lire mes données.