ANALYSE DE SIGNAL AUDIO-NUMÉRIQUE

cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018 - 8 févr. 2009 à 09:57
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 - 13 août 2009 à 07:19
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/49203-analyse-de-signal-audio-numerique

Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
13 août 2009 à 07:19
c'est limpide, merci
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
12 août 2009 à 22:53
A l'époque où j'ai développé cette technique, je n'utilisais que VBA ; or dans ce langage, les handles des contrôles ne sont pas exposés comme en VB, ce qui empêche l'utilisation d'un très grand nombre d'API, comme celles sur la gestion de bitmaps. J'ai donc essayé d'autres méthodes, comme la fonction SetPixel, qui s'est révélée très lente.

L'importation d'image à partir d'un fichier bitmap me paraissant la seule solution pratique, j'ai, comme tu l'as évoqué, comparé les approches "mémoire" et "disque" de la gestion d'une image Windows bitmap. J'ai alors constaté que dessiner dans un fichier, en mémoire virtuelle, était plus rapide et moins gourmand en ressources que de travailler en mémoire avec des tableaux à deux dimensions. Cette bonne performance est due au fait, je pense, que les accès au disque se font seulement à l'ouverture et à la fermeture du fichier et que, dans l'intervalle, le système écrit dans le cache. Ceci est vrai à la condition que le fichier soit créé à sa taille définitive, sinon le système est susceptible d'accéder au disque en cours de travail pour ajuster la taille du fichier. Il faut donc utiliser un format Windows Bitmap non compressé, qui est à ma connaissance le seul format de fichier d'image dont on peut prévoir la taille exacte sans connaître le contenu. Ces conditions étant remplies, le fichier peut être utilisé comme mémoire vituelle (ce qui, au passage, allège considérablement les ressources de l'application).

Aujourd'hui, bien que je ne développe plus que rarement en VBA, je continue, par habitude, à utiliser cette technique.
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
12 août 2009 à 07:37
C'est bien ce que je pensais avoir compris. D'ou une nouvelle question :
Niveau performance le temps d'acces au fichier via le HDD doit être plus long qu'a la RAM, pourquoi ce choix ?
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
11 août 2009 à 21:49
Bonjour ADN56

Merci beaucoup pour tes commentaires, c'est sympa.

Pour dessiner dans un bitmap, je n'utilise pas les fonctions de dessin de VB, mais je dessine plutôt dans un fichier au format bmp 256 couleurs que je charge ensuite dans un contrôle.

Voici comment je fais. D'abord, je crée sur disque un fichier bmp vide, mais entier, c.a.d. avec ses quatre structures bmpfileheader, bmpinfoheader, palette de couleurs et bitmap data. Une fois le fichier initialisé, l'application écrit directement les pixels dans la section bitmap data du fichier. C'est possible dans le cas d'un fichier bmp, celui-ci stockant l'image sous la forme d'un tableau matriciel de pixels (raster). Une fois le dessin terminé, l'application ferme le fichier bmp avant de charger l'image dans un contrôle.

Donc, l'application écris ses pixels dans un fichier, pas à l'écran. C'est la principale différence par rapport aux fonctions de dessin de vb.

Amicalement
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
10 août 2009 à 14:05
Bonjour,
Chapeau bas Mr, je viens de tester ta source et whaouuu.
Je ne comprends cepedant comment tu fais pour dessiner dans un bipmap.
c'est la fonction ecrire pixel :
For wY = axe + 1 - (hauteur - HAUTEUR_AXE - MARGE_VER) / 2 To axe + 1 + (hauteur - HAUTEUR_AXE - MARGE_VER) / 2
If wY <> axe + 1 Then ecrirePixel(numFic, wX, wY, largeur, trailer, VERT_FONCE)
Next wY
Mais j'ai un peu de mal à la décortiquer, pourtant cela à l'air plus rapide que de dessiner directement dans la picture box, c'est pour cela que tu fais ainsi ?
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
9 févr. 2009 à 20:07
Eh bien, je peux dire que tu m'en as appris des choses en deux messages !

J'ai suivi tes conseils et supprimé les contrôles de dépassement sur les entiers en mode release ; le code est nettement plus efficace.
Je constate que j'avais une vision erronée de la version Express qui, en définitive, se révèle suffisante pour une utilisation non industrielle.

Encore merci pour tes conseils :)

Philippe
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
9 févr. 2009 à 08:28
Il faut cocher "Afficher tous les paramètres" dans la boite des Options pour accéder à toutes les options, pas besoin d'acheter une licence : les versions payantes à mon avis sont plus destinées à l'industrialisation du développement en équipe, la gratuité sert à bien faire connaitre le produit.
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
8 févr. 2009 à 21:54
J'ai commencé à examiner ton appli ; je ne connaissais pas la fonction Beep. Je n'ai pas trouvé les options avancées de compilation, c'est sans doute parce que je suis sur la version Express (je souhaite faire un tour des différentes plateformes de Visual Studio avant de faire un choix et acheter une license).

Je suis débutant en .net et en traitement du son, et je te remercie beaucoup pour tes conseils.

Amicalement
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
8 févr. 2009 à 19:49
Merci Patrice, je vais suivre tes conseils et aussi regarder ton appli.

Amicalement

Philippe
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
8 févr. 2009 à 09:57
Pas mal ton idée de générer un extrait sonore à la fréquence cliquée : moi j'avais utilisé le Beep système en lui passant la fréquence, dans mon logiciel VBWaveComp. Sinon j'ai 2 conseils : évite le Math.Pow lorsque la puissance est 2 et coche "Supprimer les contrôles de dépassement sur les entiers" dans les "options avancées de compilation" en mode Release, ça devrait aller sensiblement + vite.
Rejoignez-nous