Как указать звуковую карту для использования с API mciSendString - PullRequest
2 голосов
/ 04 июня 2011

Я обновляю старое приложение VB6. В свое время я закодировал оболочку для команды mciSendString, чтобы иметь возможность записывать и воспроизводить аудио. В то время компьютеры обычно имели одну звуковую карту.

Теперь у многих клиентов есть несколько звуковых карт (обычно встроенная и USB-гарнитура).

Я не могу найти API, чтобы указать, какую звуковую карту использовать с mciSendString. Может ли кто-нибудь указать мне правильное направление?

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

Пожалуйста, проверьте несколько решений здесь с исходным кодом (Ergebnisse des Wettbewerbs / German) http://www.activevb.de/rubriken/wettbewerbe/2009_september/comp_2009_september_mp3_player.html

Вот какой-то источник моего проекта

''' <summary>
''' Return all audio devices by names
''' </summary>
Private Function ListSoundDevices(ByRef LDev As List(Of String)) As Boolean

    Dim intItem As New Integer
    Dim intNext As New Integer
    Dim intCount As New Integer
    Dim tWIC As New WaveInCaps
    Dim Enc As System.Text.ASCIIEncoding = New System.Text.ASCIIEncoding()
    Dim res As Boolean = False

    Try
        'Throw New Exception("test")
        intCount = waveInGetNumDevs()
    Catch ex As Exception
        'no devices found
        Return False
    End Try

    If intCount <> 0 Then
        For intItem = 0 To intCount - 1
            If waveInGetDevCaps(intItem, tWIC, Marshal.SizeOf(tWIC)) = MMSYSERR_NOERROR Then
                If (tWIC.Formats And WAVE_FORMAT_4S16) = WAVE_FORMAT_4S16 Then
                    If LDev Is Nothing Then LDev = New List(Of String)
                    Dim B() As Byte = System.Text.Encoding.Default.GetBytes(tWIC.ProductName.ToString.ToCharArray)
                    LDev.Add(Enc.GetString(B, 0, B.Length))
                    intNext += 1
                End If
            End If
        Next

        If intNext > 0 Then res = True
    End If

    Return res
End Function

Используйте идентификатор устройства для начала записи и использования. Надеюсь, это поможет

1 голос
/ 10 ноября 2012

Microsoft предоставила ответ .

Чтобы установить устройство WaveAudio (звуковую карту), используемое мультимедийным элементом управления, необходимо использовать API mciSendCommand. Управление мультимедиа напрямую не предоставляет метод, позволяющий вам установить устройство, используемое для воспроизведения или записи.

Dim parms As MCI_WAVE_SET_PARMS
Dim rc As Long

' Specify the soundcard. This specifies the soundcard with a deviceID
' of 0. If you have a single soundcard, then this will open it. If you
' have multiple soundcards, the deviceIDs will be 0, 1, 2, etc.
parms.wOutput = 0

' Send the MCI command to set the output device.
rc = mciSendCommand(MMControl1.DeviceID, MCI_SET, MCI_WAVE_OUTPUT, parms)
...