通过 MacOS 上的端口将 MIDI 数据发送到数码钢琴
Posted
技术标签:
【中文标题】通过 MacOS 上的端口将 MIDI 数据发送到数码钢琴【英文标题】:Send MIDI data via port on MacOS to Digital Piano 【发布时间】:2021-04-06 14:06:50 【问题描述】:我想通过端口从我的计算机(运行 MacOS)将 MIDI 数据发送到我的数码钢琴。 我希望能够播放 MIDI 文件,在特定时长内播放特定音符,并可能更换乐器。
我完全不知道如何实现这一点,也无法在网上找到任何资源。 请提供您的解决方案的代码,因为这将有很大帮助。
我正在使用 USB-to-Host 来发送数据 --> 不确定这是否意味着什么。
【问题讨论】:
请使用tour、阅读what's on-topic here、How to Ask和question checklist,并提供minimal reproducible example。 “为我实现此功能”与此站点无关。你必须诚实地尝试,然后就你的算法或技术提出一个具体问题。 【参考方案1】:不确定这是否是一个体面的堆栈溢出问题。互联网上有很多关于 MIDI 的资源。
搜索“Python MIDI”会显示此 repo python-midi。
如果您阅读自述文件,它似乎可以做您想做的事。
【讨论】:
不幸的是,这不是我想要的,因为它不能通过端口播放。【参考方案2】:手动使用 Garageband:
-
将数码钢琴连接到计算机 (MacOS) 并打开两者。
使用 Garageband 打开 MIDI 文件,MacOS 设备上通常提供该文件。
然后转到 Gargageband->Preferences->'Audio/Midi'->'Output Device' 下拉菜单
如果数码钢琴被电脑识别,它应该在下拉列表中列出。选择它。
单击 Garageband 上的“播放”图标。 MIDI 文件应使用来自数码钢琴的输出播放。
以编程方式使用 Mido:
将数码钢琴连接到计算机(MacOS)并打开两者。
安装 mido python 包pip install mido
获取 mido 识别的 midi 端口列表:python -c "import mido; print(mido.get_output_names())"
输出应该类似于:['Digital Keyboard', 'IAC Driver Bus 1']
在本例中,“数字键盘”是您的键盘。 您的实际键盘可能有不同的名称。 注意:“IAC Driver Bus 1”是标准 MacOS MIDI 输出端口。
通过将“数字键盘”更改为 mido 在 #3 中显示的键盘名称来更新以下 play-midi.py 脚本。将 *.mid 文件更新为 *.mid 文件的名称。
import mido
# This will list the available ports
print(mido.get_output_names())
# Open the midi link to your keyboard
outport = mido.open_output('Digital Keyboard')
# Open the mid file to be played
mid = mido.MidiFile('my_midi_file.mid', clip=True)
# Play the file out to your keyboard
for msg in mid.play():
outport.send(msg)
-
运行脚本。声音应该会从您的键盘中播放出来。
Mido 参考资源:
https://github.com/mido/midohttps://mido.readthedocs.io/en/latest/midi_files.html
【讨论】:
鉴于这是一个以编程为中心的网站,我严重怀疑 OP 是否可以接受非编程方法以上是关于通过 MacOS 上的端口将 MIDI 数据发送到数码钢琴的主要内容,如果未能解决你的问题,请参考以下文章