Direct sound 7 : tutorial complet

Contenu du snippet

Voila un petit tutorial pour le module Direct Sound de DirectX 7.
Ce module est assez simple a utilisé par rapport a DirectDraw ou Direct 3D. Pour commencer, on va apprendre a lire un fichier .WAV, j' espère bientot trouver le moyen de lire les fichiers .MP3.

1° Déclarer DirectSound

Les déclarations obligatoires:

Déclare l' objet DirectX
Public DirectX As New DirectX7

Déclare l' objet Direct Sound
Public DS As DirectSound

Déclare le buffer, la ou on va mettre le son en mémoire, pour qu 'il soit utilisable par DirectSound.
Public DSBuffer As DirectSoundBuffer

2° Créé l' objet DS

Set DS = DirectX.DirectSoundCreate("")

Utilise une Form pour créé l' objet.
DS.SetCooperativeLevel Form1.hWnd, DSSCL_PRIORITY

3° La fonction de lecture

Créé bufferDesc, le buffer principale
Dim bufferDesc As DSBUFFERDESC

Le code qui suis, difficile à comprendre, sert à informer DirectSound que l' on va utiliser le format .WAV, et créé le son à partir d' 1 fichier.
Dim waveFormat As WAVEFORMATEX
bufferDesc.lFlags = DSBCAPS_CTRLFREQUENCY Or DSBCAPS_CTRLPAN Or DSBCAPS_CTRLVOLUME Or DSBCAPS_STATIC
waveFormat.nFormatTag = WAVE_FORMAT_PCM
waveFormat.nChannels = 2
waveFormat.lSamplesPerSec = 22050
waveFormat.nBitsPerSample = 16
waveFormat.nBlockAlign = waveFormat.nBitsPerSample / 8 * waveFormat.nChannels
waveFormat.lAvgBytesPerSec = waveFormat.lSamplesPerSec * waveFormat.nBlockAlign

Ici, on charge le fichier dans le buffer, et on lance la lecture.
Set DSBuffer = DS.CreateSoundBufferFromFile(File, bufferDesc, waveFormat)

4° Fonctions complémentaires

Pour stoper la lecture
DSBuffer.Stop

Pour lire
DSBuffer.Play DSBPLAY_DEFAULT

Voila comme on me l' a demandé une fonction pour changer le volume:

Il faut utilisé l' instruction SetVolume sur le Buffer DS.

Le volume du Buffer doit theoriquement etre compris entre 0 (max) et
-5000 (min), ici il y a une fonction de régulation.

Function Volume(vol As Long)
If vol > 0 Then vol = 0
If vol < -5000 Then vol = -5000
DSBuffer.SetVolume vol
End Function

Bon, si on resume, voila le code:

Source / Exemple :


Public DirectX As New DirectX7
Public DS As DirectSound
Public DSBuffer As DirectSoundBuffer

Private Sub Form_Load()
Set DS = DirectX.DirectSoundCreate("")
DS.SetCooperativeLevel Form1.hWnd, DSSCL_PRIORITY
End Sub

Sub LoadWave(File as String)
    Dim bufferDesc As DSBUFFERDESC
    Dim waveFormat As WAVEFORMATEX
    bufferDesc.lFlags = DSBCAPS_CTRLFREQUENCY Or DSBCAPS_CTRLPAN Or DSBCAPS_CTRLVOLUME Or DSBCAPS_STATIC
  
    waveFormat.nFormatTag = WAVE_FORMAT_PCM
    waveFormat.nChannels = 2
    waveFormat.lSamplesPerSec = 22050
    waveFormat.nBitsPerSample = 16
    waveFormat.nBlockAlign = waveFormat.nBitsPerSample / 8 * waveFormat.nChannels
    waveFormat.lAvgBytesPerSec = waveFormat.lSamplesPerSec * waveFormat.nBlockAlign

    Set DSBuffer = DS.CreateSoundBufferFromFile(File, bufferDesc, waveFormat)
End Sub

Sub DSStop ()
DSBuffer.Stop
End Sub

Sub DSPlay ()
DSBuffer.Play DSBPLAY_DEFAULT
End Sub 

Function Volume(vol As Long)
If vol > 0 Then vol = 0
If vol < -5000 Then vol = -5000
DSBuffer.SetVolume vol
End Function

Conclusion :


Vooooila, c' est tout pour aujourd' hui, j' essairais de rajouter des codes plus compliqués ou un ZIP si on me le demande.

Pour utiliser la fonction:
LoadWave NomDuFichier

Si vous remarquez des Bugs, Mailez moi.

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.