New plugin: Perfomix - a synchronized audio transition plugin for zynthian

Hi there,

I would like to present my new plugin called “Perfomix”.

It’s used for live transitions with a build in synchronized looper and several automated effects.
You can find the source code under GitHub - gitnob/Perfomix: Build-up audio effects with looper function. .
I’d need some testers to get some feedback, because I only used it for myself until now.
Attached you’ll find a teaser video which shows the main aspects of this lv2 plugin.
Until now I didn’t make an extensive tutorial about using the plugin, but if there is enough interest, it’ll come for sure.

Perfomix is a synchronized audio effects tool, which changes parameters of filters, modulators for a defined build-up time (automation). This produces some kind of transitions which are often used in electronic music production. This tool is meant to be a live performance helper.
It’s a similar tool like EZBot’s Performance mixer for the Octatrack - but for zynthian.

I developed this tool with puredata. The pd files then were precompiled to C files with the help of hvcc, which makes usage of the DPF framework. The final compilation results in the lv2 plugin.
I’ve made an installation script for zynthian where you can see, how the pd file is compiled to the lv2 plugin directly on zynthian.

If you use the installation script “install_Perfomix.sh” from the github page under scripts, please take notice, that the lv2 files will be installed under
$ZYNTHIAN_PLUGINS_DIR/lv2/Perfomix.lv2
The accompanying presets will be installed under
$ZYNTHIAN_DATA_DIR/presets/lv2/Perfomix_Default.preset.lv2

After installation you have to call “regenerate_engines_db.sh” and “regenerate_lv2_presets.sh” from the command line in zynthian’s terminal / or via ssh or via webconf.
If it is not working right out of the box, try to reboot first, because sometimes I also had to restart before I could use the plugin (although it should work). Good luck!

Regards

13 Likes

We will place zynthiverse before the relative consideration committee. They meet in an undisclosed tropical location at times of their own choosing to avoid security issues.

Frankly, I wouldn’t be hopeful, but if a little ‘influence’ were to be applied especially after your excellent overall contribution you might, and I do say might receive a grudging approval . . .

Of couse the lv2 contribution is sensational and the whole presentation is superb. Well done and thank you.

Hi @gitnob,

I installed it according to the instructions on github. No problem.

I’m trying it out, but so far I’ve come across the fact that when I get to the presets page, it just flashes and I’m returned to the plugin UI.

The combination of the loop, adjusting its size, and adding some effect is great. Kudos to you.

1 Like

Hi @ToFF ,
just to be sure, did you “regenerate_engines_db.sh” (obviously) and “regenerate_lv2_presets.sh” and possibly reboot?
I had some problems from time to time…
And thanks for the hint, how you installed it; I have to rewrite the github installation process, because on zynthian it’s much more easier by just running the script “install_Perfomix.sh”

Regards

Ah, I see. On github the installation of the default presets is not described.
Just do another cp command from the src base directory…

cp -r pd/Perfomix/Perfomix_Default.preset.lv2 $ZYNTHIAN_DATA_DIR/presets/lv2/

and then

regenerate_lv2_presets.sh

I hope this helps?
Regards

I tried it, after the first restart it didn’t seem to work. So to be safe I copied the preset ttl to zynthian_my_data/presets/lv2. I did the update presets again and rebooted. Now it works, but I don’t know what exactly worked :slight_smile:

I have a request, could the loop duration be made longer? EDIT: Add values ​​like 3,4,8,12,16 ?

EDIT2: The combination of Build-up/Length setting to 32 and Looper/Length value 2 will increase the total loop duration.

Well, in principal, it could be longer, but the memory size of the loop is dependent from rate (48000 Hz), tempo (lower tempo, higher memory consumption) and loop length.
To be on the safe side, I made a maximum of 2 bars (8 beats). For a stereo signal and 2 bars loop length at 20 bpm, this is 3 seconds per beat, hence 24 seconds to record, and thus 2x48000x24 = 2304000 bytes storage.
Because atm the plugin does not handle dynamic memory allocation in the code directly, I had to set an upper limit of memory, and hence, the looper is memory limited.
16 bars would mean another 8x higher memory consumption.

EDIT2: The combination of Build-up/Length setting to 32 and Looper/Length value 2 will increase the total loop duration.

To be more precise, there are two loop lengths, the buildup length (in number of beats, fx loop), and the audio loop (in bars).
Regards

I would probably fall asleep doing that :slight_smile: My bmp usually ranges somewhere between 100 - 160. But I accept this argument.

It would therefore be possible to increase the maximum buildup length to 4?

Hi @ToFF ,

beside falling asleep, this is an extreme case (probably for some ambient scores??).

I try to increase the maximum loop length to at least 4 bars, or better set a time limit to not be exceeded.

The buildup length is not a problem at all. What do you think, is a continuous beat length from 1 to 64 beats (8 bars) enough? What do you mean with buildup length of 4? It’s already there.

Regards

My mistake, I meant maximum loop length.

I adjusted some values of the loop lengths and the buildup length.
Loop length is measured in bars and ranges now from 1/64 to 8 bars, BUT the maximum of ~20 seconds must not be exceeded.
So at low bpm’s, check whether this limit will be reached.

@ToFF : checkout the repository with “git pull” in the (SRC)/pd/Perfomix folder to get the newest version.
Or even better, use the script in the repository under “scripts”.
The building needs hvcc (a python library), which is not actually under the virtual environment of zynthian. If you have any troubles, I’d be happy to help.

Regards

I updated the plugin, the README file on the github page, and also the looper length screen.
Especially the installation process should be very easy now (install the install_Perfomix.sh script into zynthians script/recipes directory).

The looper page now let you choose custom loop lengths by choosing the measure and the measure count.


For example, if you like to loop ofer 8 bars, you choose measure 1/2 and select measure count of 16. Or if you are working on a 9/8 loop - it’s possible.
:smile: Perhaps for @wyleu a nice playground (13/16 measure???)?

Maximum length of audio is still around 20 seconds, which should be big enough for short loops. The plugin does not want to substitute sooperlooper. Basic idea was to use it for transitions in electronic dance music, but it could be used for different purposes.

Tutorial will come.

I’d like to ask the developers, whether they would like to include this plugin into zynthian’s universe.

Regards

1 Like

Well done!

No rook soup for you tonight!

Ironically I’m transposing this for chiming bells . . .

Metronome set to 54 . . . .

2 Likes

Hi,
I used the steps in the chapter Detailed plugin update on github to upgrade. The plugin work wery well. I will be testing its capabilities in the next few days.

I have a few notes about the installation itself. Before a successful reinstall, I encountered these failed attempts:
In chapter * Easy way installing into zynthian’s environment*:
wrong path in code: cd $ZYNTHIAN_SYS/DIR/scripts/recipes correct is cd $ZYNTHIAN_SYS_DIR/scripts/recipes
Script ./install_Perfomix.sh ends with an error:

./install_Perfomix.sh: line 7: syntax error near unexpected token `newline'
./install_Perfomix.sh: line 7: `<!DOCTYPE html>'

This is where it ended in error error: externally-managed-environment

And one last note. I don’t know why, but the commands

regenerate_engines_db.sh
regenerate_lv2_presets.sh

don’t work for me. I used webconf.

@ToFF ,

thanks for the correction in the README description. :+1:
Updated it.

The second error you described occurs, if you download the github which shows the code. You have to download the raw version of the install_Perfomix.sh script.

wget https://github.com/gitnob/Perfomix/raw/refs/heads/main/scripts/install_Perfomix.sh

This should work, I just tested it twice.

To the regenerate commands…

And one last note. I don’t know why, but the commands

regenerate_engines_db.sh
regenerate_lv2_presets.sh

Why is it not working? I don’t know. It works for me in the terminal and on the ssh console.
Perhaps, you have deactivated the virtual environment of zynthian’s python?
Reactivate it by using

source /zynthian/venv/bin/activate

or reboot.

Regards and keep me informed.

I’ll try it out with the next update.

I had previously enabled venv. I don’t know why it didn’t work, it’s irrelevant. After reboot, commands from ssh connection work.

Once again, I have to repeat that the plugin is perfect and I recommend it to everyone to try.

Ran from webconf terminal.

type in

cd /~

This will take you to the home directory of the root user, which is what you are when you run zynthian Go to home directory root.

git clone GitHub - gitnob/Perfomix: Build-up audio effects with looper function.

It does.

A reboot…

webconf Engines finds it. So I enabled it.

And when you add a new component

And it loads into the Audio Effect/Modulation Bank (Cat 5) if you scroll around a bit…

It loads!

Didn’t need to concern myself with virtual environments as yet.

Hi @wyleu,

why did you find it under “Modulation”? Mine is under “Other”? I am using a V5. Is it because you are using V4 - shouldn’t be.
Regards

Not sure. I’m assuming a bit of default handling in the zynthian allocation end.
You could be right about V5 /V4.

It’s a purely zynthian analysis and categorisation I think.

But you can use webconf to change the category it’s in…

I’ve moved it to Delay and added it in series with the earlier instance.

so you can instantiate two instances.

And it’s already groaning under the weight of available options, Maybe recently enabled engines automatically into favourites?

This has prompted or renewed my interest in MIDI clock control from the GPS receiver I knocked together recently. It produces a MIDI note on the alternate second at the moment but it deserves to be rather more standard and controllable.

Time for me to make my GPS thingy produce a reference MIDI clock pulse for all this with lots of quarter note pulses and such like and the ability to control remotely from transport commands.

I’ll explain… promised
Regards