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.
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.