comemich
Messages postés39Date d'inscriptionjeudi 3 février 2005StatutMembreDernière intervention23 août 2017
-
15 nov. 2007 à 22:58
comemich
Messages postés39Date d'inscriptionjeudi 3 février 2005StatutMembreDernière intervention23 août 2017
-
10 sept. 2008 à 22:05
J' ai commencé à développer une application en VB.NET qui nécessite d' enregistrer du son.
Je n' ai pas trouvé beaucoup d'exemples de codes souces consacré à ce sujet, et les explications de MSDN m'embrouillent encore plus.
Voici ce que j' ai fait:
' Déclaration de la fonction fournie par Microsoft
Private
Declare
Function mciSendString
Lib "winmm.dll"
Alias "mciSendStringA" (
ByVal lpstrCommand
As
String,
ByVal lpstrReturnString
As
String,
ByVal uReturnLength
As
Integer,
ByVal hwndCallback
As
Integer)
As
Integer
' Routine pour démarer l'enregistrement
Public
Sub Enregistrer()
' Fermeture (au cas où)
mciSendString("close all", vbNullString, 0, 0)
' Ouverture du périphérique MCI
mciSendString("open new type waveaudio alias Son ", vbNullString, 0, 0)
' Qualité du son
mciSendString("set Son samplespersec 44100", vbNullString, 0, 0)
' Nombre de bit
mciSendString("set Son bitspersample 16", vbNullString, 0, 0)
' Nombre de canaux (stéréo)
mciSendString("set Son channels 2", vbNullString, 0, 0)
' Préparation de la capture
mciSendString("seek Son to start", vbNullString, 0, 0)
' sauvegarder dans le fichier
mciSendString("save Son " & Fichier, vbNullString, 0, 0)
' et fermer le MCI
mciSendString("close son", vbNullString, 0, 0)
End
Sub
Ces deux routines permettent bien de démarer l' enregistrement puis de l' arrêtet en sauvegardant dans le fichier Wave. Mais la qualité du son est très dégradée.
Pourquoi le son enregistré par MCI en 44100 HZ 16 bits est il si mauvais ?
Y a-t-il une autre façon d'enregistrer un wave?.
Il y a beaucoup de programmeurs qui posent des questions dans les forums sur ce sujet, mais personne n' obtient de réponse. Pourquoi ?.
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 16 nov. 2007 à 15:45
A priori, si tu enregistres déjà un Wave sur ton PC sans passer par la programmation, par exemple avec le Magnétophone de Windows, tu obtiendra aussi un son de mauvaise qualité... Pourquoi ? C'est parce que soit ton Micro est de mauvaise qualité, soit le paramètrage n'est pas bien adapté. Par exemple, il faut souvent coché l'option "l'ampli Micro" dans Volume>paramètre Avancé... Voilà donc, peut-être la raison de l'absence d'explication, puisse que ce n'est pas vraiment un problème de codage, mais de réglage... encore que... qu'on pourrait penser à faire ces réglages par code... mais, mais... hélas ! ces réglages qui améliorent l'enregistrement dépendent aussi beaucoup du matériel de chacun... donc c'est un pb à régler au cas par cas... difficile dans ces conditions de les régler par le biais du codage, en définitive...
comemich
Messages postés39Date d'inscriptionjeudi 3 février 2005StatutMembreDernière intervention23 août 2017 17 nov. 2007 à 00:46
Pas du tout !
Quand j'enregistre avec le magnétophone de windows ou avec un autre logiciel, j'obtient un résultat tout à fait satisfaisant. Ce n'est donc pas un problème de hard ni une question de réglage du mixer audio que je controle parfaitement . J'ai même appris à controler les lignes audio du mixer dans ma programation et cette partie de l'application fonctionne parfaitement.
Dailleurs, le son qui sort de ma carte son (Sound Blaster Live! de Créative) est très bon. Et quand je l'enregistre avec l' API windows ( mciSendString ) j'obtiens un fichier wave 44100 Hz 16 bits stéréo conforme aux paramètres spécifiés dans mon code . Mais quand j'écoute ce fichier avec un player (par exemple Windows Média Player) j'entend un son tout écrasé, tout minable, comme étouffé dans une boite. Le volume est bon mais il n'y a pas d'aigüs et peu de graves.
J'ai beau relire la documentation de Microsoft (en anglais) sur Multimédia Control Interface , je ne vois pas ce qui manque pour que l'enregistrement soit correct.
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 17 nov. 2007 à 22:52
Je disais à priori. Maintenant j'ai testé ton code sur VB6, et il marche très bien. Le son sur mon Player (windows player) ne pose aucun problème... donc à postériori, le pb est spécifique à toi... enfin à quelque chose de mal configuré sur ton PC (puisque le matériel est correct)... JE ne connais pas exactement la cause , mais j'émetterai une hypothèse sous forme de question : est-ce un pb avec un codec ?
comemich
Messages postés39Date d'inscriptionjeudi 3 février 2005StatutMembreDernière intervention23 août 2017 18 nov. 2007 à 00:25
Merci d' avoir testé mon code. ça me rassure d' apprendre que ça peut marcher, même si mon problème n'est pas réglé. il y a de l'espoir. Depuis 2 semaines que je bute sur ce problème, je commençais à désespérer.
J'y connais rien en codec, mais est ce que c'est pas le même qu'utilise l'API et les autres applications ? .
Vous n’avez pas trouvé la réponse que vous recherchez ?
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 18 nov. 2007 à 11:32
JE ne serais pas de répondre complètement, car je ne sais pas comment se débrouille l'API exactement... mais, tous les programmes qui enregistres ou lit un Wave n'utilisent pas forcément les mêmes Codecs. Bien souvent, il en existe une tripotter... et parfois, (souvent) c'est aussi la jungle ! En effet, certains codecs qu'on installent deviennent prioritaires à la place d'un autre et c'est pas toujours du meilleur effet... enfin, ce n'est qu'une piste de réflexion...
comemich
Messages postés39Date d'inscriptionjeudi 3 février 2005StatutMembreDernière intervention23 août 2017 20 avril 2008 à 21:12
ça fait 6 mois que je cherche une solution. J'ai enfin trouvé. C'est très simple (voir ci dessous) . Il faut définir tous les paramètres de qualité du son dans la même instruction "mciSendString" pour avoir un enregistrement sonore de bonne qualité.
Module
ModuleMCI
' Utilisation du MULTIMEDIA CONTROL INTERFACE de winmm.dll pour enregistrer le son dans un fichier wave
Private
Declare
Function
mciSendString
Lib
"winmm.dll"
Alias
"mciSendStringA" (
ByVal
lpstrCommand
As
String
,
ByVal
lpstrReturnString
As
String
,
ByVal
uReturnLength
As
Integer
,
ByVal
hwndCallback
As
Integer
)
As
Integer
Public
Sub
Enregistrer()
' Fermeture (au cas où)
mciSendString("close all", vbNullString, 0, 0)
' Ouverture du périphérique MCI
mciSendString("open new type waveaudio alias Son ", vbNullString, 0, 0)
nabilG
Messages postés20Date d'inscriptionmercredi 18 juin 2003StatutMembreDernière intervention19 juin 2009 10 sept. 2008 à 11:00
Bonjour Comemich,
J'ai utilisé votre exemple pour enregistrer un fichier son wave avec le microphone. Ca marche et ça enregistre, sauf que quand je veux exploiter le fichier dans une autre application qui ne traite que les fichiers son 16 bits, un message me dit que le fichier est 8 bits(Pourtant j'ai mis dans mciSendString 16 bits).
Avez-vous une idée d'où est-ce que ça peut provenir?
Merci.