STREAMER DU SON EN VB SUR WINMM ET WINSOCK...

Signaler
Messages postés
4531
Date d'inscription
dimanche 29 septembre 2002
Statut
Modérateur
Dernière intervention
22 avril 2019
-
cs_epson1
Messages postés
89
Date d'inscription
dimanche 12 novembre 2000
Statut
Membre
Dernière intervention
29 mars 2013
-
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/6255-streamer-du-son-en-vb-sur-winmm-et-winsock

cs_epson1
Messages postés
89
Date d'inscription
dimanche 12 novembre 2000
Statut
Membre
Dernière intervention
29 mars 2013

Hexanium ,Merci .
J'ai mis deux jours pour digérer tes explications et d'un coup j'ai vu la lumiére !!!
Puissant raisonnement ,je crois que j'ai compris et je m'en vais de suite faire des essais .Suis pas trés fort en math mais je dois pouvoir m'en sortir .Encore un grand merci pour ton aide ,et bon rétablissement .
(Y te reste pas un doliprane ?... ;) je vais en avoir besoin)
A++
hexanium
Messages postés
32
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
26 septembre 2005

Salut,

Bon je vais peut etre dire des conneries, (j'ai la creve et ma au crâne) mais voila comment je le vois:



sur cette image c'est un peu l'erreur qu'il faut pas faire mais la facon de voir doit marcher.
Je m'explique:

-Déja il faut apprendre a configurer correctement Winmm, (dans le module du source ici c dans la fonction OpenIn() ) C'est ici qu'on parametre le device, Mono/Stereo echantillonage, etc...
Ici apparament il te faut du stereo.
(regarde ici http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_waveform_functions.asp)


-L'idée c'est de générer a l'initialisation de l'appli les tableaux des données a mettre sur la sortie de la carte. Les valeur de ces tableaux sont les valeur de tes sinus.
Il te faut 2 tableaux (1 pour chaque voies), il faudra calculé la taille de ce tableaux judicieusement (en rapport avec la frequence d'echantillonage). Ton appli fera en permanance alimenter les buffer Winmm a partir de ces 2 tableaux pré calculés.
(Tu imagine donc 1 index qui parcour le tableau et si il arrive au bout il recommence au debut.)
Pareille pour les 2 voies !
Bien sur tu aura tous de suite pigé que les 2 index n'irons pas à la meme vitesse puisque ce sont 2 fréquences differentes

Tu peux donc voir que la subtilité se trouve dans le choix de la frequence d'echantillonage et des valeurs du tableau.


Déja prenons l'exemple du graphique au dessus.
Ici j'ai paramétré la carte en 8000 Hz, j'ai donc 1 échantillon toute les 125µs. Pour pouvoir faire une sinus de 1Khz avec ca, j'ai besoin de 8 echantillons du buffer. je reperterais ces echantillons indéfiniment, on aura alors du 1000 Hz. (la sinusoide aurra une sale gueule (8 echantillons seulment, c pas trop le probleme, le plus embetant encore c'est que la precison à "l'echantillon" pour décaller le signale.
si on déclale d'un echantillon on a lors soit 1/1.125ms=888hz ou 1/875µs=1142 Hz
on est loin des 1000 Hz + ou - 4Hz
Il faut plus d'échantillons !!!

Il faut donc que tu trouves par calcul ou empiriquement la frequence d'echantillonage dont tu as besoin. Ensuite prend un papier, une calculatrice ou excel et calcul les valeurs de tes 2 sinus pour remplire les tableaux

En gros il faut des périodes de 996 µs à 1004 µs donc la precision est de 4µs. C'est a dire qu'il faut es echantillons de taille max de 4µs
Si je dit pas de connerie: 1/4ms = 250 Khz.

Je sais pas si tu peux echantilloner à 256 Khz sur ta carte audio mais ca serait déja un certain niveau de précision .

Bien sur une fois le system compris il serait préferable de pouvoir calculer automatiquement à l'initialisation ou de pouvoir recalculer les valeurs des tableaux de sinus en fonction de la frequence ou du décalage spécifié par l'application.

Bref j'espere que j'ai aps raconté trop de bétise et que tu as pigé le principe, mais c'est tout a fait faisable en VB avec ce bout de code source.

Vais me prendre un doliprane ;)...

Hexanium
cs_epson1
Messages postés
89
Date d'inscription
dimanche 12 novembre 2000
Statut
Membre
Dernière intervention
29 mars 2013

Salut Ludolpif et Hexanium , et merci de me répondre aussi rapidemment pour m'aider .
En fait j'ai besoin d'un prog qui produise deux signaux sinusoïdaux(gauche et droite) dont la fréquence doit être d'environ 1000 HZ (pas critique) mais avec un ecart de 4 HZ(précis) entre les deux.
Pour l'instant, j'ai réussi à produire une sinus à gauche et une rampe à droite simultanément en remplissant un buffer directx.
(modif de cette source :http://www.vbfrance.com/code.aspx?ID=25409 de RDX ,ça m'a parru semblable dans le fonctionnement à WinMM)
Mais je sais pas comment produire deux sons de féquences différentes.Voila, je suis coincé là ...
Si qq a une idée je suis preneur et en plus ça me permet d'apprendre vu que je suis encore relativement novice en VB (je m'y suis mis y'a un peu plus d'un an, mon boulot c'est plus l'electronique)
Encore un grand MERCI pour vôtre aide et au plaisir de vous lire .
Cordialement .
hexanium
Messages postés
32
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
26 septembre 2005

Saluté les Amigos, (c grosiflex)
Pour plus d'info sur WinMM mattez ici:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_waveform_functions.asp

Ensuite regardez une source avec par exemple SndPlaySound en VB, retgardez bien le prototype C du MSDN et le Prototype VB trouvé pour SndPlaySound, vous ne devrier pas avoir de mal à creer tous les prototypes VB pour toutes les fonctions Winmm. (dans ma source y'a déja une petite partie des prototypes)

A++

Hexanium (Alias Grosiflex)