A oui tiens, c'est vrai, tu as pas regardé la source de mon prog (Wave.pas) où il y a tout ce qu'il faut pour lire les en-têtes ? Si tu comprends pas un truc demandes moi.
Avec ça tu va pouvoir nous faire un joli warning quand le fichier n'est pas du bon format. Le plus simple: tu vérifie ce qu'il faut (vérifie si le format est PCM aussi) et si c'est bon, tu utilise ton ancienne méthode.
Voilà la structure convertie en C (en prenant WAFEFORMATEX comme base bien sûr):
typedef struct tWAVEHEADER
{
char RIFF[4] // ca doit être 'RIFF' pour un WAVE valide
DWORD nFileSize // La taille du fichier entier (ne fait une erreur seulement si la taille est inférieure à ça)
char WAVE[4] // La ça doît être 'WAVE'
char fmt[4] // J'ai toujours cru que c'était 'fmt' mais il semble que ce soit 'fmt '
WORD cbSize; // ce n'est pas le même cbSize que pour WAVEFORMATEX, puisque celui-ci compte toute l'en-tête qui suit cbSize
WORD wFormatTag; /* format type */ // Le type de format (WAVE_FORMAT_PCM = 1)
WORD nChannels; /* number of channels (i.e. mono, stereo...) */ // Nombre de canaux (généralement 1 ou deux)
DWORD nSamplesPerSec; /* sample rate */ // Fréquence d'échantillonage (octets/seconde)
DWORD nAvgBytesPerSec; /* for buffer estimation */ // Pas très important (je sais pas trop ce que c'est)
WORD nBlockAlign; /* block size of data */ // combien d'octets par échantillon (on part de 1. Si c'est 16 bits ça double et si c'est stéréo, ça double encore)
WORD wBitsPerSample; /* number of bits per sample of mono data */ // Combien de bits par échantillon (généralement 8 ou 16 pour du PCM)
} WAVEHEADER;
ça devrait te suffire pour le moment je pense

C'est bien ce que je pensais. Ca fonctionne pas parfaitement mais c'est déjà ça.
Je peux le télécharger ou la dernière version du convertisseur?
Le filtre est loin d'être parfait. Le converto (v1.3) n'est pas encore disponible. La dernière version en date est la 1.2...
euh dites, juste comme ça évitez du faire du delphi parce que je voudrais porter le converto pour linux (j'ai récupéré les sources pour voir).
Converti est fait en C. La source .cpp est dans le zip.
oui, ca j'ai vu mais il y a probablement des morceaux intéressants dans ce qu'à fait GoldenCrystal et comme le delphi ça ressemble à rien...
mais il y a des lib aussi sous nux ! (oui je sais c pas les mêmes)
suffit de trouver la doc.
Bas il faut emuler le processeur, l'architecture de la machine, les registres... et tout ça demande beaucoup de vitesse.
ca dépend aussi de l'émulateur !