Direct sound 7 : tutorial complet

Soyez le premier à donner votre avis sur cette source.

Snippet vu 18 323 fois - Téléchargée 48 fois

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

Ajouter un commentaire

Commentaires

cs_stefan13
Messages postés
6
Date d'inscription
samedi 14 octobre 2000
Statut
Membre
Dernière intervention
13 juin 2009
-
As tu rajouté

Imports Microsoft.DirectX
Imports Microsoft.DirectX.directsound

j'ai aussi une question, est il possible de sélection l'entrée que l'on souhaite utiliser microphone, entrée ligne, mixage... ?

merci par avance
medkar
Messages postés
2
Date d'inscription
dimanche 9 janvier 2005
Statut
Membre
Dernière intervention
29 décembre 2008
-
Je suis débutant.
Merci de m'aider pour résoudre ce message d'erreur sur la déclaration :
Public Directx as new DrectX7

Message d'erreur :
type défini par l'utilisateur non défini
bilaloch
Messages postés
556
Date d'inscription
lundi 6 octobre 2003
Statut
Membre
Dernière intervention
31 octobre 2019
-
ouai,"http//francis.dupont.free.fr/coindev/menu.htm"

BILALOCH
IIIBackSlashIII
Messages postés
3
Date d'inscription
lundi 29 décembre 2003
Statut
Membre
Dernière intervention
28 janvier 2004
-
Est-ce que quelqu'un saurait ou trouver un tut pour Direct3DSound?
Merci d'avance pour vos réponses nombreuses
cs_remi1203
Messages postés
42
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
5 novembre 2005
-
moi je réponds à la question de l'auteur. je vais pas détailler, mais pour lire un mp3, moi j'utilise active movie. Il lit aussi tous les formats assez connus (wav,mid,avi,mp3,mpg...)

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.