这是我在这里的第一篇文章,所以我希望我不会把它搞砸。
我正在vb.net (家庭作业)中创建一个吉他英雄的瞬间作为控制台应用程序,我遇到了一些问题。我使用CarlsMidiTools将解析后的注释值传递给synth。但我也想在背景中播放伴奏音乐。问题是,我只能让其中一个同时工作,可能是因为我无法让我的synth (标准MS GS wavetable)进入可共享模式。我也有二级合成器,如果我把音符传给第一级,把伴奏音乐传给第二级,我就能让它工作。但这是错误的解决方案,需要为潜在用户下载二级合成。
我发现这一行使用了“可共享”,它在打开cd驱动器的代码中使用,但我猜它不适用于sequencer。
mciSendString("open cdaudio alias cd wait shareable", 0, 0, 0) TL;DR /我的问题是-如何将我的默认synth设置为可共享模式,以便它既可以监听carlsMidiTools库命令,也可以监听mciSendString play选项?
Module Module1
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer
Dim Inst As New CarlsMidiTools.Instrument
Sub Main()
'open midi
mciSendString("open ..\..\..\..\The_Unforgiven\guitar.mid type sequencer alias midi", 0, 0, 0)
'Play the midi
mciSendString("play midi", 0, 0, 0)
'set synth for CarlsMidiTools
Inst.OutputDeviceName = "Microsoft GS Wavetable Synth"
Inst.OutputChannel = 2
Inst.ChangePatchGM("Violin")
Inst.Volume = 127
Inst.NoteDuration = 0
Inst.Open()
Inst.PlayNote(70, 127)
'Incredible awful loop to simulate gameloop in real app and pause the program
For i As Integer = 0 To 2
i = i - 1
Next
End Sub
End Module此代码抛出“打开MIDI端口错误-设备正在使用”,因为我试图再次打开它的CarlsMidiTools,然后它开始播放guitar.mid,但"Inst.PlayNote(70,127)“将不会有机会说一个字。
发布于 2013-05-29 15:03:28
我不确定标准的MS GS波表,但对于真正的MIDI设备,这在Windows上是不可能的。
MIDI驱动程序不是多客户端的,它不能通过以下方式打开:
如果是第二种情况,则解决方案是在需要它的对象之间共享设备句柄。
https://stackoverflow.com/questions/16762318
复制相似问题