これは私の最初の投稿なので、台無しにしないことを願っています。
vb.net (宿題) でコンソール アプリとしてギター ヒーローのイケメンを作成していますが、いくつかの問題が発生しました。CarlsMidiTools を使用して、解析されたノート値をシンセに渡しています。でもバックグラウンドで伴奏も流したい。問題は、シンセ (標準の MS GS ウェーブテーブル) を共有可能モードにすることができないため、同時にこれらの 1 つしか動作できないことです。セカンダリ シンセも持っています。ノートをプライマリ シンセに、伴奏音楽をセカンダリ シンセに渡すと、機能するようになります。しかし、それは間違った解決策であり、潜在的なユーザーのためにセカンダリ シンセをダウンロードする必要があります。
CDドライブを開くためのコードで使用される「共有可能」を使用してこの行を見つけましたが、シーケンサーでは機能しないと思います。
mciSendString("open cdaudio alias cd wait shareable", 0, 0, 0)
TL;DR / 私の質問は、デフォルトのシンセを共有可能モードにして、carlsMidiTools lib コマンドと mciSendString 再生オプションをリッスンできるようにするにはどうすればよいですか?
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
このコードは、CarlsMidiTools 用に再度開こうとしたため、"Error opening MIDI port - device in use" をスローし、その後 guitar.mid の再生を開始しますが、"Inst.PlayNote(70, 127)" は機会を得られません。一言。