API WaveOut, selectionner une carte son

malo777 Messages postés 88 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 13 juin 2013 - 17 janv. 2013 à 00:35
malo777 Messages postés 88 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 13 juin 2013 - 20 janv. 2013 à 12:40
Bonsoir

J'ai réussi à lister les cartes son installées sur l'ordi dans un combobox et maintenant j'aimerais que l'utilisateur puissent choisir la carte son qui va servir à lire un fichier wav ou mp3 via l'ocx mediaplayer (msdxm.ocx)

J'ai bien essayé de mettre ça dans ComboAudioOUT_click :
OUT_DEVICE_ID = ComboAudioOUT.ListIndex

ou ça :
rc = waveOutOpen(hWaveIn, ComboAudioOUT.ListIndex, outFormat, 0, 0, 0)


Mais rien ne marche
Quelqu'un aurait la solution, je m'arrache les cheveux depuis quelques jours...

Merci de votre aide.


Malo




voici le contenu du module WaveOut

Type WAVEOUTCAPS
    wMid As Integer
    wPid As Integer
    vDriverVersion As Long
    szPname As String * 32
    dwFormats As Long
    wChannels As Integer
End Type

Public hWaveOut             As Long
Public OUT_BUFFER_SIZE      As Long
Public OUT_DEVICE_ID        As Long
Public outErrorMsg          As String * 200
Public outRes               As Long
Public outFormat            As WAVEFORMAT
Public outPlaying           As Boolean

Declare Function waveOutGetNumDevs Lib "winmm" () As Long
Declare Function waveOutGetDevCaps _
        Lib "winmm.dll" _
        Alias "waveOutGetDevCapsA" (ByVal uDeviceID As Long, _
                                    lpCaps As WAVEOUTCAPS, _
                                    ByVal uSize As Long) As Long
Declare Function waveOutOpen _
        Lib "winmm.dll" (lphWaveOut As Long, _
                         ByVal uDeviceID As Long, _
                         lpFormat As WAVEFORMAT, _
                         ByVal dwCallback As Long, _
                         ByVal dwInstance As Long, _
                         ByVal dwFlags As Long) As Long

Function GetOutDev(NameList() As String) As Long
    'recupère le nom des périph' de lecture audio
    'GetInDev renvoie la longueur de la liste
    'La liste NameList() contiendra le nom du(des) périph'
    Dim BufLng As Long
    Dim exeAPI As Long
    Dim CntDev As Long
    Dim Temp   As WAVEOUTCAPS
    Dim i      As Long

    'compte les périh disponibles
    CntDev = waveOutGetNumDevs
    
    If CntDev = 0 Then
        GetOutDev = 0
        Exit Function
    Else
        'listage des périh
        ReDim NameList(CntDev) As String
        BufLng = 46

        For i = 1 To CntDev
            Temp.szPname = ""
            exeAPI = waveOutGetDevCaps(i - 1, Temp, BufLng)
            'recupère le nom du périph
            NameList(i) = Left$(Temp.szPname, InStr(1, Temp.szPname, Chr$(0), vbBinaryCompare) - 1)
        Next i

        GetOutDev = CntDev
    End If

End Function

23 réponses

malo777 Messages postés 88 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 13 juin 2013 1
20 janv. 2013 à 00:16
Merci pour ta réponse ucfoutu.
Merci aussi banana32, même si les quelques dernières phrases me semble de trop.
Que fais tu sur ce forum si tu pense perdre du temps avec vb6?!

Bref, je vais regarder ce projet basé sur BASS.dll, je l'avait déjà regardé, mais peut-être pas assez.
Sinon tant pis, mon logiciel sera amputé d'une fonction.
0
Utilisateur anonyme
20 janv. 2013 à 00:50
Que fais tu sur ce forum si tu pense perdre du temps avec vb6?!
Je suis désolé de m'être immiscé dans cette discussion.
Sur le web, tu trouveras de la doc sur cette librairie (bass).

mon logiciel sera amputé d'une fonction
De quel type de logiciel s'agit-il ?
Pourquoi as-tu tant besoin d'utiliser deux cartes son simultanément ?
0
malo777 Messages postés 88 Date d'inscription jeudi 21 avril 2005 Statut Membre Dernière intervention 13 juin 2013 1
20 janv. 2013 à 12:40
Il s'agit d'un logiciel de balise radio pour radio amateur.
le but est de transmettre un message à intervalle régulier.
Certain radio amateur ont un pc dédié à la radio, dans ce cas, pas besoin de choisir la carte son, mais pour les autres il aurait été préférable de pouvoir choisir, pour pouvoir transmettre sur une carte pendant que l'autre fait son travail normal (sons windows, musiques, vidéos...)

Malo
0
Rejoignez-nous