Problème de sons instantanné avec le son windows (hWaveOut)

cs_vincent303 Messages postés 24 Date d'inscription mercredi 28 avril 2010 Statut Membre Dernière intervention 18 mai 2012 - 16 mai 2010 à 17:16
cs_vincent303 Messages postés 24 Date d'inscription mercredi 28 avril 2010 Statut Membre Dernière intervention 18 mai 2012 - 17 mai 2010 à 15:43
Bonjour,

Voila mon soucis : je veux écouter un ensemble de son mis à la suite par des buffers. Seul soucis c'est que entre chaque son j'ai un petit bruit (comme la fermeture et l'ouverture du canal sonore).

Voila code version ultra simplifié :
[i]
//Tout d'abord je créée le lien avec la carte son (j'ouvre un canal)/i
HWAVEOUT hWaveOut;
WAVEFORMATEX wfex;
WAVEHDR whdr1;
[i]
//propriété du signal/i
wfex.wFormatTag = WAVE_FORMAT_PCM;
wfex.nChannels 1; /* Mono. 2 Stereo */
wfex.wBitsPerSample = CHAR_BIT; /* Nombre de bits par echantillon */
wfex.nSamplesPerSec =FE;
wfex.nBlockAlign = (wfex.nChannels * wfex.wBitsPerSample) / CHAR_BIT;
wfex.nAvgBytesPerSec = wfex.nSamplesPerSec*wfex.nBlockAlign;
wfex.cbSize = 0;

waveOutOpen(&hWaveOut, WAVE_MAPPER, &wfex,(DWORD) Done, 0, CALLBACK_EVENT);

//puis apré j'ai une fonction que je fait appel tous les 50 millisecondes qui crée un //signal stocké dans char* buffer :

void vocodeur::sonSimple(int num)
{
this->creerSignal(num); //fonction qui stock le signal dans buffer


whdr1.lpData =buffer;
whdr1.dwBufferLength = L;
whdr1.dwFlags=0;
whdr1.dwLoops = 0;

waveOutPrepareHeader(hWaveOut, &whdr1, sizeof(whdr1));
waveOutWrite(hWaveOut, &whdr1, sizeof(whdr1));
[i]// if (WaitForSingleObject(Done,INFINITE) != WAIT_OBJECT_0)
// {}/i
waveOutUnprepareHeader(hWaveOut, &whdr1, sizeof(whdr1));


}

6 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 mai 2010 à 19:08
Sans doute que le signal que tu mets dans ton buffer n'est pas assez long, ou bien tu n'appelles pas ta méthode sonSimple assez souvent.

Normalement il faut utiliser le message MM_WOM_DONE pour savoir quand envoyer de nouvelles données, non?


_____________________________________
Un éditeur de ressources gratuit pour Windows
0
cs_vincent303 Messages postés 24 Date d'inscription mercredi 28 avril 2010 Statut Membre Dernière intervention 18 mai 2012
16 mai 2010 à 19:52
Ba j'ai essayé de mettre une signal beaucoup plus grand avec une temporisation trés petite(20ms) donc forcément le temps a énormément augmenté mais j'ai quand même entre 2 son des bruits.

Et pour le NM_WOM_DONE je sais pas actuellement je me préoccupe pas quand envoyé les donnés(d'ailleurs en augmentant le signal, je remplie le canal sonore plus rapidement que la vitesse de lecture se qui ai bien la preuve que le signal est assez grand).L'essentiel est de pouvoir écouté le son "fluidement".
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
16 mai 2010 à 20:45
C'est un bruit bizarre ou bien un blanc que tu as?
Si tu as un bruit bizarre, c'est peut être que ton signal n'est pas bien continu.
Par exemple si tu envoies une sinusoïde, es-tu certain de bien reprendre la sinusoïde là ou elle était rendue?

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
cs_vincent303 Messages postés 24 Date d'inscription mercredi 28 avril 2010 Statut Membre Dernière intervention 18 mai 2012
16 mai 2010 à 21:21
Ba c'est vraiment un bruit d'ouverture du canal sonore. c'est a dire que même si je fais appel qu'une seul fois à la fonction simpleSon avec un grand buffer,j'ai le bruit au début et a la fin du signal sonore.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_vincent303 Messages postés 24 Date d'inscription mercredi 28 avril 2010 Statut Membre Dernière intervention 18 mai 2012
17 mai 2010 à 11:02
Enfaite c vrai que le son a la fin d'un buffer n'est pas le même que celui qui arrive a l'entré du buffer d'après. C'est sa qui peu posé problème et avoir un bruit?
Et c'est pas une sinusoïde que je gère mais un signal sonore créée par vocodeur LPC (artificielle).
0
cs_vincent303 Messages postés 24 Date d'inscription mercredi 28 avril 2010 Statut Membre Dernière intervention 18 mai 2012
17 mai 2010 à 15:43
Juste j'ai fait une petite expérience.

Mon son (buffer) je l'ai remplie que de la même valeur (0.5).
Mon premier son continue est belle est bien continue je n'est pas d'interson entre chaque buffer sa marche nickel. Mais des que j'arrête le son et décide de le relancé, à ce moment la j'ai entre chaque buffer un son d'ouverture et fermeture.
0
Rejoignez-nous