Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2695 connectés 

  FORUM HardWare.fr
  Programmation

  lire dans un buffer audio

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

lire dans un buffer audio

n°130131
Demis_Rous​sos
Tu aimes les poils?
Posté le 24-04-2002 à 12:47:25  profilanswer
 

Salut
 
J'ai capturé un flux audio dans un double-buffer avec les api waveInOpen, et wavInAddBuffer.
 
J'ai maintenant besoin de lire dans ce buffer pour en récupérer les infos sur l'amplitude de la sinusoïde du son et faire des tests dessus.  Mais je ne sais pas comment faire! :ouch:  
 
Le buffer a une structure WAVHDR comme suit:
 (c'est en VB)
 
Type WAVEHDR  'Structure du buffer qui va contenir le flux audio
        lpData As Long
        dwBufferLength As Long
        dwBytesRecorded As Long
        dwUser As Long
        dwFlags As Long
        dwLoops As Long
        lpNext As Long
        Reserved As Long
End Type
 
Je sais pas ce que contient le champ lpData : l'adresse des données et du buffer ou alors les données proprement dites? J'ai vaguement l'impression qu'il s'agit d'un pointeur vers le segment mémoire alloué au buffer à cause des lignes de code suivantes:
 
hMem(i) = GlobalAlloc(&H40, BUFFER_SIZE)
inHdr(i).lpData = GlobalLock(hMem(i))
 
Toujours est il qu'en affichant à l'écran la variable hMem(i) et la variable inHdr(i).lpData j'obtiens la même chose... Je pense donc que le champ lpData n'est pas une zone contenant les données.
 
Du coup je sais pas comment récupérer ce qu'il ya dans le buffer... :(  
 
Vous avez des idées? :??:


---------------
Un fer à souder dans le cul ça fait mal.
mood
Publicité
Posté le 24-04-2002 à 12:47:25  profilanswer
 

n°130153
SoWhatIn22
Posté le 24-04-2002 à 14:00:42  profilanswer
 

J'ai comme l'impression que tu ne comprends pas vraiment ce que tu fais...
 
> hMem(i) = GlobalAlloc(&H40, BUFFER_SIZE);
tu alloues une zone de mémoire, qui va recevoir les données
 
> inHdr(i).lpData = GlobalLock(hMem(i))
dans la structure de type WAVEHDR, tu remplis le champs lpData avec l'adresse du buffer que tu viens d'allouer.
 
Au passage, l'utilisation des fonctions archi windowsiennes du type 'GlobalLock' me font ... sourire. Je trouve ça nul, mais là c'est un autre débat.
 
La doc (MSDN) te dis: "The GlobalLock function locks a global memory object and returns a pointer to the first byte of the object's memory block."
Donc heureusement :D que la variable hMem(i) et la variable inHdr(i).lpData ont la même valeure!
 
quand windows te rends le buffer, soit par callback soit par message (selon la méthode que tu utilises), alors le buffer pointé par inHdr(i).lpData contient les données.
Si tu veux travailler sur les données, il faut donc travailler sur le buffer en question, qui doit avoir une longeur valide de inHdr(i).dwBytesRecorded octets.
 
en C (désolé, je ne connais pas le VB), on ferait donc:
fwrite( (void *)inHdr(i).lpData, inHdr(i).dwBytesRecorded, 1, fp );
 
 
J'espère avoir été clair.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  lire dans un buffer audio

 

Sujets relatifs
Lire les infos de la bsae SAM sous NT4[C / C++] lire un fichier ASF sans flux audio ??
[TCL] Lire une ligne depuis l'entrée standard ?[C++] Comment controler le mixer audio de windows ???
[JAVA]: Arrêter une thread en train de lire?[PHP]Lire une ligne definie et mettre le contenu dans une variable
devpt de codecs audio[C/C++] Lire un fichier de données bizarre
lire une page HTML en PERL 
Plus de sujets relatifs à : lire dans un buffer audio


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)