helio-sequencer icon indicating copy to clipboard operation
helio-sequencer copied to clipboard

Midi Out

Open jiDOK opened this issue 5 years ago • 13 comments

Hi, awesome project! I really would like to use Helio as a way to sequence external synths. Is it possible to send the note and velocity data out a normal midi jack of an external sound card? I found the "MIDI Output" in the settings of a loaded VST plugin, but no way to configure the port etc. Thank you! J

jiDOK avatar Nov 30 '19 10:11 jiDOK

There are a few plugins out there that allow you to send MIDI from the host to physical or virtual devices. So it is already possible to do this, it is just not integrated directly into helio.

falkTX avatar Jul 02 '20 21:07 falkTX

Agreed, the project seems great, but I've also been puzzled as to why this wouldn't be integrated into the app. I will search out plugins to handle this as you suggest.

adadu avatar Nov 08 '20 02:11 adadu

What are these mysterious plugins?

io7m avatar Jan 07 '21 15:01 io7m

The only thing I've found so far is https://github.com/RomanKubiak/ctrlr

But both helio and carla don't seem to recognise it on my system.

tinkerlevu avatar Jan 23 '21 09:01 tinkerlevu

OMG OMG..! I FINALLY Found Something That Works!!!

https://github.com/falkTX/JackAss

(its only for Jack Audio soo...) ¯\_(ツ)_/¯

tinkerlevu avatar Feb 21 '21 17:02 tinkerlevu

Native MIDI out of Helio would be great!

Cris-- avatar Apr 10 '21 17:04 Cris--

How can midi out be obtained on iPad and MacOS? MIDI in is found by usb but out not. It would allow me to use my Synth, Helio would then be perfekt for me

stbernhard avatar May 08 '21 16:05 stbernhard

After I finally found out a microtonal piano roll, it turned out that is has no MIDI out. But it's there where the microtonality is implemented in my case. This app looks great but useless for me because of such a trivial detail.

d01010101 avatar Apr 03 '22 12:04 d01010101

There is a VST called Ctrlr but Helio refuses to recognize it under Ubuntu.

d01010101 avatar Apr 03 '22 12:04 d01010101

I guess that the built-in instrument could be a good base for a new one which would simply forward to a system port the MIDI ON/OFF messages.

There are two source files BuiltInSynthAudioPlugin.cpp and BuiltInSynth.cpp which look like an interface and an implementation, respectively. The first one calls renderNextBlock(AudioSampleBuffer&, MidiBuffer&, int, int). The called method is a part of JUCE/Synthesizer. The built-in instrument does not override it, but instead renderNextBlock(AudioBuffer& outputBuffer, int startSample, int numSamples), possibly called via the first mentioned method in order to obtain audio samples.

Maybe, it would be enough to override renderNextBlock(AudioSampleBuffer&, MidiBuffer&, int, int) instead and make it write to a hardware port. Which in turn seems easy enough: JUCE/handling midi events.

d01010101 avatar Apr 03 '22 13:04 d01010101

Please check the development build, I've added this option in the audio settings section:

send-midi

If you want to forward MIDI messages to the device without using any audio plugins inside the app, you'll need to set up an instrument, which acts as a proxy: first, create an instrument from any available plugin (e.g. the "Helio Default" one), go to routing page, remove the central node and connect the "Mini In" node directly to "Midi Out" node. Then assign this instrument to your track(s).

midi-in-midi-out

Not super convenient (hopefully I'll come up with some simpler approach someday), but this way you'll be able to map the MIDI keyboard in any way you want, or create several instruments with different MIDI mappings to be used in different tracks.

If I'm missing anything here, let me know.

peterrudenko avatar Apr 10 '22 09:04 peterrudenko

I had problems compiling on Ubuntu 20.04.

Apart from the dependencies listed in Basic build instructions, also the packages juce-modules-source and libtsl-hopscotch-map-dev are required. This still produces ../../Source/Common.h:56:10: fatal error: ../../ThirdParty/HopscotchMap/include/tsl/hopscotch_set.h: No such file or directory so the respective include statements should be changed to #include <tsl/hopscotch*.h>. But then, a lot errors which looked like version mismatches were produced, for example

Compiling UnityBuild.cpp
In file included from ../Projucer/JuceLibraryCode/UnityBuild.cpp:11:
../../Source/Core/../../Source/Core/Audio/BuiltIn/BuiltInSynthAudioPlugin.cpp: In member function ‘virtual void BuiltInSynthAudioPlugin::fillInPluginDescription(juce::PluginDescription&) const’:
../../Source/Core/../../Source/Core/Audio/BuiltIn/BuiltInSynthAudioPlugin.cpp:36:17: error: ‘class juce::PluginDescription’ has no member named ‘uniqueId’
   36 |     description.uniqueId = description.name.hashCode();
      |                 ^~~~~~~~

So for now, I cannot check if the upgrade works in Ubuntu, but I guess it does and as of me, it probably solves the problem.

d01010101 avatar Apr 10 '22 13:04 d01010101

@d01010101, the repo has a couple of submodules, which you need to initialize/update first (or just clone it with --recursive flag). Also fwiw, here are pre-built binaries of the development branch: https://ci.helio.fm/helio-dev-x64.AppImage https://ci.helio.fm/helio-dev-x64.tar.gz

peterrudenko avatar Apr 11 '22 13:04 peterrudenko