Questions for a live setup

Hello there :slight_smile:
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 :slight_smile:

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 :

I will try to test if as soon as I have a cross-compiler suite :slight_smile:

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