J'ai testé votre code, cela fonctionne !
J'ai bien l'entete de créé dans le fichier .wav final
Par contre, je n'arrive pas à coller ensuite le contenu du fichier temporaire par le biai du Buffer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 RIFFL WAVEfmt D¬ ± dataxL
J'ai l'erreur :
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
52
53
54
55
56 nIDFichFinal est un entier nIDFichFinal = fOuvre("C:\Users\Kyle\Documents\test_final.wav", foCréation+foAjout) MonAudioBuff est un Buffer = fChargeBuffer("C:\Users\Kyle\Documents\test_tempo.wav") nTailleSon est un entier sans signe sur 4 octets = Taille(MonAudioBuff) NbrCanaux est un entier sans signe sur 2 octets = 2 BitsPerSample est un entier sans signe sur 2 octets = 16 BytePerBloc est un entier sans signe sur 2 octets = NbrCanaux * BitsPerSample / 8 Frequence est un entier sans signe sur 4 octets = 44100 BytePerSec est un entier sans signe sur 4 octets = Frequence * BytePerBloc xbEntete est un Buffer // [Bloc de déclaration d'un fichier au format WAVE] // FileTypeBlocID (4 octets) : Constante «RIFF» (0x52,0x49,0x46,0x46) // FileSize (4 octets) : Taille du fichier moins 8 octets // FileFormatID (4 octets) : Format = «WAVE» (0x57,0x41,0x56,0x45) xbEntete = "RIFF" xbEntete += (nTailleSon + 44 - 8) xbEntete += "WAVE" // [Bloc décrivant le format audio] // FormatBlocID (4 octets) : Identifiant «fmt » (0x66,0x6D, 0x74,0x20) // BlocSize (4 octets) : Nombre d'octets du bloc - 8 (0x10) // AudioFormat (2 octets) : Format du stockage dans le fichier (1: PCM, ...) // NbrCanaux (2 octets) : Nombre de canaux (de 1 à 6) // Frequence (4 octets) : Fréquence d'échantillonnage (en hertz) [Valeurs standardisées : 11025, 22050, 44100 et éventuellement 48000 et 96000] // BytePerSec (4 octets) : Nombre d'octets à lire par seconde (i.e., Frequence * BytePerBloc). // BytePerBloc (2 octets) : Nombre d'octets par bloc d'échantillonnage (i.e., tous canaux confondus : NbrCanaux * BitsPerSample/8). // BitsPerSample (2 octets) : Nombre de bits utilisés pour le codage de chaque échantillon (8, 16, 24) xbEntete += "fmt " xbEntete += 0x00000010 xbEntete += BufferSurDeuxOctets(1) xbEntete += BufferSurDeuxOctets(NbrCanaux) xbEntete += Frequence xbEntete += BytePerSec xbEntete += BufferSurDeuxOctets(BytePerBloc) xbEntete += BufferSurDeuxOctets(BitsPerSample) // [Bloc des données] // DataBlocID (4 octets) : Constante «data» (0x64,0x61,0x74,0x61) // DataSize (4 octets) : Nombre d'octets des données (i.e. "Data[]", // i.e. taille_du_fichier - taille_de_l'entête (qui fait 44 octets normalement). xbEntete += "data" xbEntete += nTailleSon Trace(xbEntete) // pour écrire l'entête fEcrit(nIDFichFinal, &xbEntete + &MonAudioBuff, Taille(xbEntete) + Taille(MonAudioBuff))
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Erreur à la ligne 69 du traitement Procédure globale CreerWavONE. Vous avez appelé la fonction fEcrit. L'adresse mémoire fournie pour le buffer : <0x07311058d> est invalide sur une partie au moins de sa taille (<253596> octets).
Partager