首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打开可共享的Midi synth设备

打开可共享的Midi synth设备
EN

Stack Overflow用户
提问于 2013-05-27 02:24:25
回答 1查看 497关注 0票数 2

这是我在这里的第一篇文章,所以我希望我不会把它搞砸。

我正在vb.net (家庭作业)中创建一个吉他英雄的瞬间作为控制台应用程序,我遇到了一些问题。我使用CarlsMidiTools将解析后的注释值传递给synth。但我也想在背景中播放伴奏音乐。问题是,我只能让其中一个同时工作,可能是因为我无法让我的synth (标准MS GS wavetable)进入可共享模式。我也有二级合成器,如果我把音符传给第一级,把伴奏音乐传给第二级,我就能让它工作。但这是错误的解决方案,需要为潜在用户下载二级合成。

我发现这一行使用了“可共享”,它在打开cd驱动器的代码中使用,但我猜它不适用于sequencer。

代码语言:javascript
复制
mciSendString("open cdaudio alias cd wait shareable", 0, 0, 0) 

TL;DR /我的问题是-如何将我的默认synth设置为可共享模式,以便它既可以监听carlsMidiTools库命令,也可以监听mciSendString play选项?

代码语言:javascript
复制
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)“将不会有机会说一个字。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-29 15:03:28

我不确定标准的MS GS波表,但对于真正的MIDI设备,这在Windows上是不可能的。

MIDI驱动程序不是多客户端的,它不能通过以下方式打开:

  • 多个应用程序同时在同一应用程序中多次

如果是第二种情况,则解决方案是在需要它的对象之间共享设备句柄。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16762318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档