FR - MIDI I/O in Jack Connections Bay (Jorgen please read)

Official support for: energy-xt.com
RELATED
PRODUCTS

Post

Jorgen,
Would you please consider finalizing the code for jack.cpp so that Energy XT2 has a physical connection in Jack-Audio-Connection-Kit's Connection Bay?

I've posted a few times that my controller, a Novation 25LE, can be seen in Energy XT2, but I can't use it. If there was a "EnergyXT2" connection under "Alsa" in JACK, I would be able to connect to EnergyXT2, and use EnergyXT2 to its fullest extent.

I've noticed in the code, there is no Midi out:

Code: Select all

	// todo: midi out
jack.cpp doesn't seem to build a proper in interface for EnergyXT2 in JACK, and it would be nice to have such a thing. Please make this your next "Coming Next "feature"".

Thanks,
NexxuSix

Post

added to the main list

slainte :) rob

Post

Thanks! Hopefully this will get some priority, because it opens a lot of windows* for EnergyXT2.

-NexxuSix
Linux Musician

*You know the kind I'm talking about ;-)

Post

For me midi in works just fine with the libaam.so based on jack.cpp

Don't forget to set the checkmark at the Midiins in the setup!

As for midiout, do a google for midiout.so (which is a vst midiout plugin)
or drop me an email, if you need a modified midiout.so that also sends out
midiclock and midi start/stop/continue messages.

Note however that the plugin can only send out mididata at audiobuffer
boundaries. So you shouldn't use buffers bigger than 128 samples.

Post

Thanks for the plugins. For once, I can see EnergyXT2 in JACK's ALSA box, which is good. Although I can now connect the Novation 25LE to EnergyXT2, I'm still not able to use the Novation 25LE as a controller. I think it has something to do with the way the controller is represented. Here's why:

The Novation 25LE sets its self up a Windows Class Compliant USB Audio device in Windows. I think this is perhaps the reason why it is not properly recognized by EnergyXT2 (or jack.cpp???), because EnergyXT2 is expecting a MIDI device, not an Audio device as a MIDI input.

To add to the confusion, Renoise will detect the Novation 25LE as an Input (through JACK) and can use it as is. JACK can see my Novation 25LE with no problems... in fact, I can control a number of other synths, like Alsa Modular Synth, AmSynth, and ZynAddSubFX directly. I think it has something to do with the way jack.cpp sees the Novation 25LE controller.

I don't know if this helps any, but I have included a screen shot from Windows XP, showing how EnergyXT2 sees the Novation 25LE in Windows. As they say, a picture is worth a 1000 words...

http://www.geocities.com/nexxusix/WinEn ... apture.bmp

Post

Can you give a screenshot on how the midiports are seen in the midi tab of qjackctl?
And can you please test midiin of energyXT2 with the vkeybd (virtual midi keyboard)?
You have the midiin checked as in your win sceenshot?

Post

AKAIK, I have the proper inputs enabled... Here is another screenshot:

http://www.geocities.com/nexxusix/Energ ... MidiSo.jpg

The MIDI tab in Jack is empty... nothing... my Novation 25LE shows in ALSA. Maybe this is the problem?

Cheers,
NexxuSix

Post

Oh.. almost forgot... testing the MIDI in??? I don't have a virtual keyboard, other than Jack-keyboard, and that does show up on the MIDI tab of Jack.. but there is no way to connect that to the ALSA "side" to EnergyXT2...

As far as the Midi IN in Windows.. yes.. all of that works... it just doesnt work in Linux. (Meaning that, Energy works just fine, I just can't use my Novation 25LE with it...)

-NexxuSix

Post

Your setup looks ok. Really wierd. No idea why it doesn't work...

Post

Anyone wanna do a quick tutorial on how to send several midi channels from a native linux app, say renoise linux version, into eXT2 windows through wine, distributing those channels to different synths in the modular view?

I've been trying myself, but so far all midi is sent to all synths..

Post

Ok, i did some Bughunting. Seems to be either a bug inside energyXT2 or a
very nasty C++ Bug with newer gcc versions. I uploaded a jack.cpp file,
which does not use a c++ class for the midi in thread.

http://people.jacklab.net/drumfix/jack.cpp

Please try.

Post

I think this speaks for itself:
http://www.geocities.com/nexxusix/Worki ... on25LE.jpg

Thank you very much, DrumFix!!! =] I am very happy now, and truly appreciative of your work. I will thoroughly test this tomorrow night... and have a look at the code as well. I am curious as to what you've done to make this work properly?

Cheers,
NexxuSix

Post

The problem is the line

thread->execute();

which is sometimes called with the default virtual method and sometimes with
the overloaded procedure defined at the end of the file.
I'm not a c++ expert, maybe making the virtual procedure a pure virtual one may
solve the problem as well (but i didn't check this).

Post

So far, so good... I've tested a few of the main CC's and they respond to the Novation 25LE's knob and Modulation.

There is a minor problem with pitch bending...

When I call up a synth, and pitch bend it (up or down) the synth's pitch jumps down 1 Octave and doesn't respond to pitch bending anymore. It doesn't matter if I am using Energy XT2's native synth, or MDA's DX10 or JX10 synth (within Energy XT2), I get the same result.

Could this be buffering, or is this an internal issue with Energy XT2 (libaam interface?) understanding pitch bend data?

I did check this with Kmidimon, and ZynAddSubFX... but confirm that that the pitch bend works fine with the Novation 25LE, but for some reason, its a bit buggy with Energy XT2. I even tried assigning another controller to pitch in Energy XT2's midi CC patch bay and got the same results with the pitch jumping down one octave and staying there.

I'll keep testing here... but for now.. everything else is working great! Thanks again!!!

Cheers,
NexxuSix

Post

the problem is a semicolon on line 606 of that jack.cpp:

Code: Select all

    case SND_SEQ_EVENT_PITCHBEND:
      data = (0xE0 | ev->data.control.channel) |
              ((ev->data.control.value & 0x7f) << 8);
              (((ev->data.control.value >> 7) & 0x7f) << 16);
change that line to "((ev->data.control.value & 0x7f) << 8) |" and it should work better.
wrongtastic, baby
tucson's number one gothic rock band since 1995

Post Reply

Return to “energyXT”