如何指定与mciSendString API一起使用的声卡

时间:2011-06-04 06:34:59

标签: winapi vb6 audio mcisendstring

我正在更新一个旧的VB6应用程序。回到白天,我在mciSendString命令周围编写了一个包装器,以便能够录制和播放音频。那时,计算机通常只有一个声卡。

现在,许多客户拥有多个声卡(通常是内置声卡和USB耳机)。

我似乎无法找到API来指定与mciSendString一起使用的声卡。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

请使用sourcecode(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

使用设备ID开始记录和使用。 希望有所帮助

答案 1 :(得分:1)

Microsoft提供了answer

  

要设置Multimedia Control使用的WaveAudio设备(声卡),您必须使用mciSendCommand API。多媒体控制不直接提供一种方法来让您设置用于播放或录制的设备。

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)