begin process at 2008 08 21 14:55:40
1 229 428 membres
248 nouveaux aujourd'hui
14 263 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DIRECT SOUND 7 : TUTORIAL COMPLET


Information sur la source

Catégorie :Direct X Niveau : Débutant Date de création : 16/01/2002 Date de mise à jour : 19/01/2002 15:44:22 Vu : 11 424

Note :
8,33 / 10 - par 3 personnes
8,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note

Description

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

  • 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
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.
  • signaler à un administrateur
    Commentaire de DxuTAleX le 17/01/2002 14:44:08

    Laissez moi des commentaires svp...

  • signaler à un administrateur
    Commentaire de FScorpion le 18/01/2002 07:18:19

    Bien et très claire.
    7/10

  • signaler à un administrateur
    Commentaire de SamSagace le 18/01/2002 15:51:37

    Merci, enfin une introduction claire à DirectSound en français, je commençais à désespérer...
    Pourrais-tu expliquer comment on fait pour jouer deux wave en même temps et pour jouer sur le volume de chacun d'eux?

  • signaler à un administrateur
    Commentaire de vanpet le 18/01/2002 22:14:46

    pour controler le volume, le panorama(gauche droite) et la frequence, il faut utiliser les fonctions setvolume, setpan, setfrequency... mais attention ce code est du DX7 et on est en 2002, à l'euro... et au DX8 !!! (grosses modifs')

  • signaler à un administrateur
    Commentaire de SamSagace le 21/01/2002 09:59:58

    OK Vanpet, où peut-on trouver une intro à DX8 (en français si possible)?

  • signaler à un administrateur
    Commentaire de DxuTAleX le 21/01/2002 10:08:16

    &gt;vanpet
    Je vois pas en quoi DirectX 7 est dépassé...et ça marche toujours aussi bien!

  • signaler à un administrateur
    Commentaire de SamSagace le 22/01/2002 11:01:28

    D'accord les gars, mais je ne sais toujours pas jouer deux wave en même temps...

  • signaler à un administrateur
    Commentaire de DxuTAleX le 22/01/2002 12:53:05

    &gt;SamSagace
    Le truc, ça doit etre de créé plusieurs Buffer DirectSound, et de les faires jouer en meme temps, tu fait comme ça (je suis pas sur):

    'ici i représente le nb de buffers à créé
    Dim DSBuffer(1 to i)

    'ici i représente l' index du buffer qui est chargé
    Set DSBuffer(i) = DS.CreateSoundBufferFromFile(File, bufferDesc, waveFormat)

    'ici i représente l' index du buffer qui va etre joué
    DSBuffer(i).Play DSBPLAY_DEFAULT

    Voila
    A+

  • signaler à un administrateur
    Commentaire de vanpet le 04/02/2002 17:59:22

    dans dx8, tu sais controler DIRECTEMENT via dx des effets spéciaux du genre distortion phazer, echo, etc...
    dans dx7 c pas possible !
    un truc qui est mieux dans dx7 c que wav et midi sont clairement séparés.
    bon, ca chacun ses gouts.
    sinon, pour jouer plusieurs sons en même temps sam, va voir ma source : BEATBOX BETA
    c un début de boite a rythme, te focalise pas sur le programme mais juste sur le fait que tu sais jouer plusieurs sons en même temps !
    @+
    ps : pour trouver une intro a dx8, va sur gamedev.net (en english) et pour le francais, utilise msdn de microsoft (je parie que tu trouve ca nul) : alors apprends l'anglais ;-)

  • signaler à un administrateur
    Commentaire de Arnaud le 11/03/2002 23:20:25

    Pour jouer plusieur sons a la fois vous pouvez voir ma sources (dx7 et dx8 ) avec des buffers http://www.vbfrance.com/article.asp?Val=3376

  • signaler à un administrateur
    Commentaire de Nil le 21/06/2002 16:20:20

    Source quasiement parfaite pour les Wave (*met 9 à cause du multi-son*) comment on fait pour les MIDs ?

  • signaler à un administrateur
    Commentaire de legamer le 25/10/2002 11:47:44

    whouai ! pas mal mais y'a des lignes inutiles

    il faudrait aussi dire comment faire jouer 2 wave à la fois

  • signaler à un administrateur
    Commentaire de itzamna8000 le 19/11/2002 16:41:15

    J'ai eu un peu peur en lisant le message de "vanpet" à propos des effets... Rassurez-moi, il est bien possible de gérer des effets simples (reverb, delay, etc.) via DirectX 7 ? Je m'y suis lancé, la structure d'un prog que g commencé est en DX7... Ca me ferait assez râler...

    J'ai une question qui n'a rien à voir : comment pouvoir connaître la longueur d'un wav en millisecondes ???

    Merci à tous ceux qui peuvent m'aider.

  • signaler à un administrateur
    Commentaire de peponr le 22/01/2003 19:55:48

    Bien merci tres intéressant ! Mais un p'tit zipounet serai sympatoches :)

  • signaler à un administrateur
    Commentaire de remi1203 le 19/04/2003 13:14:48

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

  • signaler à un administrateur
    Commentaire de IIIBackSlashIII le 05/01/2004 18:44:07

    Est-ce que quelqu'un saurait ou trouver un tut pour Direct3DSound?
    Merci d'avance pour vos réponses nombreuses

  • signaler à un administrateur
    Commentaire de bilaloch le 03/02/2004 19:43:26

    ouai,"http//francis.dupont.free.fr/coindev/menu.htm"

    BILALOCH

  • signaler à un administrateur
    Commentaire de medkar le 25/11/2007 14:33:00

    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

  • signaler à un administrateur
    Commentaire de stefan13 le 28/11/2007 11:37:31

    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  

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS