colinmc.dev - a blog by Colin McGivern

Poly Effects Beebo - Enabling Guitarix LV2 plugins

Poly Effects Beebo - Enabling Guitarix LV2 plugins

Beebo comes bundled with some of the Guitarix LV2 plugins found here: https://github.com/brummer10/guitarix/tree/master/trunk/src/LV2

Here are the steps to enable them, based on the guide over at https://github.com/polyeffects/digit_ui/blob/master/add-module.md

Steps

Connect Beebo to your network

Use a USB ethernet adapter to connect Beebo to your network. Once connected you will be able to see the IP address assigned to Beebo in Settings -> QA Check. Tap IP in the bottom left corner.

Add plugin config to module_info.py

For this you can use a tool like FileZilla and connect to Beebo via SFTP.

User: debian
Password: temppwd

Transfer ~/UI/module_info.py to your local machine and add the plugin config to effect_type_maps and effect_prototypes_models_all.

It should look something like this:

effect_type_maps = {
"beebo" : {
// current plugins already listed here
'simple_amplifier': 'http://lv2plug.in/plugins/eg-amp',
'gx_big_muff_pi': 'http://guitarix.sourceforge.net/plugins/gx_bmp_#_bmp_',
'gx_boss_ds1': 'http://guitarix.sourceforge.net/plugins/gx_bossds1_#_bossds1_',
'gx_chorus_stereo': 'http://guitarix.sourceforge.net/plugins/gx_chorus_stereo#_chorus_stereo',
'gx_compressor': 'http://guitarix.sourceforge.net/plugins/gx_compressor#_compressor',
'gx_colorsound_tonebender': 'http://guitarix.sourceforge.net/plugins/gx_cstb_#_cstb_',
'gx_fuzzmaster': 'http://guitarix.sourceforge.net/plugins/gx_fumaster_#_fumaster_',
'gx_fuzz_face': 'http://guitarix.sourceforge.net/plugins/gx_fuzzface_#_fuzzface_',
'gx_fuzz_face_fuller': 'http://guitarix.sourceforge.net/plugins/gx_fuzzfacefm_#_fuzzfacefm_',
'gx_crybaby_gcb_95': 'http://guitarix.sourceforge.net/plugins/gx_gcb_95_#_gcb_95_',
'gx_hornet_fuzz': 'http://guitarix.sourceforge.net/plugins/gx_hornet_#_hornet_',
'gx_muff': 'http://guitarix.sourceforge.net/plugins/gx_muff_#_muff_',
'gx_mxr_distortion': 'http://guitarix.sourceforge.net/plugins/gx_mxrdist_#_mxrdist_',
'gx_oc_2': 'http://guitarix.sourceforge.net/plugins/gx_oc_2_#_oc_2_',
'gx_scream': 'http://guitarix.sourceforge.net/plugins/gx_scream_#_scream_',
'gx_ts_9': 'http://guitarix.sourceforge.net/plugins/gxts9#ts9sim',
}
}

and

effect_prototypes_models_all = {
// existing definitions here
'simple_amplifier': {
'category': 0,
'controls': {
'gain': ['gain', 0.0, -90.0, 24.0]
},
'description': 'Simple Amplifier.',
'inputs': {'in': ['In', 'AudioPort']},
'long_description': '',
'tags': {'effect', 'pedal'},
'outputs': {'out': ['Out', 'AudioPort']}
},
'gx_big_muff_pi': {
'category': 0,
'controls': {
'SUSTAIN': ['SUSTAIN', 0.5, 0.0, 1.0],
'TONE': ['TONE', 0.5, 0.0, 1.0],
'VOLUME': ['VOLUME', 0.5, 0.0, 1.0]
},
'description': 'Guitarix Big Muff Pi.',
'inputs': {'in': ['In', 'AudioPort']},
'long_description': '',
'tags': {'effect', 'pedal'},
'outputs': {'out': ['Out', 'AudioPort']}
},
'gx_boss_ds1': {
'category': 0,
'controls': {
'LEVEL': ['LEVEL', -2.0, -20.0, 12.0],
'TONE': ['TONE', 0.5, 0.0, 1.0],
'DRIVE': ['DRIVE', 0.5, 0.0, 1.0]
},
'description': 'Guitarix Boss DS1.',
'inputs': {'in': ['In', 'AudioPort']},
'long_description': '',
'tags': {'effect', 'pedal'},
'outputs': {'out': ['Out', 'AudioPort']}
},
'gx_chorus_stereo': {
'category': 0,
'controls': {
'level': ['level', 0.5, 0.0, 1.0],
'delay': ['delay', 0.02, 0.0, 0.2],
'depth': ['depth', 0.02, 0.0, 1.0],
'freq': ['freq', 3.0, 0.01, 10.0]
},
'description': 'Guitarix Boss DS1.',
'inputs': {
'in': ['In', 'AudioPort'],
'in1': ['In1', 'AudioPort']
},
'long_description': '',
'tags': {'effect', 'pedal'},
'outputs': {
'out': ['Out', 'AudioPort'],
'out1': ['Out1', 'AudioPort']
}
},
'gx_compressor': {
'category': 0,
'controls': {
'RATIO': ['RATIO', 2.0, 1.0, 20.0],
'KNEE': ['KNEE', 3.0, 0.0, 20.0],
'THRESHOLD': ['THRESHOLD', -20.0, -96.0, 10.0],
'RELEASE': ['RELEASE', 0.5, 0.0, 10.0],
'ATTACK': ['ATTACK', 0.002, 0.0, 1.0],
},
'description': 'Guitarix Compressor.',
'inputs': {'in': ['In', 'AudioPort']},
'long_description': '',
'tags': {'effect', 'pedal'},
'outputs': {'out': ['Out', 'AudioPort']}
},
'gx_colorsound_tonebender': {
'category': 0,
'controls': {
'ATTACK': ['ATTACK', 0.5, 0.0, 0.95],
'LEVEL': ['LEVEL', 0.2, 0.0, 1.0],
'WET_DRY': ['WET_DRY', 100.0, 0.0, 100.0],
},
'description': 'Guitarix ColorSound Tonebender.',
'inputs': {'in': ['In', 'AudioPort']},
'long_description': '',
'tags': {'effect', 'pedal'},
'outputs': {'out': ['Out', 'AudioPort']}
},
'gx_fuzzmaster': {
'category': 0,
'controls': {
'TONE': ['TONE', 0.5, 0.0, 1.0],
'VOLUME': ['VOLUME', 0.1, 0.0, 1.0],
'WET_DRY': ['WET_DRY', 100.0, 0.0, 100.0],
},
'description': 'Guitarix FuzzMaster.',
'inputs': {'in': ['In', 'AudioPort']},
'long_description': '',
'tags': {'effect', 'pedal'},
'outputs': {'out': ['Out', 'AudioPort']}
},
'gx_fuzz_face': {
'category': 0,
'controls': {
'FUZZ': ['FUZZ', 0.5, 0.0, 1.0],
'LEVEL': ['LEVEL', 0.5, 0.0, 1.0]},
'description': 'Guitarix Fuzz Face.',
'inputs': {'in': ['In', 'AudioPort']},
'long_description': '',
'tags': {'effect', 'pedal'},
'outputs': {'out': ['Out', 'AudioPort']}
},
'gx_fuzz_face_fuller': {
'category': 0,
'controls': {
'DRIVE': ['DRIVE', 0.5, 0.0, 1.0],
'FUZZ': ['FUZZ', 0.5, 0.0, 1.0],
'INPUT': ['INPUT', 0.5, 0.0, 1.0],
'LEVEL': ['LEVEL', 0.5, 0.0, 1.0]},
'description': 'Guitarix Fuzz Face Fuller.',
'inputs': {'in': ['In', 'AudioPort']},
'long_description': '',
'tags': {'effect', 'pedal'},
'outputs': {'out': ['Out', 'AudioPort']}
},
'gx_crybaby_gcb_95': {
'category': 0,
'controls': {
'VOLUME': ['VOLUME', 0.5, -20, 4.0],
'HOTPOTZ': ['HOTPOTZ', 0.5, 0.0, 1.0],
},
'description': 'Guitarix Crybaby GCB 95.',
'inputs': {'in': ['In', 'AudioPort']},
'long_description': '',
'tags': {'effect', 'pedal'},
'outputs': {'out': ['Out', 'AudioPort']}
},
'gx_hornet_fuzz': {
'category': 0,
'controls': {
'FUZZ': ['FUZZ', 0.5, 0.0, 1.0],
'SUSTAIN': ['SUSTAIN', 0.5, 0.0, 1.0],
'VOLUME': ['VOLUME', 0.5, 0.0, 1.0],
},
'description': 'Guitarix Hornet Fuzz.',
'inputs': {'in': ['In', 'AudioPort']},
'long_description': '',
'tags': {'effect', 'pedal'},
'outputs': {'out': ['Out', 'AudioPort']}
},
'gx_muff': {
'category': 0,
'controls': {
'TONE': ['TONE', 0.5, 0.0, 1.0],
'VOLUME': ['VOLUME', 0.5, 0.0, 1.0],
},
'description': 'Guitarix Muff.',
'inputs': {'in': ['In', 'AudioPort']},
'long_description': '',
'tags': {'effect', 'pedal'},
'outputs': {'out': ['Out', 'AudioPort']}
},
'gx_mxr_distortion': {
'category': 0,
'controls': {
'VOLUME': ['VOLUME', 0.5, 0.0, 1.0],
'DRIVE': ['DRIVE', 0.5, 0.0, 1.0],
},
'description': 'Guitarix MXR Distortion.',
'inputs': {'in': ['In', 'AudioPort']},
'long_description': '',
'tags': {'effect', 'pedal'},
'outputs': {'out': ['Out', 'AudioPort']}
},
'gx_oc_2': {
'category': 0,
'controls': {
'DIRECT': ['DIRECT', 0.5, 0.0, 1.0],
'OCTAVE1': ['OCTAVE1', 0.5, 0.0, 1.0],
'OCTAVE2': ['OCTAVE2', 0.5, 0.0, 1.0],
},
'description': 'Guitarix Boss OC-2.',
'inputs': {'in': ['In', 'AudioPort']},
'long_description': '',
'tags': {'effect', 'pedal'},
'outputs': {'out': ['Out', 'AudioPort']}
},
'gx_scream': {
'category': 0,
'controls': {
'SCREAM': ['SCREAM', 0.5, 0.0, 1.0],
},
'description': 'Guitarix Electro-Harmonix Screaming Bird.',
'inputs': {'in': ['In', 'AudioPort']},
'long_description': '',
'tags': {'effect', 'pedal'},
'outputs': {'out': ['Out', 'AudioPort']}
},
'gx_ts_9': {
'category': 0,
'controls': {
'fslider0_': ['Level', -16.0, -20.0, 4.0],
'fslider1_': ['Tone', 400.0, 100.0, 1000.0],
'fslider2_': ['Drive', 0.5, 0.0, 1.0],
},
'description': 'Guitarix Ibanez TS-9.',
'inputs': {'in': ['In', 'AudioPort']},
'long_description': '',
'tags': {'effect', 'pedal'},
'outputs': {'out': ['Out', 'AudioPort']}
},
}

Once the changes have been made, upload module_info.py back to Beebo.

Enable the plugins

Before we can see the new plugins in the UI we first need to perform the following steps.

Open your favourite terminal and login to Beebo:

temppwd

Run ~/UI/effect_proto_to_js.py - this will rebuild ~/UI/qml/module_info.js which is required for the plugins to show correctly in the UI.

debian@pine64so:~$ cd UI
debian@pine64so:~/UI$ sudo python effect_proto_to_js.py

Check the changes

Restart the following services to see your changes take effect:

debian@pine64so:~/UI$ sudo systemctl restart ingen.service
debian@pine64so:~/UI$ sudo systemctl restart polyui.service

At this point you should be able to see the new plugins in the Add Module section in Beebo, but when Beebo is powered down these changes will be lost. This is great for debugging but long term we'll need to make these changes persist.

Persist the changes

As Beebo operates with a read-only filesystem, we need to perform some extra steps to make our changes permanent.

We can do this by running the following:

debian@pine64so:~/UI$ sudo mount -o remount,rw /media/root-ro/overlay/lower/
debian@pine64so:~/UI$ sudo cp module_info.py /media/root-ro/overlay/lower/home/debian/UI
debian@pine64so:~/UI$ sudo cp ./qml/module_info.js /media/root-ro/overlay/lower/home/debian/UI/qml
debian@pine64so:~/UI$ sync

That's it! Your changes should be persisted and you should now be able to access these extra plugins in the Add Module section in the Beebo UI.

Enjoy!

This post is also available to view as a gist on github https://gist.github.com/colmcgiv/d04b825ca92999f2c134b2ae77369e26