Vous pourrez maintenant créer des fichiers wav opérationnels et connaître le secret de leurs entête !
Voici le code :

Code : Tout sélectionner
;============================================================;
Global Freq_E.l = 44100
Global Bit_16.w = 16
Global fmt.l = 16
Global Mono.w = 1
Global PCM_Format.w = 1
Global blockAlign.w = 2
Global Pi.d = 6.28
Dim buffer.w(99)
Global compteur.L ;Variable de comptage pour l'état du buffer
Global t.L;Temps total
Global longueur.L ;longueur du son en échantillons
Global FreqBip1.D ;en Hz
Global FreqBip2.D ;en Hz
Global FreqBip3.D ;modulation de phase en Hz
Global Qte.D ;amplitude de la modulation de phase
Global Volume.W ;entre 0 et 32767
Global tmpFreq.D ;variables temporaires
Global TmpDbl.D
Global tmpLong.L
;Valeurs a ajuster par l'utilisateur
FreqBip1 = 1200
FreqBip2 = 200
FreqBip3 = 10
Qte = 3
longueur = 88200
Volume = 5000
FreqBip1 = FreqBip1 / Freq_E ;calcul des frequence à l'échelle de l'échantillon
FreqBip2 = FreqBip2 / Freq_E
FreqBip3 = FreqBip3 / Freq_E
TmpDbl = (FreqBip2 - FreqBip1) / (2 * longueur);'calcul du pas pour la fréquence
ReDim buffer.w(511)
OpenFile(1,"c:\test.wav")
;En tête
WriteString(1,"RIFF")
tmpLong = longueur * 2 + 36
WriteLong(1,tmpLong)
WriteString(1,"WAVEfmt ")
WriteLong(1,fmt)
WriteWord(1, PCM_Format)
WriteWord(1, Mono)
WriteLong(1,Freq_E)
tmpLong = Freq_E * (Bit_16 / 8) * Mono
WriteLong(1, tmpLong)
WriteWord(1,blockAlign )
WriteWord(1,Bit_16 )
WriteString(1,"data")
tmpLong = longueur * 2
WriteLong(1, tmpLong)
;Fin en tête
Repeat
compteur = 0
Repeat
tmpFreq = Pi * (FreqBip1 + t * TmpDbl) ;calcul de la frequence du son a produire
buffer(compteur) = Int(Volume * Sin(t * tmpFreq + (Qte * Sin(Pi * t * FreqBip3))))
t = t + 1
compteur = compteur + 1
Until t = longueur Or compteur = 512
If t = longueur
ReDim buffer.w(compteur - 1)
EndIf
For i = 0 To compteur-1
WriteWord(1, buffer(i))
Next i
Until t = longueur
CloseFile(1)
InitSound()
LoadSound(1,"c:\test.wav")
PlaySound(1)
Delay(3000)
End
