Creation dun fichier.wav en vb.net

Description

Bonjour,
je vous presente un fichier mht que j'ai trouvé sur vbfrance.Ce fic n'ete pas tres claire pour moi, allors j'ai essayé d'ecrire une deuxieme partis pour cette article , mais moi je l'ai ecris en text ("courrier new" pour avoir les tableau en ligne ).
Il s'agis de creer plussieurs *.wav, silence en 8 et 16 bit et un sinus en mono et stereo 8 et 16 bits. En plus il y a un wav d'origine (un ringtone).
Malleheureusement ce wav et le fichier mht sont assez lourds, peutetre vous n'avais pas bezoin de les telecharger hmhmhm.

Ammusez vous avec ce petit text.

A+
Guy van der velden

Source / Exemple :


'pour votre plaizier un des sub

Private Sub btnSinusStereo8_Click(ByVal sender As System.Object, _
                      ByVal e As System.EventArgs) Handles btnSinusStereo8.Click
  '
  Dim FreqL As Integer = 500   ' frequentie left =gauche
  Dim FreqR As Integer = 800   ' frequentie right = droite
  Dim SRate As Integer = 8000  ' sample frequence
  Dim Tsec As Integer = 1      ' laps de temps
  Dim BitR As Short = 8        ' resolution en  bits
  Dim MS As Short = 2          ' (1=mono, 2=stereo)

  '-----prepare headerfields --------
  F1 = "RIFF"
  F2 = F2                      ' not set yet 
  F3 = F3                      ' already set
  F4 = F4                      ' already set  
  F5 = 16                      ' fmtBlockLength
  F6 = 1                       ' 1=PCM classic, not compressed
  F7 = MS                      ' 1=mono, 2=stereo  
  F8 = SRate                   ' samplingRate(Frequency)
  F9 = MS * SRate * (BitR / 8) ' total number of bytes per sec
  F10 = MS * (BitR / 8)        ' BlockAlign
  F11 = BitR                   ' bits per sample ( resolution )
  F12 = "data"
  F13 = MS * (BitR / 8) * SRate * Tsec  ' dataBlock-length in bytes incl chr(0)
  F2 = F13 + 44 - 8            ' RiffBlock-length

  'Save de header
  FN = Application.StartupPath & "\SinusStereo8.wav"
  If Dir(FN, FileAttribute.Normal) <> "" Then Kill(FN)
  K1 = FreeFile()
  FileOpen(K1, FN, OpenMode.Binary)
  'header schrijven
  FilePut(K1, F1)    '  4 bytes
  FilePut(K1, F2)    '  4 b
  FilePut(K1, F3)    '  4 b
  FilePut(K1, F4)    '  4 b
  FilePut(K1, F5)    '  4 b
  FilePut(K1, F6)    '  2 b
  FilePut(K1, F7)    '  2 b
  FilePut(K1, F8)    '  4 b
  FilePut(K1, F9)    '  4 b
  FilePut(K1, F10)   '  2 b
  FilePut(K1, F11)   '  2 b
  FilePut(K1, F12)   '  4 b
  FilePut(K1, F13)   '  4 b 

  'save  data chunck
  ' 8 bits(= byte  0..255) le sinus = -127 .. +127, transformer en byte 0..255
  ' stereo  
  'taille du dataChunck F13, mais chaque echatillon compte un byte pour chaque canal
  'Je prefer compter en echantillon au lieu de octet.
  i2 = F8 * Tsec
  Dim Bt As Byte
  Const pi = 3.14
  Dim dL As Double = 2 * pi * FreqL / SRate
  Dim dR As Double = 2 * pi * FreqR / SRate
  Dim D1 As Double
  For i1 = 0 To i2 - 1
   D1 = 127 * Math.Sin(i1 * dL)
   Bt = CByte(D1 + 127)
   FilePut(K1, Bt)
   D1 = 127 * Math.Sin(i1 * dR)
   Bt = CByte(D1 + 127)
   FilePut(K1, Bt)
  Next
  FileClose(K1)
  MsgBox(FN & " is gesaved")
 End Sub

 Private Sub btnSilMono16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSilMono16.Click
  '
  Dim SRate As Integer = 8000  ' sample frequency
  Dim Tsec As Integer = 1      ' longueur du silence en secondes
  Dim BitR As Short = 16       ' resolution en  bits
  Dim MS As Short = 1          ' (1=mono, 2=stereo)
  Dim Bt As Byte

  '-----prepare headerfields --------
  F1 = "RIFF"
  F2 = F2                      ' not set yet 
  F3 = F3                      ' already set
  F4 = F4                      ' already set  
  F5 = 16                      ' fmtBlockLength
  F6 = 1                       ' 1=PCM classic, not compressed
  F7 = MS                      ' 1=mono, 2=stereo  
  F8 = SRate                   ' samplingRate(Frequency)
  F9 = MS * SRate * (BitR / 8) ' total number of bytes per sec
  F10 = MS * (BitR / 8)        ' BlockAlign
  F11 = BitR                   ' bits per sample ( resolution )
  F12 = "data"
  F13 = MS * (BitR / 8) * SRate * Tsec  ' dataBlock-length in bytes incl chr(0)
  F2 = F13 + 44 - 8            ' RiffBlock-length

  'Save de header
  FN = Application.StartupPath & "\SilStereo16.wav"
  If Dir(FN, FileAttribute.Normal) <> "" Then Kill(FN)
  K1 = FreeFile()
  FileOpen(K1, FN, OpenMode.Binary)
  'header schrijven
  FilePut(K1, F1)    '  4 bytes
  FilePut(K1, F2)    '  4 b
  FilePut(K1, F3)    '  4 b
  FilePut(K1, F4)    '  4 b
  FilePut(K1, F5)    '  4 b
  FilePut(K1, F6)    '  2 b
  FilePut(K1, F7)    '  2 b
  FilePut(K1, F8)    '  4 b
  FilePut(K1, F9)    '  4 b
  FilePut(K1, F10)   '  2 b
  FilePut(K1, F11)   '  2 b
  FilePut(K1, F12)   '  4 b
  FilePut(K1, F13)   '  4 b 

  'save nu de data chunck
  ' mono
  ' 16 bit  (= short -32768 <> +32767)
  ' nombres de short (16 bit) a ecrire = Srate * Tsec  
  i2 = Tsec * SRate
  'voire ici "entete.txt"
  Dim sh As Short ' 2 bytes 
  sh = 0
  For i1 = 0 To i2 - 1
   FilePut(K1, sh)
  Next
  FileClose(K1)
  MsgBox(FN & " is gesaved")
 End Sub

Conclusion :


Vous avez vu que la taille des fichiers wave sont assez lourds, mais j'espere que ce petit tutorial aidera au moins une personne, commeca j'aurai gagner mon paradis.
A+

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.