MOTEUR AUDIO TEMPS REEL

cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012 - 8 août 2003 à 17:35
lovmaths Messages postés 4 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 8 novembre 2013 - 15 févr. 2009 à 21:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/11177-moteur-audio-temps-reel

lovmaths Messages postés 4 Date d'inscription vendredi 31 octobre 2008 Statut Membre Dernière intervention 8 novembre 2013
15 févr. 2009 à 21:03
hum... Et si un pur débutant de chez débutant souhaitait juste enregistrer le son entrant dans un genre de bloc note ?
Bon, je sais, ça ressemblerait presque à du sur mesure, mais... (et je m'explique peut-être mal, aussi, mais c'est juste pour le retoucher, j'ai envie de m'amuser à créer des programmes qui modifient les sons)
je crois que c'est beaucoup demander, quand même, du sur-mesure, mais bon... ?
gabuzomeuh Messages postés 53 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 28 mars 2007
21 mai 2007 à 08:27
salut TTNICOLAS,

C'est normal que le temps soit plus long, sachant que BUFFER_SIZE ne varie pas. C'est comme sur une route dont la longueur ne varie pas et la vitesse des voitures change, le temps pour faire toute la route varie en fonction de la vitesse des voitures.
ttnicolas Messages postés 2 Date d'inscription jeudi 27 mai 2004 Statut Membre Dernière intervention 20 mai 2007
20 mai 2007 à 20:31
Salut gabuzomeuh. Bravo pour ta source, j'aimerai savoir pourquoi lorsque je dimminue la frequence d'echantillonage, le delai entre la lecture et la restitution est plus long ?. Sinon j'ai traduit ta source pour Borland Builder et je suis en train de la modifier pour transferer le son via ethernet, pour l'instant ca marche pendant seulement 5 secondes.
gabuzomeuh Messages postés 53 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 28 mars 2007
13 mars 2007 à 16:21
J'ai ajouté un SetThreadPriority pour chaque procédure In et Out mais ca ne change rien, quand la fenêtre est réduite ou restaurée, il y a une courte interruption du processus. Quelqu'un a une piste ?
gabuzomeuh Messages postés 53 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 28 mars 2007
8 mars 2007 à 22:47
Quand la fenêtre est réduite ou restaurée, il y a une courte interruption du processus.
Doit-on utiliser un thread ou un SetPriorityClass ou un EnterCriticalSection ?
gabuzomeuh Messages postés 53 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 28 mars 2007
14 janv. 2005 à 07:29
essayez et laissez vos commentaires ou améliorations SVP
gabuzomeuh Messages postés 53 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 28 mars 2007
15 déc. 2004 à 00:55
y a personne qui connait un moteur audio simple ?
gabuzomeuh Messages postés 53 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 28 mars 2007
28 mai 2004 à 17:38
>fkmtc
c'est pas faux, j'ai corrigé le pb mais l'erreur ne venait pas de là
fkmtc Messages postés 1 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 28 mai 2004
28 mai 2004 à 15:25
peut être as-tu oublié [i] ici :

result = waveOutWrite(HWaveOut,&who,sizeof(WAVEHDR));
if (result!= MMSYSERR_NOERROR)
{
waveOutGetErrorText(result, ErrMsg, MAX_ERRMSGSIZE);
MessageBox(NULL,ErrMsg,"erreur start_out waveoutwrite",MB_OK);
return 1;
}


au niveau du &who ... il faudrait mettre &who[i] ...

++
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
10 août 2003 à 04:17
oki je vais essayer de voir tout ca

@+
gabuzomeuh Messages postés 53 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 28 mars 2007
9 août 2003 à 18:38
J'ai trouvé d'où vient le probleme mais il n'est pas encore résolu.

En effet, il semblerait que la routine waveouproc soit bien appelée à chaque passage mais l'index pointant le header de sortie (who) n'évolue pas.

A+
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
8 août 2003 à 19:00
oki, je vais essayer de voir comment je améliorer le problème, car c'est un truc qui m'interesse bcp (je fais de l'analyse spectrale sur DSP pour les lignes téléphonique)

@+
je te tiens au courant
gabuzomeuh Messages postés 53 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 28 mars 2007
8 août 2003 à 18:46
On entre un signal sur l'entree ligne de la carte son et il ressort directement par l'intermediaire d'un buffer, c'est le principe d'un systeme "temps reel".

Le but de ce programme est de resoudre dans un premier temps la vitesse d'execution de la fonction waveoutproc qui est moins rapide que la fonction waveinproc.
Le grésillement provient de ce decalage.

Lorsque ce probleme sera resolu:
1°) plus de gresillement
2°) je complete le code avec la partie calcul et affichage du spectre.

A+
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
8 août 2003 à 18:37
j'ai bien supprimer le code en attendant, juste une question ca ne plante plus, mais par contre rien ne se passe à l'écran et je n'atends rien à part un grisillement, est-ce normal ?

merci
gabuzomeuh Messages postés 53 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 28 mars 2007
8 août 2003 à 18:31
Le but de la fonction convertir_nombre_long_ascii est de convertir un nombre de 32 bit en un chaine de caractere representant ce nombre.
Elle ne sert pas a grand chose dans le code, on peut la supprimer ou essayer de l'ecrire d'une autre facon.
Je m'en sers comme temoin de passage dans les fonctions waveinproc et waveoutproc.
Cela m'a permis de me rendre compte du decalage dans le temps entre les 2 fonctions waveinproc et waveoutproc.

Le probleme que j'essaie de resoudre est le decalage qu'il y a entre les fonctions waveinproc et waveoutproc.


A+
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
8 août 2003 à 18:22
merci, mais ca plante toujours sur la ligne : dst[0]=0x30+((0x0f0000000 & valeur)>>28);
gabuzomeuh Messages postés 53 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 28 mars 2007
8 août 2003 à 18:18
Le mieux est de remplacer la boucle

for (i=0; i<8; i++)
{
dst[i]=0x30+((((0x0f0000000)>>(i*4))&valeur)>>(28-i*4));
if (dst[i]>0x39) dst[i]=0x37+((((0x0f0000000)>>(i*4))&valeur)>>(28-i*4));
}

par:

dst[0]=0x30+((0x0f0000000 & valeur)>>28);
dst[1]=0x30+((0x00f000000 & valeur)>>24);
dst[2]=0x30+((0x000f00000 & valeur)>>20);
dst[3]=0x30+((0x0000f0000 & valeur)>>16);
dst[4]=0x30+((0x00000f000 & valeur)>>12);
dst[5]=0x30+((0x000000f00 & valeur)>>8);
dst[6]=0x30+((0x0000000f0 & valeur)>>4);
dst[7]=0x30+((0x00000000f & valeur));
if (dst[0]>0x39) dst[0]=0x37+((0x0f0000000 & valeur)>>28);
if (dst[1]>0x39) dst[1]=0x37+((0x00f000000 & valeur)>>24) ;
if (dst[2]>0x39) dst[2]=0x37+((0x000f00000 & valeur)>>20) ;
if (dst[3]>0x39) dst[3]=0x37+((0x0000f0000 & valeur)>>16);
if (dst[4]>0x39) dst[4]=0x37+((0x00000f000 & valeur)>>12) ;
if (dst[5]>0x39) dst[5]=0x37+((0x000000f00 & valeur)>>8) ;
if (dst[6]>0x39) dst[6]=0x37+((0x0000000f0 & valeur)>>4) ;
if (dst[7]>0x39) dst[7]=0x37+((0x00000000f & valeur)) ;
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
8 août 2003 à 18:02
c'est sur cette ligne : dst[i]=0x30+((((0x0f0000000)>>(i*4))&valeur)>>(28-i*4));

@+
gabuzomeuh Messages postés 53 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 28 mars 2007
8 août 2003 à 17:53
Non je ne vois pas d'explication je n'ai jamais eu ce message d'erreur le mieux est de le faire tourner en pas a pas pour voir quelle fonction genere l'erreur

A+
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
8 août 2003 à 17:35
Salut,
Ton programme semble super bien, mais j'ai quelques petit problème. Lorsque je l'execute je clique sur start et là j'ai un msg de windows m'informant que l'insttruction 0x0040108E emploie l'adresse 0x0042301c et que la mémoire ne peut être "written".
Des explications ?

@+
Rejoignez-nous