Hello there
I’m trying to setup my Zynthian for a gig, i’m using Oram. My plan is to have a snapshot with all engines loaded and subsnapshots for sound loading and keyboard midi assignment & split.
I also wanted to have a effect chains (like reverb / delay / chorus) where i could route some chains to. Things are ok but I ran into some issues :
When I want to split the keyboard, for instance Pianoteq ch1 in one part and setBFree ch1 on another, I usually need to transpose to one or two octaves. when I do this, the note-off event of one part of the split (let’s say C4) can stop the note on the other split split (the C5 transposed one octave lower). It’s strange because the note-on doesn’t produce a sound on both engine, but the note-off cut both ?
when I send the signal out of a chain to my audio chain (with the reverb), it doesn’t seem to work. If i remove the send to main on the first chain I have no sound.
Any ideas on that ? Thanks
1 Like
ok, thanks to opencode (!) i managed to find the function where the event is transposed & filtered : **zynmidirouter.c, zmop_push_event
**
void zmop_push_event(struct zmop_st * zmop, jack_midi_event_t * ev) {if (!zmop)return;
uint8_t event_type = ev->buffer[0] >> 4;
uint8_t event_chan = ev->buffer[0] & 0x0F;
int event_num = -1;
if ((zmop->flags & FLAG_ZMOP_NOTERANGE) && (event_type == NOTE_OFF || event_type == NOTE_ON)) {
// Note-range & Transpose Note-on/off messages
int8_t offset;
event_num = ev->buffer[1];
// Note-off => Send the note-off with the same transpose value that the tracked note-on
if (event_type == NOTE_OFF) {
offset = zmop->note_transpose[event_num];
}
// Note-on
else {
// Note-range
if (event_num < zmop->note_low || event_num > zmop->note_high)
return; // Raw note out of range
// Transpose
offset = zmop->transpose_octave * 12 + zmop->transpose_semitone + global_transpose;
zmop->note_transpose[event_num] = offset;
}
// Transpose note event
int note = event_num + offset;
if (note > 0x7F || note < 0)
return; // Transposed note out of range
ev->buffer[1] = (uint8_t)(note & 0x7F);
}
…
It seems that te note off is not filtered or transposed, is there, which explain what is happening.
Is there a specific reason for that ?
i created an issue :
opened 05:34PM - 03 Jul 26 UTC
# Describe the issue
we have an active chain with a range and transpose event in… one channel and another chain with the same channel and another range with a transpose (let set 1 octave down)
if a key is pressed in the first part of the split, the note-off is also processed by the other part of the split.
# To Reproduce
set-up chain 1 on midi channel 1, range -> B2
set-up chain 2 on midi channel 1 range C3 -> ..., transpose one octave down
press keyboard on G2 (left split) and G3 (right split)
release G2 => G3 is also released
## Expected behaviour
note-off event shouln't be sent to chain 2
## Actual behaviour
the note-off event is never filtered according to range setup
# Screenshots
# Additional context
Add any other context about the problem here.
# Configuration
Oram 2601.1
## Hardware
```
Raspberry Pi 4 Model B Rev 1.5
Audio: V5 ADAC
Display: MIPI DSI 800x480 (inverted)
Wiring: V5
I2C: MCP23017@0x20, MCP23017@0x21
Profile: v5
```
## System
```
Debian GNU/Linux 12 (bookworm)
Build Date: 2025-05-30
Memory: 23% (894M/3791M)
Internal Storage: 15% (16G/117G ext4)
Temperature: 35.5ºC
Overclock: Maximum
USB/test: 2% (311M/30G fuseblk)
```
## MIDI & UI
```
Tuning: 440 Hz
Master Channel: 16
Preload Presets: On
ZS3 (SubSnapShots): On
Power Save: 10 minutes
Audio Levels on Snapshots: On
```
## Software
```
zyncoder: oram-2601.1 (ea17c87)
zynthian-ui: oram-2601.1 (37b776a)
zynthian-sys: oram-2601.1 (32ccae8)
zynthian-data: oram-2601.1 (781d76c)
zynthian-webconf: oram-2601.1 (0e2c255)
```
## Proposed modification :
we should modify
https://github.com/zynthian/zyncoder/blob/48b7d06dd80f795e9032bc24f4c3d6e4b37c2e59/zynmidirouter.c#L1712
and add
if (event_num < zmop->note_low || event_num > zmop->note_high)
return; // Raw note out of range
if the note-off part too
I will try to test if as soon as I have a cross-compiler suite
1 Like
You can compile on the Zynthian itself, no need for a cross-compiler.
Hi @MikeRodd !
Welcome again!
FYI, Oram is almost dead (EOL) and we are not fixing things unless they are really serious bugs.
I would kindly recommend you to test Vangelis . There is a test image you can download. Perhaps the issues you describe are fixed in Vangelis.
Regards!
Hi @MikeRodd
I just tested on Vangelis and the issue it’s not solved. Let me check your solution and i will fix it ASAP.
Thanks!
1 Like
Hi @MikeRodd !
Your proposed solution is perfect. Fixed in Vangelis and Oram (staging)!
Thanks!
2 Likes
Regarding this i would recommend you change to vangelis. Routing has been improved a lot and now you have mixbuses, for instance.
Regards,
2 Likes