Couper un fichier wav

Résolu
delfare Messages postés 25 Date d'inscription samedi 27 août 2005 Statut Membre Dernière intervention 13 juillet 2007 - 6 sept. 2005 à 19:20
Poufine Messages postés 5 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 10 novembre 2005 - 25 oct. 2005 à 21:49
salut,
j'aimerais savoir comment je peux couper un fichier wav en plusieurs fichiers wav(genre un fichier wav de 10 minutes en 10 fichiers wav d'une minute)
merci d'avance.

6 réponses

Poufine Messages postés 5 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 10 novembre 2005
25 oct. 2005 à 21:49
moi j'utilise ce bout de code:

WAVEFORMATEX recordingType;
recordingType.wFormatTag = WAVE_FORMAT_PCM;
recordingType.nChannels = 1; // 1 ou 2 selon si c'est mono ou stereo
recordingType.nSamplesPerSec = _fs; // frequence d'echantillonage
recordingType.wBitsPerSample = 16; // nb de bytes par echantillon
recordingType.nBlockAlign = (recordingType.nChannels * recordingType.wBitsPerSample) / 8; // aucune idée
recordingType.nAvgBytesPerSec = recordingType.nSamplesPerSec * recordingType.nBlockAlign; // aucune idée


//j'utilise un WAVEFORMATEX pour initialiser la carte son mais dans ton cas c'est peu etre pas utile

DWORD lTaille_Donnees ;



//creation de l'entete de mon fichier wav



DWORD lNb_Bytes ;
hFichier = CreateFile("record.wav", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD dwTemp = 0;
WORD dTemp = 0;
WriteFile(hFichier, "RIFF", 4, &lNb_Bytes, NULL);
dwTemp = 0;
WriteFile(hFichier, &dwTemp, 4, &lNb_Bytes, NULL);
WriteFile(hFichier, "WAVE", 4, &lNb_Bytes, NULL);
WriteFile(hFichier, "fmt ", 4, &lNb_Bytes, NULL);
dwTemp = 16;
WriteFile(hFichier, &dwTemp, 4, &lNb_Bytes, NULL);
dTemp = WAVE_FORMAT_PCM;
WriteFile(hFichier, &dTemp, 2, &lNb_Bytes, NULL);
dTemp = recordingType.nChannels;
WriteFile(hFichier, &dTemp, 2, &lNb_Bytes, NULL);
dwTemp = recordingType.nSamplesPerSec;
WriteFile(hFichier, &dwTemp, 4, &lNb_Bytes, NULL);
dwTemp = recordingType.nAvgBytesPerSec;
WriteFile(hFichier, &dwTemp, 4, &lNb_Bytes, NULL);
dTemp = recordingType.nBlockAlign;
WriteFile(hFichier, &dTemp, 2, &lNb_Bytes, NULL);
dTemp = recordingType.wBitsPerSample;
WriteFile(hFichier, &dTemp, 2, &lNb_Bytes, NULL);
WriteFile(hFichier, "data", 4, &lNb_Bytes, NULL);
dwTemp = 0;
WriteFile(hFichier, &dwTemp, 4, &lNb_Bytes, NULL);
lTaille_Donnees =0;


///////////////////////////////////////////////////////////////////


// ajout des echantillons



DWORD lNb_Bytes;


WriteFile(hFichier, ( Nom de ton buffer contenant le son) , ( Nombre de bytes de ton buffer contenant le son) , &lNb_Bytes, NULL);


lTaille_Donnees += lNb_Bytes;
//////////////////////////////////////////////////////////////////////////////



// mise a jour de l'entete
DWORD dwTemp,lNb_Bytes;



dwTemp = lTaille_Donnees + 36;
SetFilePointer(hFichier, 4, NULL, FILE_BEGIN);
WriteFile(hFichier, &dwTemp, 4, &lNb_Bytes, NULL);
dwTemp = lTaille_Donnees;
SetFilePointer(hFichier, 40, NULL, FILE_BEGIN);
WriteFile(hFichier, &dwTemp, 4, &lNb_Bytes, NULL);

il se peut que j'ai oublié des trucs, mais je ne pense pas....
ceci dit vu la date du dernier message t'as peut etre déja trouvé
3
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
6 sept. 2005 à 21:03
Bonjour,



Debut de piste :

Tu recuperes l'entete du fichier wav.

Apres tu recuperes dans l'entete wave sur combien de bit est codé un echantillon (8 ou 16), c'est la dynamique.



Apres tu recuperes, toujours dans l'entete wave, le nombre de channel (mono ou stéréo).



La longueur de l'entete bien-sur puis la longueur des datas.



Tu determines la taille de tes differents fichiers (attentions a la
dynamique et au nombre de channel par exemple si 16 bits et stéréo
alors prendre les octets 4 par 4)



dans un nouveau fichier tu mets l'entete (avec le nouveau parametre longueur data)

tu ecris l'entete, puis un morceau de tes datas et ainsi de suite...


j'espere que j'ai été clair...



Bon courage,


Matt...
0
delfare Messages postés 25 Date d'inscription samedi 27 août 2005 Statut Membre Dernière intervention 13 juillet 2007
7 sept. 2005 à 17:56
merci, je me doutait que ca devait etre un truc dans le genre mais comment puis-je savoir si on donne n'importe quel fichier wav si c'est du 16 ou 8 bits.
aussi : est-ce qu'il n'y aurait pas un petit code d'exemple?
merci d'avance
0
jul39dole Messages postés 117 Date d'inscription mardi 22 juillet 2003 Statut Membre Dernière intervention 21 janvier 2011
7 sept. 2005 à 21:41
faut faire attention qu'il s'agisse bien du format PCM (c'est à dire non compressé). Va voir sur http://www.wotsit.org/ pour obtenir des informations sur le format wav. Ce sera probablement en anglais par contre...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
delfare Messages postés 25 Date d'inscription samedi 27 août 2005 Statut Membre Dernière intervention 13 juillet 2007
9 sept. 2005 à 17:45
ok, je croix que c'est du PCM mais j'aurais besoin d'un code exemple ou d'un bon tuto car sur wotsite, ca m'aide pas assez
0
delfare Messages postés 25 Date d'inscription samedi 27 août 2005 Statut Membre Dernière intervention 13 juillet 2007
10 sept. 2005 à 18:56
bon, j'ai reussi a couper comme je voulais en fichier wav, ca marche sous windows media player mais cependant, le header n'est pas recopier et comme je veux utiliser un prog que j'ai trouve pour faire un compressage, il lui faut le header du fichier, j'ai reussi a recuperer les infos (wFormatTag,nChannels,...) mais j'aimerais savoir comment je peux les copier correctement
merci d'avance
0
Rejoignez-nous