diff --git a/lv2/aarch64/ToobAmp.lv2/ToobAmp.so.0.1.5 b/lv2/aarch64/ToobAmp.lv2/ToobAmp.so.0.1.5 new file mode 100644 index 0000000..8abc92b Binary files /dev/null and b/lv2/aarch64/ToobAmp.lv2/ToobAmp.so.0.1.5 differ diff --git a/lv2/aarch64/ToobAmp.lv2/ToobAmp.so.0.1.6 b/lv2/aarch64/ToobAmp.lv2/ToobAmp.so.0.1.6 index 8abc92b..38cf172 100644 Binary files a/lv2/aarch64/ToobAmp.lv2/ToobAmp.so.0.1.6 and b/lv2/aarch64/ToobAmp.lv2/ToobAmp.so.0.1.6 differ diff --git a/lv2/aarch64/ToobAmp.lv2/ToobChorus.ttl b/lv2/aarch64/ToobAmp.lv2/ToobChorus.ttl new file mode 100644 index 0000000..c3247ea --- /dev/null +++ b/lv2/aarch64/ToobAmp.lv2/ToobChorus.ttl @@ -0,0 +1,92 @@ +@prefix doap: . +@prefix lv2: . +@prefix rdf: . +@prefix rdfs: . +@prefix units: . +@prefix urid: . +@prefix atom: . +@prefix midi: . +@prefix epp: . +@prefix uiext: . +@prefix idpy: . +@prefix foaf: . +@prefix mod: . +@prefix param: . +@prefix work: . +@prefix pg: . + +@prefix atom: . +@prefix patch: . +@prefix rdfs: . +@prefix state: . +@prefix urid: . +@prefix xsd: . +@prefix toobChorus: . + + + + a foaf:Person ; + foaf:name "Robin Davies" ; + foaf:mbox ; + foaf:homepage . + + + a lv2:Plugin , + lv2:ChorusPlugin ; + doap:name "TooB CE-2 Chorus" , + "TooB CE-2 Chorus"@en-gb + ; + doap:license ; + doap:maintainer ; + lv2:minorVersion 0 ; + lv2:microVersion 1 ; + rdfs:comment """ +Emulation of Boss CE-2 Chorus. + +""" ; + + mod:brand "TooB"; + mod:label "CE-2 Chorus"; + lv2:optionalFeature lv2:hardRTCapable; + + lv2:port + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 0; + lv2:symbol "rate" ; + lv2:name "Rate"; + lv2:default 0.5 ; + lv2:minimum 0.0; + lv2:maximum 1.0; + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 1 ; + lv2:symbol "depth" ; + lv2:name "Depth"; + + lv2:default 0.5 ; + lv2:minimum 0.0 ; + lv2:maximum 1.0 ; + ], + [ + a lv2:AudioPort , + lv2:InputPort ; + lv2:index 2 ; + lv2:symbol "in" ; + lv2:name "In" + ], + [ + a lv2:AudioPort , + lv2:OutputPort ; + lv2:index 3 ; + lv2:symbol "out" ; + lv2:name "Out" + ] + . + + diff --git a/lv2/aarch64/ToobAmp.lv2/ToobDelay.ttl b/lv2/aarch64/ToobAmp.lv2/ToobDelay.ttl new file mode 100644 index 0000000..b38a479 --- /dev/null +++ b/lv2/aarch64/ToobAmp.lv2/ToobDelay.ttl @@ -0,0 +1,109 @@ +@prefix doap: . +@prefix lv2: . +@prefix rdf: . +@prefix rdfs: . +@prefix units: . +@prefix urid: . +@prefix atom: . +@prefix midi: . +@prefix epp: . +@prefix uiext: . +@prefix idpy: . +@prefix foaf: . +@prefix mod: . +@prefix param: . +@prefix work: . +@prefix pg: . + +@prefix atom: . +@prefix patch: . +@prefix rdfs: . +@prefix state: . +@prefix urid: . +@prefix xsd: . +@prefix toobDelay: . + + + + a foaf:Person ; + foaf:name "Robin Davies" ; + foaf:mbox ; + foaf:homepage . + + + a lv2:Plugin , + lv2:DelayPlugin ; + doap:name "TooB Delay" , + "TooB Delay"@en-gb + ; + doap:license ; + doap:maintainer ; + lv2:minorVersion 0 ; + lv2:microVersion 13 ; + rdfs:comment """ +Digital delay. + +""" ; + + mod:brand "TooB"; + mod:label "Delay"; + lv2:optionalFeature lv2:hardRTCapable; + + lv2:port + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 0; + lv2:symbol "delay" ; + lv2:name "Delay"; + lv2:default 340 ; + lv2:minimum 5; + lv2:maximum 1200; + units:unit units:ms; + lv2:portProperty ; + + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 1 ; + lv2:symbol "level" ; + lv2:name "Level"; + + lv2:default 27.0 ; + lv2:minimum 0.0 ; + lv2:maximum 100.0 ; + units:unit units:pc; + ], [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 2 ; + lv2:symbol "feedback" ; + lv2:name "Feedback"; + + + lv2:default 39.0 ; + lv2:minimum 0.0 ; + lv2:maximum 100.0 ; + units:unit units:pc; + ], + [ + a lv2:AudioPort , + lv2:InputPort ; + lv2:index 3 ; + lv2:symbol "in" ; + lv2:name "In" + ], + [ + a lv2:AudioPort , + lv2:OutputPort ; + lv2:index 4 ; + lv2:symbol "out" ; + lv2:name "Out" + ] + . + + diff --git a/lv2/aarch64/ToobAmp.lv2/ToobML.ttl b/lv2/aarch64/ToobAmp.lv2/ToobML.ttl index 50834a7..aded817 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobML.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobML.ttl @@ -86,58 +86,9 @@ and uses model files from from the GuitarML Neural Pi project (https://github.co units:unit units:db ; rdf:comment "Input volume trim (pre-model)"; ], - [ - a lv2:InputPort , - lv2:ControlPort ; - - lv2:index 1 ; - lv2:symbol "bass" ; - lv2:name "Bass"; - - pg:group toobml:filterGroup ; - - lv2:default 0.5 ; - lv2:minimum 0.0 ; - lv2:maximum 1.0 ; - - rdf:comment "Bass eq (pre-model)"; - ], [ - a lv2:InputPort , - lv2:ControlPort ; - - lv2:index 2 ; - lv2:symbol "mid" ; - lv2:name "Mid"; - - pg:group toobml:filterGroup ; - - lv2:default 0.5 ; - lv2:minimum 0.0 ; - lv2:maximum 1.0 ; - - - rdf:comment "Mid eq (pre-model)"; - - ], [ - a lv2:InputPort , - lv2:ControlPort ; - - lv2:index 3 ; - lv2:symbol "treble" ; - lv2:name "Treble"; - - pg:group toobml:filterGroup ; - - lv2:default 0.5 ; - lv2:minimum 0.0 ; - lv2:maximum 1.0 ; - - - rdf:comment "Treble eq (pre-model)"; - ], [ a lv2:InputPort, lv2:ControlPort ; - lv2:index 4 ; + lv2:index 1 ; lv2:symbol "model" ; lv2:name "Model" ; lv2:default 0.0 ; @@ -282,7 +233,7 @@ and uses model files from from the GuitarML Neural Pi project (https://github.co a lv2:InputPort , lv2:ControlPort ; - lv2:index 5 ; + lv2:index 2 ; lv2:symbol "gain" ; lv2:name "Gain"; lv2:default 3.0 ; @@ -294,7 +245,7 @@ and uses model files from from the GuitarML Neural Pi project (https://github.co a lv2:InputPort , lv2:ControlPort ; - lv2:index 6 ; + lv2:index 3 ; lv2:symbol "master" ; lv2:name "Master"; lv2:default 0.0 ; @@ -304,16 +255,81 @@ and uses model files from from the GuitarML Neural Pi project (https://github.co rdf:comment "Output volume trim (pot-model)"; ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 4 ; + lv2:symbol "bass" ; + lv2:name "Bass"; + + pg:group toobml:filterGroup ; + + lv2:default 0.5 ; + lv2:minimum 0.0 ; + lv2:maximum 1.0 ; + + rdf:comment "Bass eq (pre-model)"; + ], [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 5 ; + lv2:symbol "mid" ; + lv2:name "Mid"; + + pg:group toobml:filterGroup ; + + lv2:default 0.5 ; + lv2:minimum 0.0 ; + lv2:maximum 1.0 ; + + + rdf:comment "Mid eq (pre-model)"; + + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 6 ; + lv2:symbol "treble" ; + lv2:name "Treble"; + + pg:group toobml:filterGroup ; + + lv2:default 0.5 ; + lv2:minimum 0.0 ; + lv2:maximum 1.0 ; + + + rdf:comment "Treble eq (pre-model)"; + ], + [ + a lv2:OutputPort , + lv2:ControlPort ; + + lv2:portProperty epp:notOnGUI; + lv2:index 7 ; + lv2:symbol "gainEnable" ; + lv2:name "GainEnable"; + + lv2:default 0.1 ; + lv2:minimum 0.0 ; + lv2:maximum 1.0 ; + + ], + [ a lv2:AudioPort , lv2:InputPort ; - lv2:index 7 ; + lv2:index 8 ; lv2:symbol "in" ; lv2:name "In" ], [ a lv2:AudioPort , lv2:OutputPort ; - lv2:index 8 ; + lv2:index 9 ; lv2:symbol "out" ; lv2:name "Out" ] @@ -324,21 +340,22 @@ and uses model files from from the GuitarML Neural Pi project (https://github.co atom:bufferType atom:Sequence ; atom:supports patch:Message; lv2:designation lv2:control ; - lv2:index 9 ; + lv2:index 10 ; lv2:symbol "control" ; lv2:name "Control" ; rdfs:comment "Plugin to GUI communication" ; - ] , [ + ] , + [ a atom:AtomPort , lv2:OutputPort ; atom:bufferType atom:Sequence ; atom:supports patch:Message; lv2:designation lv2:control ; - lv2:index 10 ; + lv2:index 11 ; lv2:symbol "notify" ; lv2:name "Notify" ; rdfs:comment "Plugin to GUI communication" ; - ] + ] . diff --git a/lv2/aarch64/ToobAmp.lv2/manifest.ttl b/lv2/aarch64/ToobAmp.lv2/manifest.ttl index 144ac30..e94dfc3 100644 --- a/lv2/aarch64/ToobAmp.lv2/manifest.ttl +++ b/lv2/aarch64/ToobAmp.lv2/manifest.ttl @@ -36,6 +36,14 @@ lv2:binary ; rdfs:seeAlso . + a lv2:Plugin ; + lv2:binary ; + rdfs:seeAlso . + + a lv2:Plugin ; + lv2:binary ; + rdfs:seeAlso . + diff --git a/react/src/ToobMLView.tsx b/react/src/ToobMLView.tsx index f0366ab..4500731 100644 --- a/react/src/ToobMLView.tsx +++ b/react/src/ToobMLView.tsx @@ -76,8 +76,8 @@ const ToobMLView = addGainEnabledSubscription(instanceId: number) { this.removeGainEnabledSubscription(); - - this.monitorPortHandle = this.model.monitorPort(instanceId,"gainEnabled",0.1, + this.subscribedId = instanceId; + this.monitorPortHandle = this.model.monitorPort(instanceId,"gainEnable",0.1, (value: number) => { if (this.gainRef.current) { @@ -112,10 +112,10 @@ const ToobMLView = ( ) ); - let gainControl: React.ReactElement = controls[3] as React.ReactElement; + let gainControl: React.ReactElement = controls[2] as React.ReactElement; if (gainControl) { - controls[3] = (
{ gainControl}
); + controls[2] = (
{ gainControl}
); } return controls; } diff --git a/src/JackHost.cpp b/src/JackHost.cpp index 8be6efb..466c906 100644 --- a/src/JackHost.cpp +++ b/src/JackHost.cpp @@ -340,15 +340,18 @@ private: portSubscription.samplesToNextCallback += portSubscription.sampleRate; if (!portSubscription.waitingForAck) { - portSubscription.waitingForAck = true; float value = realtimeActivePedalBoard->GetControlOutputValue( portSubscription.instanceIndex, portSubscription.portIndex); - - this->realtimeWriter.SendMonitorPortUpdate( - portSubscription.callbackPtr, - portSubscription.subscriptionHandle, - value); + if (value != portSubscription.lastValue) + { + portSubscription.waitingForAck = true; + portSubscription.lastValue = value; + this->realtimeWriter.SendMonitorPortUpdate( + portSubscription.callbackPtr, + portSubscription.subscriptionHandle, + value); + } } } } diff --git a/src/Lv2Effect.cpp b/src/Lv2Effect.cpp index 096d7b7..a4ed1ad 100644 --- a/src/Lv2Effect.cpp +++ b/src/Lv2Effect.cpp @@ -93,7 +93,15 @@ Lv2Effect::Lv2Effect( LV2_Feature **myFeatures = &this->features[0]; - LilvInstance *pInstance = lilv_plugin_instantiate(pPlugin, pHost->GetSampleRate(), myFeatures); + LilvInstance *pInstance = nullptr; + try { + pInstance = lilv_plugin_instantiate(pPlugin, pHost->GetSampleRate(), myFeatures); + } catch (const std::exception &e) + { + this->pInstance = nullptr; + throw PiPedalException(SS("Plugin threw an exception: " << e.what())); + + } this->pInstance = pInstance; if (this->pInstance == nullptr) { diff --git a/src/RingBufferReader.hpp b/src/RingBufferReader.hpp index 674f122..570dfc0 100644 --- a/src/RingBufferReader.hpp +++ b/src/RingBufferReader.hpp @@ -64,6 +64,7 @@ namespace pipedal int sampleRate = 0; int samplesToNextCallback = 0; bool waitingForAck = false; + float lastValue = -1E30; }; class RealtimeMonitorPortSubscriptions