我已经使用 JAVA MIDI 工作了一段时间,并且偶然发现了一个问题。 我已经使用接收器、发送器方法链接了 MIDI 设备和 MPD带有音序器,然后将音序器链接到Java合成器。
我已经设法在单独的轨道上记录来自设备的数据,例如:
track[0] 有一些 Midi 事件
轨道[1]有一些 Midi 事件等。
问题是因为,如果一个音轨改变了声音 PROGRAM_CHANGE,那么当音序器开始播放时,所有音轨都会更改为该声音。我猜 MIDI 设备只使用 1 个 channel : channel 1 来传输声音。数据到音序器以及当音序器将数据写入音轨时,所有音轨都具有相同的 channel ,因此我无法使用不同的乐器演奏音轨。 “Record_Enable”仅适用于 channel 1(只有在那里我才能从设备向定序器获取数据)。 我认为有两种解决方案,但我不知道如何实现。
1.更改每个轨道的 channel 。
因此 track[0] 具有 channel 0 上的所有 MIDI 事件。
轨道[1]具有 channel 1上的所有MIDI事件。等等
2.让设备以某种方式向不同 channel 上的定序器发送数据。
最佳答案
要更改事件消息的 channel ,请使用 setMessage使用不同的 channel
参数。
对轨道中的所有事件执行此操作。
关于java - MIDI channel 轨道关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24254152/