Streamer du son en vb sur winmm et winsock...

Soyez le premier à donner votre avis sur cette source.

Vue 6 991 fois - Téléchargée 1 117 fois

Description

Bien voila un petit source pour vous montrer comment diffuser du son sur un reseau Local ou internet, par un micro ou tous autre peripherique...

je me sert de WinMM et de Winsock, le principe de fonctionnement est tres simple grace a un mini protocole...

la qualité du son suffit pour la voix (Ech: 8Khz) le debit demandé par l'appli est de 8K/sec ^^ vous marrez pas j'ai des probleme dans la compression !!!
donc c'est stremmer en brut, et ca marche impec sur un petite ADSL...

je me suis cassé le cul a rajouter les commentaires...

voila, bonne prog, pour les questions et remarque:
grosiflex@free.fr

je vous prepare une petite dll en c++ pour implementé ca encore plus proprement...
en effet VB trouve ses limite dans la FFT temps reél et le filtrage....

Conclusion :


voila, faite moi part de vos remarques et questions...
faites un tour sur le http://www.combox.fr.st pour voir l'evolution du systeme...
a bientot...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

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++
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
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 .
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)
Messages postés
138
Date d'inscription
samedi 11 mai 2002
Statut
Membre
Dernière intervention
17 mai 2007

heu... Je me rappelle plus trop de WinMM même si à une époque j'ai + ou - dû m'en servir, mais je tenai à t'avertir d'1 truc EPSON1 : si tu fais 1 échantillonneur de fréquences... fais gaffe aux conséquences du fait que le son numérique, et justement échantilloné... Enfin, tout dépned des fréquences que tu as besoin, mais l'érreur systèmatique dans l'émission de fréquence est calculable, et surtout non négligeable si tu tends vers des fréquences soit hautes, soit très basse...
Afficher les 22 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.