gpt4 book ai didi

midi - 如何将 Midi 事件发送到 C++ 中的软件合成器

转载 作者:行者123 更新时间:2023-12-01 02:44:25 25 4
gpt4 key购买 nike

嗨,寻求一些建议。我正在写一些音乐作曲软件。我拼凑了一些工具来读写和发送 midi 数据,它们工作正常。但是我遇到了以下问题:我正在尝试将 midi 事件发送到计算机上的 SW 合成器。

所以我可以从外部键盘控制 sw 合成器。我可以从我自己的电脑软件中控制键盘。但是如何让我的 sw 将 midi 发送到同一台计算机中的 sw 合成器。

如果可能的话,我也在尝试以独立于平台的方式来做到这一点。

谢谢!

虚拟人

我的问题不清楚。

所以我目前在Win7上运行。跨平台是一个优先事项,但不是第一个原型(prototype)。

具体来说,我的问题是访问 kontakt 播放器(v2),它可以在自己的环境和 midi IO 中工作。但我无法从我自己的软件中访问它。

midiOutGetNumDevs 只返回一个设备,它是 Microsoft GS Wavetable Synth。

我很困惑,我可以通过 midi/usb 电缆将 midi 发送到 kontakt 播放器,但它没有显示为 midi 设备。

我错过了什么?

谢谢

最佳答案

您使用的是哪个 API/操作系统?哪个SoftSynth?

简短的回答:您可以尝试“PortMidi”。

http://portmedia.sourceforge.net/

长(呃)答案:

我还没有找到任何能够与任何类型的 MIDI 接收器对话的跨平台 MIDI 库。事实上,这取决于软合成器用于接收 MIDI 事件的方式。

1) 在 Linux 上,您可以使用 ALSA 与 ALSA 合成器对话。 softsynth 可以将自己注册为 ALSA 接收器。您可以:
* 使用 ALSA 库连接以将 MIDI 事件发送到此接收器;
* 或者您可以将您的应用程序注册为 ALSA MIDI 源并使用另一个程序(aconnectgui、qjackctl、patchage)将其连接到任何接收器。

http://www.alsa-project.org/alsa-doc/alsa-lib/rawmidi.html

http://www.alsa-project.org/alsa-doc/alsa-lib/seq.html

缺点:特定于 Linux

2) 您可以将 JACK 用于 MIDI。与 ALSA MIDI 一样,应用程序可以注册 MIDI 源和接收器。你的 softsynth 可以注册为 JACK MIDI sink。然后你需要让你应用一个 JACK MIDI 源并将它们与另一个程序(qjackctl,patchage)连接起来。

http://jackaudio.org/files/docs/html/index.html

缺点:需要安装、配置、启动JACK

您有两种解决方案可以将 ALSA 接收器/源移动为 JACK 接收器/源:

  • 要么使用 JACK (commandline -Xseq) 的内置功能;
  • 或使用“a2jmidi”

  • 4) 在 MacOS 上,您可以使用 CoreAudio 进行 MIDI。我对此一无所知。

    5) 在 Windows 上,我猜你使用 midi* 函数

    6) 在其他一些操作系统上使用 OSS

    7) 使用套接字/协议(protocol)与合成器通信

    您可以让您的软件使用 MIDI/RTP 或 MIDI/UDP 发送 MIDI 事件,这样您就不必关心驱动程序/操作系统。大多数 softsynth 不会直接说出其中的任何一个,因此您需要一个程序来进行桥接(qmidinet 或其他)。

    8) PortMidi 是一个跨平台的 MIDI 库。但是,它似乎不能直接将 JACK 用作后端(但是,您可以使 ALSA 设备在 JACK 中可用,如上所述)。

    http://portmedia.sourceforge.net/

    例如,在 Linux 上,Fluidsynth 可以使用 ALSA、OSS 和 JACK 进行 MIDI 输入。 Timidity++ 可以使用 ALSA 和 Windows API。

    关于midi - 如何将 Midi 事件发送到 C++ 中的软件合成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7251721/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com