Bonjour à tous et à toutes,

J'ai pour objectif de récupérer, sous forme de graphique sur Excel, un signal audio contenu dans un fichier audio décompressé WAVE (.wav). Après quelques recherches, j'ai compris que le fichier WAVE était composé de deux parties : l'entête codée sur 44 octets, et le reste du fichier contenant les fameuses données qui composent le signal audio.

L'idée c'est de récupérer les différents échantillons qui composent le signal audio et de les stocker dans un tableau à deux entrées : l'amplitude du signal (indiqué par les différents échantillons qui le composent) et une échelle de temps (dépendant de la fréquence d'échantillonnage utilisée et de la durée totale du fichier audio)

Afin de pouvoir "découper" correctement la suite d'octets qui correspond aux données, il me faut quelques informations sur celle-ci en allant piocher dans l'entête. Je veux ainsi récupérer, entre autres, la fréquence d'échantillonnage du signal audio et savoir sur combien de bits chaque échantillon est codé.

Vous trouverez de plus amples informations sur le format WAVE sur Wikipédia, à l'adresse suivante : https://fr.wikipedia.org/wiki/WAVEform_audio_format .

J'ai alors commencé à coder mon projet. Voici la première partie de mon code, contenue dans un module nommé "mdlControl" :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
'Commençons par un Type regroupant chaque partie de l'entête qui nous intéresse...
 
Public Const taille_entete As Integer = 44
Public i As Long
 
Public Type t_entete
 
DataSize As Long
NbreCanaux As Integer
BitsPerSample As Integer
BytePerSec As Long
Frequence As Long
vide As Byte
 
End Type
 
 
'Une fois le type défini, on peut tirer toutes les informations nécessaires du fichier WAVE qu'on utilise...
 
 
Public Sub DonneesEntete(ByRef entete As t_entete, ByVal fichier As String)
 
Dim canal As Integer
 
canal = FreeFile()
 
Open fichier For Random As canal
 
For i = 1 To 22
    Get canal, , entete.vide
Next i
 
Get canal, , entete.NbreCanaux
Get canal, , entete.Frequence
Get canal, , entete.BytePerSec
 
For i = 1 To 2
    Get canal, , entete.vide
Next i
 
Get canal, , entete.BitsPerSample
 
For i = 1 To 4
    Get canal, , entete.vide
Next i
 
Get canal, , entete.DataSize
 
Close canal
 
End Sub

L'idée derrière ce code, c'est de récupérer une à une chaque variable intéressante apparaissant dans l'entête du fichier, connaissant sa structure (cf. lien ci-dessus)
Cette procédure est placée dans un module, je me place ensuite dans une Form nommée "frmCommandes" pour l'appeler dans une procédure événementielle :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
'On clique sur le bouton de commande : 
 
Public Sub cmdRecupEntete_click()
 
Dim fichier As String
Dim entete As t_entete
Dim Repertoire As String
 
Repertoire = "C:\Users\Sideway\Desktop\"
 
fichier = Repertoire & "test.wav"
 
Call mdlControl.DonneesEntete(entete, fichier)
 
 
'Les lignes ci-dessous servent juste à vérifier que j'ai récupéré les bonnes variables.
 
frmCommandes.Cells(1, 1) = fichier
frmCommandes.Cells(2, 1) = entete.DataSize
frmCommandes.Cells(3.1) = entete.BytePerSec
frmCommandes.Cells(4, 1) = entete.NbreCanaux
frmCommandes.Cells(5, 1) = entete.BitsPerSample
frmCommandes.Cells(6, 1) = entete.Frequence
 
End Sub
Et... c'est là que ça coince ! Il se trouve que toutes les cellules servant de vérification me renvoient la valeur 0. Je ne pense pourtant pas m'être trompé de type pour chaque variable. Ce qui est encore plus étrange, c'est que lorsque je lance mon programme en "pas à pas détaillé" et que je place un espion sur la variable entete.vide (qui me sert à passer sur les données qui ne m'intéressent pas) , autant la première valeur que contient cette variable (dans mon cas) m'affiche 82, autant toutes celles qui suivent affichent la valeur 0.

Voilà, je vous ai exposé mon problème; j'espère que vous saurez m'aider à le résoudre ! Merci beaucoup de votre attention, et du temps que vous m'accordez.

Sideway.