CONCATENATION DE FICHIERS WAV

cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 - 25 mai 2003 à 00:45
cs_subzero Messages postés 71 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 24 février 2012 - 31 août 2004 à 06:12
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/12558-concatenation-de-fichiers-wav

cs_subzero Messages postés 71 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 24 février 2012
31 août 2004 à 06:12
Salut! Bestio: Si tu veux, tu peux ajouter des fonctionalités intérressantes à ton projet, comme convertir la fréquence ou le format d'un sample avant la fusion... Le savais-tu: Pour que les samples se fusionnent correctement, il faut qu'il est la même valeur d'amplitude à l'endroit de la fusion, sinon, on peut obtienir un craquement à l'écoute de cet position... Une solution est d'ajouter fade-out à la fin du sample et fade-in au début... Si tu es intérressé, contacte-moi! Autre chose, j'ai découvert une erreur dans mon tuto -(merci Steph!). Il sagit de la fonction de conversion 16bits non-signés -> signés. Voici la correction (il manquait le signe = dans la condition):

donnee:=donnee+32768;
IF(donnee>=65536)THEN donnee:=donnee-65536;

à+
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
18 août 2004 à 19:35
delphifan a eu la gentillesse de m'envoyer un message expliquant notre petite discussion sur la taille du header !! Voici son message qui explique le pourquoi du moment ! ;o)

"la valeur 36 est juste, et c'est pas etonnant, car si on regarde bien la définition de bloc RIff
on trouve que ce dèrnier contient les informations suivantes:
- 4 octets pour les caractères ascii "riff".ensuite vient les 4octets qui détermine la longueur totale en octet de la suite de du fichier et non pas la taille total du fichier
càd riff.taille= la taille total de fichier -8 octets(4octets pour les caractères "riff"+4octets pour la taille )
autrement dit,c'est la taille de fichier apartir de l'octet numéro 8jusqu'à la fin du ficchier d'ou 44-8=36.
donc riff.taille =36+taille de données est juste.rien ne vient de hasard."

Vala vala... Merci Delphifan ! =0)
Et bonne prog' à tous !
Bestiol.
delphifan Messages postés 6 Date d'inscription lundi 22 mars 2004 Statut Membre Dernière intervention 15 mai 2004
30 mars 2004 à 11:07
tout d'abord merci pour les efforts que vous avez fait pour faire réussir ce programme ,ton idée ma beaucoup apprécier,elle est simple et au même temps avantageuse sauf que vous avez travaillez
que sur les formats pcm sans prendre en compte le cas
ou data ="fact" .
comme les autres commentaires ,bien que le header est sur 44 alors que ça marche sur 36,c'est ettonant n'est ce pas !j'ai essaie ce programme avec C++builder mais il m'a poser une exception de violation d'adresse au niveau de l'instruction :Temp->CopyFrom(Source, Fichier.Data.Taille);voulez vous bien m'aider pour résoudre ce problème réponder moi le plutot possible,et merci.
cs_subzero Messages postés 71 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 24 février 2012
28 mai 2003 à 21:19
Merci! Ben, c'est bien parti là! J'ai déjà le ripper au point!
Il manque plus que le MP3 (encodage direct de l'extraction).
Toutes les sources seront dans mon tuto! C'est cadeau! à+
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
28 mai 2003 à 18:41
Salut Sub0 !!

Pour le Header, j'ai vérifié, c'est bien 44 octets !! Ce qui est bizarre, c'est que ça marche également avec 36 dans mon programme !!

Bonne chance pour ton projet de prog' !
cs_subzero Messages postés 71 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 24 février 2012
28 mai 2003 à 12:24
Je suis sûr et certain que pour le format WAV (PCM), il faut 44 octets au header, sinon, ya un gros problème avec mes bouquins! lol
Autrement, je suis entrain de programmer un ripper de CD-Audio avec convertion du WAV en MP3! C'est intérressant en tous les cas, à+
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
28 mai 2003 à 12:14
Pour la taille du header, je me suis référé à un document que j'ai trouvé sur le Net... Mais ça marche très bien avec 36 !! Je verrai ce qu eça fait avec 44...
cs_subzero Messages postés 71 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 24 février 2012
28 mai 2003 à 06:58
Au fait, la taille de l'header du fichier WAV est 44 octets, et non 36!
Bref, mon tutoriel sur le format WAV vous sera sûrement bénéfique (j'espère). Il ya des sources complètes pour convertir les formats! Par exemple convertir un sample 16 bits stéréo en 16 bits mono, ou en 8 bits stéréo... Pour la convertion de la fréquence d'échantillonnage, je suis en train de m'en occuper! à+
cs_subzero Messages postés 71 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 24 février 2012
28 mai 2003 à 06:43
Salut!

J'ai commencé un tutoriel sur le format WAV et il y aura quelques sources intérressantes pour Delphi! Si vous avez des conseils, ou des remarques, des idées, etc.... Contactez-moi!

http://site.voila.fr/subut/tuto_wav.htm

<subut2@hotmail.com>
cs_bgK Messages postés 131 Date d'inscription vendredi 7 juin 2002 Statut Membre Dernière intervention 19 janvier 2004
25 mai 2003 à 19:24
Cool, bravo !!!
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
25 mai 2003 à 14:27
Salut bgK !!

Pour at première remarque, c'est erxct, je ne fais aucun vérification !! Pour être sûr à 100% qu'il s'agit bien d'un fichier WAVE PCM :
-A l'offset 0, 4 caratères : "RIFF"
-A l'offset 8, 4 caractères : "WAVE" suivis à l'offset 12 de "fmt "
-A l'offset 20, une variable de 2 octets (WORD) qui doit être égale à 1 pour le format PCM
Voilà pour la vérification !

Pour le PAnsiChar, j'ai fait ça car j'ai gardé en mémoire un problème que j'avais eu en utilisant un TStringList en paramètre d'une fonction... Je sais plus très bien ce qui s'était passé, mais là, j'ai pas cherché, j'ai mis directement PAnsiChar, vu qu'on peut facilement utiliser StringList.Lines.GetText et SetText !

Merci pour les commentaires, et bonne prog' !
cs_bgK Messages postés 131 Date d'inscription vendredi 7 juin 2002 Statut Membre Dernière intervention 19 janvier 2004
25 mai 2003 à 09:02
C'est bien, et utile, mais j'ai juste deux petites remarques/questions :
- à priori, il suffit de renommer n'importe quel fichier en .wav pour pouvoir le concaténer avec un autre. Peut-être qu'une petite vérification au niveau de la signature de(s) l'en-tête(s) ne serait pas de trop.
- Sinon, dans ta fonction concaténer, pourquoi utiliser une variable de type PAnsiChar ?? Un TStrings ou TStringList n'aurait-il pas fait l'affaire ??
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
25 mai 2003 à 00:45
Petite précision pour la ligne "RIFF.Taille := 36 + Temp.Size;" :
Le 36 correspond à la taille de tous les headers, qui est fixe pour le format PCM
Rejoignez-nous