Stuttter

Hi @Rom

Fixed, you’ll find a STUTT2Mono here:

3 Likes

thanks a lot !!!

@zwabo, yesterday I tried to edit the .ttl file using Winscp into my Mod Duo X.
What I found was that there also was a .ttl file with the cozmic name in the Stutter lv2 folder. So there was three ttl files there. But even though one of them had the cozmic name, the actual content of the file was exactly the same as the stutter ttl file.

So I removed the cozmic one and tried to do the updates to the stutter ttl file to get toggled switches instead, and the div L and div R to be lists instead of values (like in your demo).

But even though updating the ttl file and rebooting, the gui looks still the same, everything is still only knobs.

Any ideas? Do I need to refresh the plugin manually somehow?

Hi,
Yes, I know, the beta store upload was not done correctly, unfortunately there is nothing I can do about it…
I would try to :

  • remove zwabo-cozmic_dsp.ttl
  • replace the content of the zwabo-stuttter_dsp.ttl with the content of my STUTTTER_dsp.ttl file here:
  • reboot your MDX

(This was made for the Dwarf but maybe it’ll work for the MDX …)

2 Likes

Thanks for the suggestion. I will try it out this evening.

Doing a manual compare it seems that it is only these that differ:

From Mod audio github:
image
and
image

From your Github:
image
and
image

Hopefully it as simple as that :crossed_fingers:

1 Like

And when it’s done don’t forget to reset your browser’s cache.

1 Like

I never did this yesterday. Wonder if cache is the issue in my case :thinking: Will test and report back.
Thanks for assisting, really appreciated!

1 Like

Success! Sharing this here so that other Mod Duo X users can make the edits if they so wish to get the GUI working correctly.

  1. Download the beta plugin through the plugin store.
  2. Close the MOD browser GUI if open (not sure if this is necessary, but I had issues accessing the MOD after WinSCP:ing to it when the GUI was open)
  3. Use WinSCP to access the .lv2 folder inside the MDX (see other threads for exact steps)
  4. Go to the zwabo-stuttter.lv2 folder and delete the zwabo-cozmic_dsp.ttl.
    You should be left with only two .ttl files, modgui.ttl and the one called zwabo-stutter_dsp.ttl.
  5. Replace the content of the zwabo-stutter_dsp.ttl with this:
@prefix doap:  <http://usefulinc.com/ns/doap#> .
@prefix foaf:  <http://xmlns.com/foaf/0.1/> .
@prefix lv2:   <http://lv2plug.in/ns/lv2core#> .
@prefix midi:  <http://lv2plug.in/ns/ext/midi#> .
@prefix mod:   <http://moddevices.com/ns/mod#> .
@prefix opts:  <http://lv2plug.in/ns/ext/options#> .
@prefix pg:    <http://lv2plug.in/ns/ext/port-groups#> .
@prefix patch: <http://lv2plug.in/ns/ext/patch#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rsz:  <http://lv2plug.in/ns/ext/resize-port#> .
@prefix spdx:  <http://spdx.org/rdf/terms#> .
@prefix units: <http://lv2plug.in/ns/extensions/units#> .
@prefix time: <http://lv2plug.in/ns/ext/time#> .

<urn:maxgen:zwabo:stutter>
    a lv2:DelayPlugin, lv2:Plugin, doap:Project ;

    lv2:extensionData opts:interface ;

    lv2:optionalFeature <http://lv2plug.in/ns/lv2core#hardRTCapable> ,
                        <http://lv2plug.in/ns/ext/buf-size#boundedBlockLength> ;

    lv2:requiredFeature opts:options ,
                        <http://lv2plug.in/ns/ext/urid#map> ;

    opts:supportedOption <http://lv2plug.in/ns/ext/buf-size#nominalBlockLength> ,
                         <http://lv2plug.in/ns/ext/buf-size#maxBlockLength> ,
                         <http://lv2plug.in/ns/ext/parameters#sampleRate> ;

    lv2:port [
        a lv2:InputPort, lv2:AudioPort ;
        lv2:index 0 ;
        lv2:symbol "lv2_audio_in_1" ;
        lv2:name "Audio Input 1" ;
    ] ,
    [
        a lv2:InputPort, lv2:AudioPort ;
        lv2:index 1 ;
        lv2:symbol "lv2_audio_in_2" ;
        lv2:name "Audio Input 2" ;
    ] ;

    lv2:port [
        a lv2:OutputPort, lv2:AudioPort ;
        lv2:index 2 ;
        lv2:symbol "lv2_audio_out_1" ;
        lv2:name "Audio Output 1" ;
    ] ,
    [
        a lv2:OutputPort, lv2:AudioPort ;
        lv2:index 3 ;
        lv2:symbol "lv2_audio_out_2" ;
        lv2:name "Audio Output 2" ;
    ] ;

    lv2:port [
        a lv2:InputPort, lv2:ControlPort ;
        lv2:index 4 ;
        lv2:name "BPM" ;
        lv2:symbol "BPM" ;
        lv2:default 120 ;
        lv2:minimum 20 ;
        lv2:maximum 280 ;
	lv2:portProperty  mod:tempoRelatedDynamicScalePoints;
    ] ,
    [
        a lv2:InputPort, lv2:ControlPort ;
        lv2:index 5 ;
        lv2:name "DOUBLE" ;
        lv2:symbol "DOUBLE" ;
        lv2:default 0 ;
        lv2:minimum 0 ;
        lv2:maximum 1 ;
	lv2:portProperty lv2:toggled;
    ] ,
    [
        a lv2:InputPort, lv2:ControlPort ;
        lv2:index 6 ;
        lv2:name "Div_L" ;
        lv2:symbol "Div_L" ;
        lv2:default 1 ;
        lv2:minimum 1 ;
        lv2:maximum 10 ;
	lv2:portProperty lv2:integer;
        lv2:portProperty lv2:enumeration ;    
        lv2:scalePoint [rdfs:label "1/4note"; rdf:value 1];
        lv2:scalePoint [rdfs:label "Dotted1/8note"; rdf:value 2];
        lv2:scalePoint [rdfs:label "1/4notetriplets"; rdf:value 3];
        lv2:scalePoint [rdfs:label "1/8note"; rdf:value 4];
        lv2:scalePoint [rdfs:label "1/8notetriplets"; rdf:value 5];
        lv2:scalePoint [rdfs:label "Dotted1/16note"; rdf:value 6];
        lv2:scalePoint [rdfs:label "5tuplet"; rdf:value 7];
        lv2:scalePoint [rdfs:label "7tuplet"; rdf:value 8];
        lv2:scalePoint [rdfs:label "9tuplet"; rdf:value 9];
        lv2:scalePoint [rdfs:label "11tuplet"; rdf:value 10];

    ] ,
    [
        a lv2:InputPort, lv2:ControlPort ;
        lv2:index 7 ;
        lv2:name "Div_R" ;
        lv2:symbol "Div_R" ;
        lv2:default 3 ;
        lv2:minimum 1 ;
        lv2:maximum 10 ;
	lv2:portProperty lv2:integer;
        lv2:portProperty lv2:enumeration ;    
        lv2:scalePoint [rdfs:label "1/4note"; rdf:value 1];
        lv2:scalePoint [rdfs:label "Dotted1/8note"; rdf:value 2];
        lv2:scalePoint [rdfs:label "1/4notetriplets"; rdf:value 3];
        lv2:scalePoint [rdfs:label "1/8note"; rdf:value 4];
        lv2:scalePoint [rdfs:label "1/8notetriplets"; rdf:value 5];
        lv2:scalePoint [rdfs:label "Dotted1/16note"; rdf:value 6];
        lv2:scalePoint [rdfs:label "5tuplet"; rdf:value 7];
        lv2:scalePoint [rdfs:label "7tuplet"; rdf:value 8];
        lv2:scalePoint [rdfs:label "9tuplet"; rdf:value 9];
        lv2:scalePoint [rdfs:label "11tuplet"; rdf:value 10];

    ] ,
    [
        a lv2:InputPort, lv2:ControlPort ;
        lv2:index 8 ;
        lv2:name "ENV_ms" ;
        lv2:symbol "ENV_ms" ;
        lv2:default 1 ;
        lv2:minimum 0 ;
        lv2:maximum 500 ;
    ] ,
    [
        a lv2:InputPort, lv2:ControlPort ;
        lv2:index 9 ;
        lv2:name "Filter_R" ;
        lv2:symbol "Filter_R" ;
        lv2:default 0 ;
        lv2:minimum -100 ;
        lv2:maximum 100 ;
    ] ,
    [
        a lv2:OutputPort, lv2:ControlPort ;
        lv2:index 10 ;
        lv2:name "LEFT" ;
        lv2:symbol "LEFT" ;
        lv2:default 0 ;
        lv2:minimum 0 ;
        lv2:maximum 1 ;
    ] ,
    [
        a lv2:InputPort, lv2:ControlPort ;
        lv2:index 11 ;
        lv2:name "RANDOM" ;
        lv2:symbol "RANDOM" ;
        lv2:default 0 ;
        lv2:minimum 0 ;
        lv2:maximum 1 ;
	lv2:portProperty lv2:toggled;
    ] ,
    [
        a lv2:InputPort, lv2:ControlPort ;
        lv2:index 12 ;
        lv2:name "RANGE" ;
        lv2:symbol "RANGE" ;
        lv2:default 5 ;
        lv2:minimum 1 ;
        lv2:maximum 10 ;
    ] ,
    [
        a lv2:OutputPort, lv2:ControlPort ;
        lv2:index 13 ;
        lv2:name "RIGHT" ;
        lv2:symbol "RIGHT" ;
        lv2:default 0 ;
        lv2:minimum 0 ;
        lv2:maximum 1 ;
    ] ,
    [
        a lv2:InputPort, lv2:ControlPort ;
        lv2:index 14 ;
        lv2:name "Tail" ;
        lv2:symbol "Tail" ;
        lv2:default 0 ;
        lv2:minimum 0 ;
        lv2:maximum 1 ;
    ] ,
    [
        a lv2:InputPort, lv2:ControlPort ;
        lv2:index 15 ;
        lv2:name "dry_wet" ;
        lv2:symbol "dry_wet" ;
        lv2:default 0.5 ;
        lv2:minimum 0 ;
        lv2:maximum 1 ;
    ] ,
    [
        a lv2:InputPort, lv2:ControlPort ;
        lv2:index 16 ;
        lv2:name "reverse" ;
        lv2:symbol "reverse" ;
        lv2:default 0 ;
        lv2:minimum 0 ;
        lv2:maximum 1 ;
	lv2:portProperty lv2:toggled;
    ] ,
    [
        a lv2:InputPort, lv2:ControlPort ;
        lv2:index 17 ;
        lv2:name "speed" ;
        lv2:symbol "speed" ;
        lv2:default 1 ;
        lv2:minimum 0.009 ;
        lv2:maximum 2 ;
    ] ,
    [
        a lv2:InputPort, lv2:ControlPort ;
        lv2:index 18 ;
        lv2:name "ztutter" ;
        lv2:symbol "ztutter" ;
        lv2:default 0 ;
        lv2:minimum 0 ;
        lv2:maximum 1 ;
	lv2:portProperty lv2:integer, lv2:toggled, mod:preferMomentaryOnByDefault ;
    ] ;

rdfs:comment """ 
Double Stutter effect (L/R) with time division 1/4 note, 1/8 note , etc...
but also odd division 5tuplet, 7tuplet, 9tuplet, 11tuplet 
which could give interesting polyrythmic effects at slow tempo.
An ambiant/harsh tool in one plugin.

""" ;

    mod:brand "zwabo" ;
    mod:label "STUTTTER" ;

    doap:name "STUTTTER" ;
    doap:license <http://spdx.org/licenses/ISC.html> ;

    doap:maintainer [
        foaf:name "zwabo" ;
        foaf:homepage <https://github.com/moddevices/max-gen-skeleton> ;
    ] ;

    lv2:microVersion 0 ;
    lv2:minorVersion 0 .
  1. Save the edited .ttl and close the WinSCP connection to your MDX.
  2. Delete your browser cache (everything just to be sure).
  3. Access the MDX using the browser GUI, go to settings and select Reboot MOD.

Now the Stutter plugin should work correctly!

Ps. I’ll share some more details in the next post.

1 Like

Some details about my findings:

I was not able to use the STUTTTER_dsp.ttl content directly as suggested to try by Zwabo. But I only did two small changes to make it work though, so close to identical!

I needed to replace line 16 from “urn:maxgen:STUTTTER” to “urn:maxgen:zwabo:stutter” as it was in the original file. The GUI would not even load at all using the first option.

image

image

I also found out that there is a non breaking space character in the code in Zwabos file here zwaba/Stuttterz/blob/main/max-gen-STUTTTER.lv2/STUTTTER_dsp.tt.

I’m not sure at all if this causes any issues, but I removed this unicode and replaced it with a regular space just to be sure (it is already changed in my code snippet in previous post).

image

image

And by the way @zwabo. Thank you for these amazing plugins! They are truly awesome and I am honored to be able to use them :pray:

3 Likes

Thank you for sharing clearly all these infos !

1 Like