【问题标题】:How to send NRPN messages with pygame midi如何使用 pygame midi 发送 NRPN 消息
【发布时间】:2017-05-06 15:55:47
【问题描述】:

我正在编写一个程序,该程序将从只能发送 cc 的设备读取传入的 cc 消息,并将其作为 nrpn 消息发送到另一台设备。我知道如何从 pygame 发送 cc 消息,但我不知道如何发送 nrpn。我查看了 Vriareon 代码,我没有看到它甚至可以访问 midi。谁能举例说明这是如何做到的?

谢谢!

【问题讨论】:

  • NRPN CC。
  • 正确。我不明白的是控制消息使用什么数字。如果我有 cc 编号 17,我可以执行以下操作:“self.midi_out.write_short(0xb0, 17, 123)”。当 NRPN 看起来像这样“0:15”时,如何处理正确的 NRPN?

标签: python pygame midi


【解决方案1】:

NRPN 消息 CC 消息。

但是,NRPN 号码与 CC 号码不同。 MIDI specification 说:

控制器编号 6(数据输入),与控制器编号 96(数据递增)、97(数据递减)、98(未注册参数编号 LSB)、99(未注册参数编号 MSB)、100( Registered Parameter Number LSB)和 101(Registered Parameter Number MSB)扩展了通过 MIDI 可用的控制器数量。首先使用控制器 98 和 99 或 100 和 101 选择要编辑的参数编号,然后使用控制器编号 6、96 或 97 调整该参数的数据值来传输参数数据。

要更改像音量 (7) 这样的控制器,您需要发送一条消息:

B0 07 xx

要更改 NRPN,请先选择 NRPN:

B0 63 mm
B0 62 ll

然后用数据输入控制器改变当前选中的NRPN:

B0 06 mm
B0 26 ll  (optional, for 14-bit values)

因此,可以通过以下方式将 NRPN 0:1 设置为 42:

self.midi_out.write_short(0xb0, 0x63, 0)
self.midi_out.write_short(0xb0, 0x62, 1)
self.midi_out.write_short(0xb0, 0x06, 42)

【讨论】:

  • 感谢您的详细回答!很抱歉没有掌握这一点。当我发送 cc 消息时,我使用一个数字作为 cc,一个数字作为它的值,我可以使用 pygame 的 write_short 方法来做到这一点。 pygame 代码中的 NRPN 更改消息会是什么样子?我会使用 pygame 的 write() 方法并将所有这些值包含在消息数组中吗?
  • 这些是您要发送的字节数。
  • 很抱歉,我很难理解这一点。我不明白这在代码中会是什么样子。也许如果我能看到一个例子,这对我来说会更有意义。我正在使用以这种格式显示 nrpns 的数据图表“env 2 攻击,NRPN - 0:1, 0 – 127”。我不知道符号“0:1”如何转化为我在 NRPN 上阅读的任何信息。另一件事是,当我使用 write_short() 方法时,我向它发送了 3 个参数。似乎一条 nrpn 消息需要更多参数,我不知道它应该是什么样子。
  • 我刚刚看到你的代码示例。现在完全有道理!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 2015-03-23
相关资源
最近更新 更多