pantherb / setBfree

DSP tonewheel organ
http://setbfree.org
GNU General Public License v2.0
194 stars 35 forks source link

Add MIDI out (notify) to command line version #49

Closed brunetton closed 6 years ago

brunetton commented 6 years ago

Hi,

I will be using setBfree on stage in a few weeks ! I installed it on a Raspberry, and, as my midi controller doesn't have physical drawbar, I added a cheap Android tablet that access via local Wi-Fi an instance of Open Stage Control configured correctly to command drawbars and switches. For now, everything is doing well, and I'm very enthusiastic ! But to be really usable I need a "feedback" from setBfree on program changes. I configured 20 programs, inspired from the great popular.pgm. When I load a program I need the drawbars to move on the tablet and the buttons to activate, to see the current status of the organ and be able to change slightly the sound from this starting point. It works quite well on the UI version, that exposes a notify MIDI out channel (I understand this was added when porting to LV2 plugin): I can see my buttons light on and "drawbars" (that are actually just linear faders for now) moving; but command line version does not exposes any out channel.

I'm saying to myself that it shouldn't be very hard to add it to command line version, as the code is already here. Maybe I'm totally wrong, I didn't dove onto the code deep.

I'm bad at C++ programming, I didn't done it since I was 16 and it would take me too much time to do this :( Is it something you think of implement one day ?

Thanks for your time ! And of course, all of it will be an open source project; explaining how to configure a Pi to get an Hammond, with optional Wifi device to control drawbars and switches, with live performances videos (Blues and swing) ! I'll let you informed.

x42 commented 6 years ago

This is very cool!

The GUI version is actually a LV2 plugin (run in a small included LV2 host) -Do you have jalv (JAck LV2 host) available on the RPi? Perhaps just run the plugin version head-less? jalv http://gareus.org/oss/lv2/b_synth (that's similar to what http://moddevices.com/ and http://zynthian.org/ do)

Can O-S-C respond to MIDI feedback or do you need OSC?

So far there are no plans to add a MIDI-output, but as you said, it's probably not so much work to do so.

Enable the debug-print and check: https://github.com/pantherb/setBfree/blob/master/src/midi.c#L454 for a start.

The main issue will probably be thread-safety. I'm not sure which threads can invoke this callback with the standalone jack app. If I remember correctly, initialization will also call this as will the jack-process callback later.

x42 commented 6 years ago

If you have a minute to test, the recent git version now does send midi-feedback (jack-midi only).

brunetton commented 6 years ago

Thanks Robin !

I indeed planned to try LV2 version with Jalv. I've seen you mention it on the documentation. If it is not available on Raspbian, this is not a problem, I'll compile it. All the sound stack I'm using is from last git versions (including setbfree). I didn't tried it for now, because I don't see yet how to pass the conf and program files to setbfree through jalv (I didn't took time to search).

Hopefully O-S-C responds well to MIDI feedback. That's what I wanted to say when I wrote

It works quite well on the UI version, that exposes a notify MIDI out channel

(unless for whirl controller that don't seems to emit any feedback, I'll test again and open an other bug for that)

My next steps :

Thanks for the debug hook tip. Maybe it should go to a "contribute" section of the Readme!

I'll let you informed. Thanks again!

x42 commented 6 years ago

how to pass the conf and program files to setbfree through jalv (I didn't took time to search).

You cannot pass them directly. The plugin does however use default.cfg and default.pgm from $HOME/.config/setBfree/ if those files exist. and you can save/load the complete state as plugin-preset.

Anyway, recent setBfree git (9309bd4f9df02e99) does have a MIDI output, and you may not need the plugin at all.

PS. What Revision of the Raspberry Pi are you using? Recent RPi do however have proper hardware accelerated openGL support. Just using actual Xorg (but no screen connected) may perform better than emulated software GL with Xvfb. Are you using a USB soundcard?

jofemodo commented 6 years ago

Hi Bruno!

Here jofemodo from zynthian project. Nice to meet you ;-)

We've successfully integrated setBree in our meta-engine, including "feedback" of drawbar and other parameters when loading "presets" with MIDI program change.

What we do is parsing the config file where programs are defined, so when we send a program change, we almost-know the final status of setBfree after loading the program. Well, it's not completely true, but it works quite well.

Of course, a true feedback system, based in MIDI or other method (OSC, CLI, ...) would be a lot better and more robust.

Anyway, you can take a look to our code here:

https://github.com/zynthian/zynthian-ui/blob/master/zyngine/zynthian_engine_setbfree.py

Kind Regards,

El 24/03/18 a las 11:36, Bruno Duyé escribió:

Hi,

I will be using setBfree on stage in a few weeks ! I installed it on a Raspberry, and, as my midi controller doesn't have physical drawbar, I added a cheap Android tablet who access an instance of Open Stage Control http://osc.ammd.net/ configured correctly to command drawbars and switches. For now, everything is doing well, and I'm very enthusiastic ! But to be really usable I need a "feedback" from setBfree on program changes. I configured 20 programs, inspired from the great popular.pgm https://github.com/pantherb/setBfree/blob/master/pgm/popular.pgm and when I load a program I need the drawbars to move on the tablet and the buttons to activate, to see the current status of the organ and be able to change slightly the sound from this starting point. It works quite well on the UI version, that exposes a |notify| MIDI out channel (I understand this was added when porting to LV2 plugin): I can see my buttons light on and "drawbars" (that are actually just linear faders for now) moving; but command line version does not exposes any out channel.

I'm saying to myself that it shouldn't be very hard to add it to command line version, as the code is already here. Maybe I'm totally wrong, I didn't dove onto the code deep.

I'm bad at C++ programming, I didn't done it since I was 16 and it would take me too much time to do this :( Is it something you think of implement one day ?

Thanks for your time ! And of course, all of it will be an open source project; explaining how to configure a Pi to get an Hammond, with optional Wifi device to control drawbars and switches, with live performances videos (Blues and swing) ! I'll let you informed.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/pantherb/setBfree/issues/49, or mute the thread https://github.com/notifications/unsubscribe-auth/AAy8zdBvmmYoNXfyQWbTUak7A2JnNoXRks5thiGygaJpZM4S5r84.

-- José Fernando Moyano Dominguez

jofemodo commented 6 years ago

El 24/03/18 a las 17:22, Robin Gareus escribió:

This is very cool!

The GUI version is actually a LV2 plugin (run in a small included LV2 host) -Do you have jalv (JAck LV2 host) available on the RPi? Perhaps just run the plugin version head-less? |jalv http://gareus.org/oss/lv2/b_synth| (that's similar to what http://moddevices.com/ and http://zynthian.org/ do)

Well, that's not completely accurate. Zynthian project uses the "standalone" version of setBfree ... perhaps we should change ;-)

Regards, -- José Fernando Moyano Dominguez

x42 commented 6 years ago

Well, that's not completely accurate. Zynthian project uses the "standalone" version of setBfree ... perhaps we should change ;-)

OK. I wrongly assumed you're using the hacked version: https://discourse.zynthian.org/t/adding-lv2-controllers-for-setbfree-drawbars/313 -- nevermind

jofemodo commented 6 years ago

We are using it as LV2 plugin for MOD-UI.

FYI, zynthian UI is a "meta-engine" that run synth engines and creates a common minimal interface for all of them.

Currently we have integrated the next engines:

So, you can run setBfree as a native zynthian engine or you can create a MOD-UI pedalboard using the LV2 version of setBfree (or the hacked version, setBfreak).

Of course, the standalone version is better integrated, but creating a MOD-UI pedalboard could be a good idea in some cases. It depends of your needs.

Regards,

El 26/03/18 a las 16:22, Robin Gareus escribió:

Well, that's not completely accurate. Zynthian project uses the
"standalone" version of setBfree ... perhaps we should change ;-)

OK. I wrongly assumed you're using the hacked version: https://discourse.zynthian.org/t/adding-lv2-controllers-for-setbfree-drawbars/313 -- nevermind

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/pantherb/setBfree/issues/49#issuecomment-376183230, or mute the thread https://github.com/notifications/unsubscribe-auth/AAy8zWuRyvoAU3kxwLfFHxPkqey7Pik4ks5tiPmdgaJpZM4S5r84.

-- José Fernando Moyano Dominguez

brunetton commented 6 years ago

Thanks very much @x42 for this commit; it's very promising ! After some first tests, it seems that there's some little bugs with MIDI feedback. I'll open some bugs and try LV2 plugin. @jofemodo, I know zynthian of course, didn't knew that Pianoteq was added. I'll try it one day, this is great. Didn't knew setBfreak fork.