Install ToobAmp files; uninstall cleanup.
@@ -16,7 +16,14 @@ add_subdirectory("react")
|
||||
|
||||
add_subdirectory("src")
|
||||
|
||||
# select LV2 source directory for the current build architecture
|
||||
|
||||
message(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
|
||||
set(LV2_SOURCE_DIRECTORY ${PROJECT_SOURCE_DIR}/lv2/${CMAKE_SYSTEM_PROCESSOR})
|
||||
|
||||
if (NOT EXISTS ${LV2_SOURCE_DIRECTORY})
|
||||
message(FATAL_ERROR "Lv2 Binaries for architecture '${CMAKE_SYSTEM_PROCESSOR}' have not been provisioned. See lv2/Readme.md")
|
||||
endif()
|
||||
# add_subdirectory("test")
|
||||
|
||||
# add_test(NAME Test COMMAND piddletest)
|
||||
@@ -42,6 +49,9 @@ install (FILES ${PROJECT_SOURCE_DIR}/src/template.service
|
||||
${PROJECT_SOURCE_DIR}/src/templateJack.service
|
||||
DESTINATION /etc/pipedal )
|
||||
|
||||
install (DIRECTORY ${LV2_SOURCE_DIRECTORY}
|
||||
DESTINATION /usr/lib/liv2
|
||||
)
|
||||
install(CODE
|
||||
[[
|
||||
file(GET_RUNTIME_DEPENDENCIES
|
||||
@@ -71,7 +81,7 @@ set(CPACK_PROJECT_NAME ${PROJECT_NAME})
|
||||
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
|
||||
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
|
||||
|
||||
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/debian/postinst;${CMAKE_CURRENT_SOURCE_DIR}/debian/postinst")
|
||||
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_CURRENT_SOURCE_DIR}/debian/postinst;${CMAKE_CURRENT_SOURCE_DIR}/debian/prerm")
|
||||
|
||||
|
||||
include(CPack)
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
This folder contains pre-built binaries for an initial bundle of Lv2 plugins.
|
||||
|
||||
This arrangment is temporary, and is expected to go away, once a reliable distribution
|
||||
of this project and the ToobAmp project via apt can be arranged.
|
||||
|
||||
@@ -0,0 +1,224 @@
|
||||
@prefix doap: <http://usefulinc.com/ns/doap#> .
|
||||
@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
|
||||
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
||||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
@prefix units: <http://lv2plug.in/ns/extensions/units#> .
|
||||
@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
|
||||
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
|
||||
@prefix midi: <http://lv2plug.in/ns/ext/midi#> .
|
||||
@prefix epp: <http://lv2plug.in/ns/ext/port-props#> .
|
||||
@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
|
||||
@prefix idpy: <http://harrisonconsoles.com/lv2/inlinedisplay#> .
|
||||
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
|
||||
@prefix mod: <http://moddevices.com/ns/mod#> .
|
||||
@prefix param: <http://lv2plug.in/ns/ext/parameters#> .
|
||||
@prefix work: <http://lv2plug.in/ns/ext/worker#> .
|
||||
|
||||
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
|
||||
@prefix patch: <http://lv2plug.in/ns/ext/patch#> .
|
||||
@prefix plug: <http://two-play.com/plugins/toob-cab-sim#> .
|
||||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
@prefix state: <http://lv2plug.in/ns/ext/state#> .
|
||||
@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
|
||||
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
||||
|
||||
|
||||
<http://two-play.com/plugins/toob#frequencyResponseVector>
|
||||
a lv2:Parameter ;
|
||||
rdfs:label "frequencyResponseVector" ;
|
||||
rdfs:range atom:Vector .
|
||||
|
||||
<http://two-play.com/plugins/toob-cab-sim#uiState>
|
||||
a lv2:Parameter ;
|
||||
rdfs:label "uiState" ;
|
||||
rdfs:range atom:Vector .
|
||||
|
||||
|
||||
<http://two-play.com/rerdavies#me>
|
||||
a foaf:Person ;
|
||||
foaf:name "Robin Davies" ;
|
||||
foaf:mbox <mailto:rerdavies@gmail.com> ;
|
||||
foaf:homepage <http://two-play.com/> .
|
||||
|
||||
<http://two-play.com/plugins/toob-cab-sim>
|
||||
a lv2:Plugin ,
|
||||
lv2:SimulatorPlugin ;
|
||||
doap:name "TooB Cab Simulator" ,
|
||||
"TooB Cab Simulator"@en-gb-gb
|
||||
;
|
||||
doap:license <https://two-play.com/TooB/licenses/isc> ;
|
||||
doap:maintainer <http://two-play.com/rerdavies#me> ;
|
||||
lv2:minorVersion 0 ;
|
||||
lv2:microVersion 13 ;
|
||||
rdfs:comment "TooB amplifier cabinet simulator." ;
|
||||
|
||||
mod:brand "TooB";
|
||||
mod:label "Cab Simulator";
|
||||
lv2:requiredFeature urid:map ;
|
||||
lv2:optionalFeature lv2:hardRTCapable;
|
||||
lv2:extensionData state:interface;
|
||||
patch:readable
|
||||
<http://two-play.com/plugins/toob#frequencyResponseVector>,
|
||||
<http://two-play.com/plugins/toob-cab-sim#uiState>;
|
||||
rdfs:comment """
|
||||
The TooB Cabinet simulator provides EQ tools for emulating cabinet response. See the presets for
|
||||
emulations of well-known cabinets.
|
||||
|
||||
The TooB Cabinet Simulator is part of the TooB Amp Emulation Toolkit. Typically, you would
|
||||
use the following plugins in the following order:
|
||||
|
||||
- TooB Input Stage
|
||||
|
||||
- TooB Tone Stack
|
||||
|
||||
- Toob Power Stage
|
||||
|
||||
- Toob Cabinet Simulator
|
||||
|
||||
|
||||
""";
|
||||
lv2:port
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 0 ;
|
||||
lv2:symbol "locut" ;
|
||||
lv2:name "Lo Cut";
|
||||
lv2:default 120.0 ;
|
||||
lv2:minimum 30.0 ;
|
||||
lv2:maximum 300.0 ;
|
||||
units:unit units:hz ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "30Hz" ;
|
||||
rdf:value 30.0
|
||||
], [
|
||||
rdfs:label "300Hz" ;
|
||||
rdf:value 300
|
||||
];
|
||||
rdfs:comment "Low cutoff frequency. 30hz to 300hz. Set to minimum to disable." ;
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 1 ;
|
||||
lv2:symbol "bright" ;
|
||||
lv2:name "Bright";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 20.0 ;
|
||||
units:unit units:db;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "0dB" ;
|
||||
rdf:value 0.0
|
||||
] , [
|
||||
rdfs:label "10dB" ;
|
||||
rdf:value 10
|
||||
] , [
|
||||
rdfs:label "20dB" ;
|
||||
rdf:value 20
|
||||
];
|
||||
rdfs:comment "Bright boost (0db to 20db)." ;
|
||||
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 2 ;
|
||||
lv2:symbol "brightf" ;
|
||||
lv2:name "BrightF";
|
||||
lv2:default 1300.0 ;
|
||||
lv2:minimum 1000.0 ;
|
||||
lv2:maximum 5000.0;
|
||||
units:unit units:hz;
|
||||
lv2:designation param:cutoffFrequency ;
|
||||
rdfs:comment "Bright boost frequency. (1khz to 8khz)" ;
|
||||
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 3 ;
|
||||
lv2:symbol "hicut" ;
|
||||
lv2:name "Hi Cut";
|
||||
lv2:default 6000.0 ;
|
||||
lv2:minimum 2000.0 ;
|
||||
lv2:maximum 13000.0;
|
||||
units:unit units:hz;
|
||||
lv2:portProperty epp:logarithmic;
|
||||
lv2:designation param:cutoffFrequency ;
|
||||
rdfs:comment "Hi cutoff frequency. 2khz to 13khz. Set to maximum to disable." ;
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 4 ;
|
||||
lv2:symbol "comb" ;
|
||||
lv2:name "Comb";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0;
|
||||
rdfs:comment "Amount of comb filtering. 0 to 1. Set to minimum to disable." ;
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 5 ;
|
||||
lv2:symbol "combf" ;
|
||||
lv2:name "Comb F";
|
||||
lv2:default 2000.0 ;
|
||||
lv2:minimum 1000.0 ;
|
||||
lv2:maximum 8000.0;
|
||||
units:unit units:hz;
|
||||
lv2:designation param:cutoffFrequency ;
|
||||
rdfs:comment "Comb filter frequency. (1khz to 8khz)" ;
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 6 ;
|
||||
lv2:symbol "trim" ;
|
||||
lv2:name "Trim";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum -30.0 ;
|
||||
lv2:maximum 30.0;
|
||||
units:unit units:db;
|
||||
rdfs:comment "Master volume trim. (-30db to + 30db)" ;
|
||||
],
|
||||
[
|
||||
a lv2:AudioPort ,
|
||||
lv2:InputPort ;
|
||||
lv2:index 7 ;
|
||||
lv2:symbol "in" ;
|
||||
lv2:name "In"
|
||||
] ,
|
||||
[
|
||||
a lv2:AudioPort ,
|
||||
lv2:OutputPort ;
|
||||
lv2:index 8 ;
|
||||
lv2:symbol "out" ;
|
||||
lv2:name "Out"
|
||||
], [
|
||||
a atom:AtomPort ,
|
||||
lv2:InputPort;
|
||||
atom:bufferType atom:Sequence ;
|
||||
atom:supports patch:Message;
|
||||
lv2:designation lv2:control ;
|
||||
lv2:index 9 ;
|
||||
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:symbol "notify" ;
|
||||
lv2:name "Notify" ;
|
||||
rdfs:comment "Plugin to GUI communication" ;
|
||||
]
|
||||
.
|
||||
|
||||
|
||||
@@ -0,0 +1,267 @@
|
||||
@prefix doap: <http://usefulinc.com/ns/doap#> .
|
||||
@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
|
||||
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
||||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
@prefix units: <http://lv2plug.in/ns/extensions/units#> .
|
||||
@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
|
||||
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
|
||||
@prefix midi: <http://lv2plug.in/ns/ext/midi#> .
|
||||
@prefix epp: <http://lv2plug.in/ns/ext/port-props#> .
|
||||
@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
|
||||
@prefix idpy: <http://harrisonconsoles.com/lv2/inlinedisplay#> .
|
||||
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
|
||||
@prefix mod: <http://moddevices.com/ns/mod#> .
|
||||
@prefix param: <http://lv2plug.in/ns/ext/parameters#> .
|
||||
@prefix work: <http://lv2plug.in/ns/ext/worker#> .
|
||||
|
||||
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
|
||||
@prefix patch: <http://lv2plug.in/ns/ext/patch#> .
|
||||
@prefix plug: <http://two-play.com/plugins/toob-input_stage#> .
|
||||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
@prefix state: <http://lv2plug.in/ns/ext/state#> .
|
||||
@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
|
||||
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
||||
|
||||
@prefix pg: <http://lv2plug.in/ns/ext/port-groups#> .
|
||||
@prefix inputStage: <http://two-play.com/plugins/toob-input_stage#> .
|
||||
|
||||
|
||||
<http://two-play.com/plugins/toob#frequencyResponseVector>
|
||||
a lv2:Parameter ;
|
||||
rdfs:label "frequencyResponseVector" ;
|
||||
rdfs:range atom:Vector .
|
||||
|
||||
<http://two-play.com/plugins/toob-input_stage#uiState>
|
||||
a lv2:Parameter ;
|
||||
rdfs:label "uiState" ;
|
||||
rdfs:range atom:Vector .
|
||||
|
||||
|
||||
<http://two-play.com/rerdavies#me>
|
||||
a foaf:Person ;
|
||||
foaf:name "Robin Davies" ;
|
||||
foaf:mbox <mailto:rerdavies@gmail.com> ;
|
||||
foaf:homepage <http://two-play.com/> .
|
||||
|
||||
inputStage:filterGroup
|
||||
a param:ControlGroup ,
|
||||
pg:InputGroup ;
|
||||
lv2:name "EQ" ;
|
||||
lv2:symbol "filter" .
|
||||
|
||||
|
||||
<http://two-play.com/plugins/toob-input_stage>
|
||||
a lv2:Plugin ,
|
||||
lv2:SimulatorPlugin ;
|
||||
doap:name "TooB Input Stage" ,
|
||||
"TooB Input Stage"@en-gb-gb
|
||||
;
|
||||
doap:license <https://two-play.com/TooB/licenses/isc> ;
|
||||
doap:maintainer <http://two-play.com/rerdavies#me> ;
|
||||
lv2:minorVersion 0 ;
|
||||
lv2:microVersion 13 ;
|
||||
|
||||
mod:brand "TooB";
|
||||
mod:label "Input Stage";
|
||||
lv2:requiredFeature urid:map ;
|
||||
lv2:optionalFeature lv2:hardRTCapable;
|
||||
lv2:extensionData state:interface;
|
||||
patch:readable
|
||||
<http://two-play.com/plugins/toob#frequencyResponseVector>,
|
||||
<http://two-play.com/plugins/toob-input_stage#uiState>;
|
||||
rdfs:comment """
|
||||
TooB Input Stage provides basic tools for trimming and shaping guitar input signals
|
||||
before feeding them through amp emulations.
|
||||
|
||||
Components in the TooB Amp Emulation Toolkit expect guitar signal levels to be nominally close
|
||||
to zero db. Use the Trim control to get your input signal into a reasonable range (ideally, into
|
||||
the yellow range on the VU, but not going above zero dB).
|
||||
|
||||
In some cases, you can reduce noise in your guitar signal by filtering out low and high frequencies.
|
||||
Use the Low and Hi Cut controls to remove unnecessary frequencies. Set the Lo Cut to minimum value
|
||||
to disable the Low Cut filter. Se the Hi Cut control to maximum value to disable the Hi Cut filter.
|
||||
|
||||
Bright EQ settings allow boosting of high frequencies to simulate the bright input jack
|
||||
found on many guitar amps.
|
||||
|
||||
The GateT control provides a noise gate. Set to minimum value to disable.
|
||||
|
||||
The Boost control allows simulation of overdriven input stages. Use judiciously. Heavy overdrive
|
||||
effects are better implemented in the TooB Power Stage.
|
||||
|
||||
The TooB Input Stage is part of the TooB Amp Emulation Toolkit. Typically, you would
|
||||
use the following plugins in the following order.
|
||||
|
||||
- TooB Input Stage
|
||||
|
||||
- TooB Tone Stack
|
||||
|
||||
- Toob Power Stage
|
||||
|
||||
- Toob Cabinet Simulator
|
||||
""";
|
||||
lv2:port
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 0 ;
|
||||
lv2:symbol "trim" ;
|
||||
lv2:name "Trim";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum -60.0 ;
|
||||
lv2:maximum 30.0 ;
|
||||
units:unit units:db ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "+30dB" ;
|
||||
rdf:value 20.0
|
||||
] , [
|
||||
rdfs:label "-INF" ;
|
||||
rdf:value -60.0
|
||||
]
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 1 ;
|
||||
pg:group inputStage:filterGroup ;
|
||||
|
||||
lv2:symbol "locut" ;
|
||||
lv2:name "Lo Cut";
|
||||
lv2:default 120.0 ;
|
||||
lv2:minimum 30.0 ;
|
||||
lv2:maximum 300.0 ;
|
||||
units:unit units:hz;
|
||||
lv2:designation param:cutoffFrequency ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "OFF" ;
|
||||
rdf:value 30.0
|
||||
];
|
||||
rdfs:comment "Low cutoff frequency"
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 2 ;
|
||||
pg:group inputStage:filterGroup ;
|
||||
lv2:symbol "bright" ;
|
||||
lv2:name "Bright";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 25.0 ;
|
||||
units:unit units:db;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "OFF" ;
|
||||
rdf:value 0.0
|
||||
];
|
||||
rdfs:comment "Boost high frequencies." ;
|
||||
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 3 ;
|
||||
pg:group inputStage:filterGroup ;
|
||||
lv2:symbol "brightf" ;
|
||||
lv2:name "Bright F";
|
||||
lv2:default 1300.0 ;
|
||||
lv2:minimum 1000.0 ;
|
||||
lv2:maximum 5000.0;
|
||||
units:unit units:hz;
|
||||
lv2:designation param:cutoffFrequency ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "OFF" ;
|
||||
rdf:value 0.0
|
||||
];
|
||||
rdfs:comment "Bright frequency." ;
|
||||
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 4 ;
|
||||
pg:group inputStage:filterGroup ;
|
||||
lv2:symbol "hicut" ;
|
||||
lv2:name "Hi Cut";
|
||||
lv2:default 6000.0 ;
|
||||
lv2:minimum 2000.0 ;
|
||||
lv2:maximum 13000.0;
|
||||
units:unit units:hz;
|
||||
lv2:portProperty epp:logarithmic;
|
||||
lv2:designation param:cutoffFrequency ;
|
||||
lv2:scalePoint[
|
||||
rdfs:label "OFF" ;
|
||||
rdf:value 13000.0
|
||||
];
|
||||
rdfs:comment "Hi cutoff frequency." ;
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 5 ;
|
||||
lv2:symbol "gate_t" ;
|
||||
lv2:name "Gate T";
|
||||
lv2:default -80.0 ;
|
||||
lv2:minimum -80.0 ;
|
||||
lv2:maximum -20.0;
|
||||
units:unit units:db;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "OFF" ;
|
||||
rdf:value -80.0
|
||||
];
|
||||
rdfs:comment "Noise gate threshold. Zero to disable." ;
|
||||
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 6 ;
|
||||
lv2:symbol "boost" ;
|
||||
lv2:name "Boost";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0;
|
||||
units:unit units:db;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "OFF" ;
|
||||
rdf:value 0.0
|
||||
];
|
||||
rdfs:comment "Simulate overdriving the input buffer." ;
|
||||
|
||||
],
|
||||
[
|
||||
a lv2:AudioPort ,
|
||||
lv2:InputPort ;
|
||||
lv2:index 7 ;
|
||||
lv2:symbol "in" ;
|
||||
lv2:name "In"
|
||||
] , [
|
||||
a lv2:AudioPort ,
|
||||
lv2:OutputPort ;
|
||||
lv2:index 8 ;
|
||||
lv2:symbol "out" ;
|
||||
lv2:name "Out"
|
||||
],[
|
||||
a atom:AtomPort ,
|
||||
lv2:InputPort;
|
||||
atom:bufferType atom:Sequence ;
|
||||
atom:supports patch:Message;
|
||||
lv2:designation lv2:control ;
|
||||
lv2:index 9 ;
|
||||
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:symbol "notify" ;
|
||||
lv2:name "Notify" ;
|
||||
rdfs:comment "Plugin to GUI communication" ;
|
||||
]
|
||||
.
|
||||
|
||||
|
||||
@@ -0,0 +1,624 @@
|
||||
@prefix doap: <http://usefulinc.com/ns/doap#> .
|
||||
@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
|
||||
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
||||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
@prefix units: <http://lv2plug.in/ns/extensions/units#> .
|
||||
@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
|
||||
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
|
||||
@prefix midi: <http://lv2plug.in/ns/ext/midi#> .
|
||||
@prefix epp: <http://lv2plug.in/ns/ext/port-props#> .
|
||||
@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
|
||||
@prefix idpy: <http://harrisonconsoles.com/lv2/inlinedisplay#> .
|
||||
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
|
||||
@prefix mod: <http://moddevices.com/ns/mod#> .
|
||||
@prefix param: <http://lv2plug.in/ns/ext/parameters#> .
|
||||
@prefix work: <http://lv2plug.in/ns/ext/worker#> .
|
||||
@prefix pg: <http://lv2plug.in/ns/ext/port-groups#> .
|
||||
|
||||
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
|
||||
@prefix patch: <http://lv2plug.in/ns/ext/patch#> .
|
||||
@prefix plug: <http://two-play.com/plugins/toob-power-stage#> .
|
||||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
@prefix state: <http://lv2plug.in/ns/ext/state#> .
|
||||
@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
|
||||
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
||||
@prefix modgui: <http://moddevices.com/ns/modgui#> .
|
||||
@prefix pstage: <http://two-play.com/plugins/toob-power-stage#> .
|
||||
|
||||
|
||||
pstage:stage1
|
||||
a param:ControlGroup ,
|
||||
pg:InputGroup ;
|
||||
lv2:name "Stage 1" ;
|
||||
lv2:symbol "stage1" .
|
||||
|
||||
pstage:stage2
|
||||
a param:ControlGroup ,
|
||||
pg:InputGroup ;
|
||||
lv2:name "Stage 2" ;
|
||||
lv2:symbol "stage2" .
|
||||
|
||||
|
||||
pstage:stage3
|
||||
a param:ControlGroup ,
|
||||
pg:InputGroup ;
|
||||
lv2:name "Stage 3" ;
|
||||
lv2:symbol "stage3" .
|
||||
|
||||
|
||||
<http://two-play.com/plugins/toob-power-stage#uiState>
|
||||
a lv2:Parameter ;
|
||||
rdfs:label "uiState" ;
|
||||
rdfs:range atom:Vector .
|
||||
|
||||
|
||||
<http://two-play.com/rerdavies#me>
|
||||
a foaf:Person ;
|
||||
foaf:name "Robin Davies" ;
|
||||
foaf:mbox <mailto:rerdavies@gmail.com> ;
|
||||
foaf:homepage <http://two-play.com/> .
|
||||
|
||||
<http://two-play.com/plugins/toob-power-stage>
|
||||
a lv2:Plugin ,
|
||||
lv2:SimulatorPlugin ;
|
||||
|
||||
doap:name "TooB Power Stage";
|
||||
|
||||
doap:license <https://two-play.com/TooB/licenses/isc> ;
|
||||
doap:maintainer <http://two-play.com/rerdavies#me> ;
|
||||
lv2:minorVersion 0 ;
|
||||
lv2:microVersion 15 ;
|
||||
|
||||
mod:brand "TooB";
|
||||
mod:label "Power Stage";
|
||||
lv2:requiredFeature urid:map ;
|
||||
lv2:optionalFeature lv2:hardRTCapable;
|
||||
lv2:extensionData state:interface;
|
||||
patch:readable
|
||||
<http://two-play.com/plugins/toob-power-stage#uiState>;
|
||||
|
||||
rdfs:comment """
|
||||
The TooB Power Stage provides flexible and nuanced emulations of guitar amp power stages.
|
||||
The goal of TooB Power Stage is not to inflexibly emulate existing tube power stages, but instead,
|
||||
to be better.
|
||||
|
||||
TooB Power Stage provides 3 consecutive gain stages, each of which can be overdriven to varying
|
||||
degrees. Power transformer sag is emulated using the SAG and SAGD controls, which emulate the
|
||||
volume and distortion effects introduced when power transformer voltage sags.
|
||||
|
||||
Each gain section expects an input level that is nominally in the range of 12db to 0db.
|
||||
It's ok if the levels are slightly over 0db, but they should not be massively over. Use the
|
||||
Trim control to adjust input signal levels.
|
||||
|
||||
The Gain controls use oversampled atan wave shaping to emulate the effect of overdriving
|
||||
gain stages. Atan wave shaping provides rich even-order harmonics similar to those produced by a tube
|
||||
amp power stage. A modest amount of gain will produce the characteristically "warm" sound of a tube
|
||||
gain stage. More extreme settings produce harder overdrive.
|
||||
|
||||
Judicious use of the LO CUT and HI CUT controls have interesting and subtle effects on the overall sound.
|
||||
You are encouraged to play with these controls to see what happens. Tightening up low and high frequencies,
|
||||
in early gain sections can allow you to drive the signal much harder in later gain sections without totally
|
||||
breaking up. Real amps will usually cut low frequency response at somewhere between 80Hz (Fender)
|
||||
and 140Hz (Marshall).
|
||||
|
||||
General experience seems to suggest that gradually increasing the gain in each section allows you to drive
|
||||
the signal harder without introducing undesirable effects in the output. However, there definitely interesting
|
||||
and subtle differences in tone that can be acheived by not adhering to that rule of thumb.
|
||||
|
||||
The SAG and SAGD controls are important controls. You need to undertand how they work. SAG controls how much
|
||||
the overall volume of the output decreases as the transform sags. It provides the subtle "compression" that
|
||||
tube amps provide, which is quite different from the compression provided by compressors. SAGD controls
|
||||
the amount of additional distortion that occurs as the gain stages receive reduced voltage. It provides
|
||||
the "forgiveness" of a good tube amp. Specifically, because SAGD operates in a feedback loop that runs through
|
||||
all three gain stages. Increasing the distortion in the gain stages increases the power use of the gain stages;
|
||||
increasing the power use of the gain stages increases the effect of SAG and SAGD which has an opposing effect
|
||||
on power use. The net result is that using SAG and SAGD causes signals to break up more gradually
|
||||
(hence the perceived "forgiveness"). The effects are non-linear, so not easy to describe completely. You
|
||||
are strongly urged to experiment with SAG and SAGD settings in order to get best tone results.
|
||||
|
||||
The TooB Power Stage design is based on an experimental design, that unexpectedly produced extraordinarily
|
||||
good amp tones. To be perfectly honest, we have not completely explored the sonic possibilities of the
|
||||
TooB Power Stage. What's known so far: it produces exceptionally pretty clean tones; it can be driven really
|
||||
hard, and seems to preserve an unusual amount of detail in the signal even when being driven hard; and it
|
||||
can definitely produce signals that have many of the most prized features of tube amplifiers: warmth, detail,
|
||||
subtle "compression" without coloration, and forgiving break up.
|
||||
|
||||
Explore!
|
||||
|
||||
The TooB Input Stage is part of the TooB Amp Emulation Toolkit. Typically, you would
|
||||
use the following plugins in the following order.
|
||||
|
||||
- TooB Input Stage
|
||||
|
||||
- TooB Tone Stack
|
||||
|
||||
- Toob Power Stage
|
||||
|
||||
- Toob Cabinet Simulator
|
||||
""";
|
||||
lv2:port
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 0 ;
|
||||
pg:group pstage:stage1 ;
|
||||
lv2:symbol "trim1" ;
|
||||
lv2:name "Trim";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum -20.0 ;
|
||||
lv2:maximum 20.0 ;
|
||||
units:unit units:db ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "+20" ;
|
||||
rdf:value 20.0
|
||||
] , [
|
||||
rdfs:label "+10" ;
|
||||
rdf:value 10.0
|
||||
] , [
|
||||
rdfs:label "0" ;
|
||||
rdf:value 0.0
|
||||
] , [
|
||||
rdfs:label "-10" ;
|
||||
rdf:value -10.0
|
||||
], [
|
||||
rdfs:label "-20" ;
|
||||
rdf:value -20.0
|
||||
];
|
||||
rdfs:comment "Trim input level (stage 1)" ;
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 1 ;
|
||||
pg:group pstage:stage1 ;
|
||||
lv2:symbol "gain1" ;
|
||||
lv2:name "Gain";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0 ;
|
||||
rdfs:comment "Gain (stage 1)"
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
pg:group pstage:stage1 ;
|
||||
|
||||
lv2:index 2 ;
|
||||
lv2:symbol "shape1" ;
|
||||
lv2:name "Shape1";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0;
|
||||
lv2:rangeStep 2;
|
||||
|
||||
lv2:portProperty lv2:enumeration ;
|
||||
rdfs:comment "Wave Shape" ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "atan" ;
|
||||
rdf:value 0.0
|
||||
],
|
||||
[
|
||||
rdfs:label "triode" ;
|
||||
rdf:value 1.0
|
||||
]
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
pg:group pstage:stage1 ;
|
||||
|
||||
lv2:index 3 ;
|
||||
lv2:symbol "bias1" ;
|
||||
lv2:name "Bias1";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum -2.0 ;
|
||||
lv2:maximum 2.0;
|
||||
],
|
||||
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 4 ;
|
||||
pg:group pstage:stage1 ;
|
||||
lv2:symbol "locut1" ;
|
||||
lv2:name "Lo Cut";
|
||||
lv2:default 30.0 ;
|
||||
lv2:minimum 30.0 ;
|
||||
lv2:maximum 300.0 ;
|
||||
units:unit units:hz;
|
||||
lv2:designation param:cutoffFrequency ;
|
||||
|
||||
lv2:scalePoint [
|
||||
rdfs:label "OFF" ;
|
||||
rdf:value 30.0
|
||||
];
|
||||
rdfs:comment "Low frequency cutoff (stage 1). Set to minimum to disable." ;
|
||||
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 5 ;
|
||||
pg:group pstage:stage1 ;
|
||||
lv2:symbol "hicut1" ;
|
||||
lv2:name "Hi Cut";
|
||||
lv2:default 19000.0 ;
|
||||
lv2:minimum 1000.0 ;
|
||||
lv2:maximum 19000.0;
|
||||
units:unit units:hz;
|
||||
lv2:designation param:cutoffFrequency ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "OFF" ;
|
||||
rdf:value 19000.0
|
||||
];
|
||||
rdfs:comment "High cutoff frequency (stage 1). Set to maximum to disable." ;
|
||||
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 6 ;
|
||||
pg:group pstage:stage2 ;
|
||||
lv2:symbol "gain2_enable" ;
|
||||
lv2:name "Enable2";
|
||||
lv2:default 1 ;
|
||||
lv2:minimum 0 ;
|
||||
lv2:maximum 1;
|
||||
lv2:portProperty lv2:toggled ;
|
||||
rdfs:comment "Enable gain stage 2" ;
|
||||
],
|
||||
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 7 ;
|
||||
pg:group pstage:stage2 ;
|
||||
lv2:symbol "trim2" ;
|
||||
lv2:name "Trim";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum -20.0 ;
|
||||
lv2:maximum 20.0 ;
|
||||
units:unit units:db ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "+20" ;
|
||||
rdf:value 20.0
|
||||
] , [
|
||||
rdfs:label "+10" ;
|
||||
rdf:value 10.0
|
||||
] , [
|
||||
rdfs:label "0" ;
|
||||
rdf:value 0.0
|
||||
] , [
|
||||
rdfs:label "-10" ;
|
||||
rdf:value -10.0
|
||||
], [
|
||||
rdfs:label "-20" ;
|
||||
rdf:value -20.0
|
||||
];
|
||||
rdfs:comment "Trim input (stage 2)" ;
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 8 ;
|
||||
pg:group pstage:stage2 ;
|
||||
lv2:symbol "gain2" ;
|
||||
lv2:name "Gain";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0 ;
|
||||
rdfs:comment "Gain (stage 2)"
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
pg:group pstage:stage2 ;
|
||||
|
||||
lv2:index 9 ;
|
||||
lv2:symbol "shape2" ;
|
||||
lv2:name "Shape2";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0;
|
||||
lv2:rangeStep 2;
|
||||
|
||||
lv2:portProperty lv2:enumeration ;
|
||||
rdfs:comment "Wave Shape" ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "atan" ;
|
||||
rdf:value 0.0
|
||||
],
|
||||
[
|
||||
rdfs:label "triode" ;
|
||||
rdf:value 1.0
|
||||
]
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
pg:group pstage:stage2 ;
|
||||
|
||||
lv2:index 10 ;
|
||||
lv2:symbol "bias2" ;
|
||||
lv2:name "Bias2";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum -2.0 ;
|
||||
lv2:maximum 2.0;
|
||||
],
|
||||
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 11 ;
|
||||
pg:group pstage:stage2 ;
|
||||
lv2:symbol "locut2" ;
|
||||
lv2:name "Lo Cut";
|
||||
lv2:default 30.0 ;
|
||||
lv2:minimum 30.0 ;
|
||||
lv2:maximum 300.0 ;
|
||||
units:unit units:hz;
|
||||
lv2:designation param:cutoffFrequency ;
|
||||
|
||||
lv2:scalePoint [
|
||||
rdfs:label "OFF" ;
|
||||
rdf:value 30.0
|
||||
]
|
||||
;
|
||||
rdfs:comment "Low frequency cutoff (stage 2). Set to minimum to disable." ;
|
||||
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 12 ;
|
||||
pg:group pstage:stage2 ;
|
||||
lv2:symbol "hicut2" ;
|
||||
lv2:name "Hi Cut";
|
||||
lv2:default 19000.0 ;
|
||||
lv2:minimum 1000.0 ;
|
||||
lv2:maximum 19000.0;
|
||||
units:unit units:hz;
|
||||
lv2:designation param:cutoffFrequency ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "OFF" ;
|
||||
rdf:value 19000.0
|
||||
];
|
||||
rdfs:comment "High cutoff frequency (stage 2). Set to maximum to disable." ;
|
||||
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 13 ;
|
||||
pg:group pstage:stage3 ;
|
||||
lv2:symbol "gain3_enable" ;
|
||||
lv2:name "Enable3";
|
||||
lv2:default 1 ;
|
||||
lv2:minimum 0 ;
|
||||
lv2:maximum 1;
|
||||
lv2:portProperty lv2:toggled ;
|
||||
rdfs:comment "Enable gain stage 3" ;
|
||||
],
|
||||
|
||||
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 14 ;
|
||||
pg:group pstage:stage3 ;
|
||||
lv2:symbol "trim3" ;
|
||||
lv2:name "Trim";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum -20.0 ;
|
||||
lv2:maximum 20.0 ;
|
||||
units:unit units:db ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "+20" ;
|
||||
rdf:value 20.0
|
||||
] , [
|
||||
rdfs:label "+10" ;
|
||||
rdf:value 10.0
|
||||
] , [
|
||||
rdfs:label "0" ;
|
||||
rdf:value 0.0
|
||||
] , [
|
||||
rdfs:label "-10" ;
|
||||
rdf:value -10.0
|
||||
], [
|
||||
rdfs:label "-20" ;
|
||||
rdf:value -20.0
|
||||
];
|
||||
rdfs:comment "Trim input level (stage 3)." ;
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 15 ;
|
||||
pg:group pstage:stage3 ;
|
||||
lv2:symbol "gain3" ;
|
||||
lv2:name "Gain";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0 ;
|
||||
rdfs:comment "Gain (stage 3)."
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
pg:group pstage:stage3 ;
|
||||
|
||||
lv2:index 16 ;
|
||||
lv2:symbol "shape3" ;
|
||||
lv2:name "Shape3";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0;
|
||||
lv2:rangeStep 2;
|
||||
|
||||
lv2:portProperty lv2:enumeration ;
|
||||
rdfs:comment "Wave Shape" ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "atan" ;
|
||||
rdf:value 0.0
|
||||
],
|
||||
[
|
||||
rdfs:label "triode" ;
|
||||
rdf:value 1.0
|
||||
]
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
pg:group pstage:stage3 ;
|
||||
|
||||
lv2:index 17 ;
|
||||
lv2:symbol "bias3" ;
|
||||
lv2:name "Bias3";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum -2.0 ;
|
||||
lv2:maximum 2.0;
|
||||
],
|
||||
|
||||
|
||||
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 18 ;
|
||||
pg:group pstage:stage3 ;
|
||||
lv2:symbol "locut3" ;
|
||||
lv2:name "Lo Cut";
|
||||
lv2:default 30.0 ;
|
||||
lv2:minimum 30.0 ;
|
||||
lv2:maximum 300.0 ;
|
||||
units:unit units:hz;
|
||||
lv2:designation param:cutoffFrequency ;
|
||||
|
||||
lv2:scalePoint [
|
||||
rdfs:label "OFF" ;
|
||||
rdf:value 30.0
|
||||
];
|
||||
rdfs:comment "Low frequency cutoff (stage 3). Set to minimum to disable." ;
|
||||
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 19 ;
|
||||
pg:group pstage:stage3 ;
|
||||
lv2:symbol "hicut3" ;
|
||||
lv2:name "Hi Cut";
|
||||
lv2:default 19000.0 ;
|
||||
lv2:minimum 1000.0 ;
|
||||
lv2:maximum 19000.0;
|
||||
units:unit units:hz;
|
||||
lv2:designation param:cutoffFrequency ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "OFF" ;
|
||||
rdf:value 19000
|
||||
];
|
||||
rdfs:comment "High cutoff frequency (stage 3). Set to minimum to disable." ;
|
||||
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 20 ;
|
||||
lv2:symbol "sag" ;
|
||||
lv2:name "Sag";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0;
|
||||
rdfs:comment "Transformer sag (volume)." ;
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 21 ;
|
||||
lv2:symbol "sagd" ;
|
||||
lv2:name "Sag D";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0;
|
||||
rdfs:comment "Transformer sag (distortion)." ;
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 22 ;
|
||||
lv2:symbol "master" ;
|
||||
lv2:name "Master";
|
||||
lv2:default -0.0 ;
|
||||
lv2:minimum -60.0 ;
|
||||
lv2:maximum 30.0;
|
||||
units:unit units:db;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "-60db" ;
|
||||
rdf:value -60.0
|
||||
] , [
|
||||
rdfs:label "0db" ;
|
||||
rdf:value 0.0
|
||||
], [
|
||||
rdfs:label "30db" ;
|
||||
rdf:value -30.0
|
||||
];
|
||||
rdfs:comment "Master volume." ;
|
||||
|
||||
],
|
||||
[
|
||||
a lv2:AudioPort ,
|
||||
lv2:InputPort ;
|
||||
lv2:index 23 ;
|
||||
lv2:symbol "in" ;
|
||||
lv2:name "In"
|
||||
] , [
|
||||
a lv2:AudioPort ,
|
||||
lv2:OutputPort ;
|
||||
lv2:index 24 ;
|
||||
lv2:symbol "out" ;
|
||||
lv2:name "Out"
|
||||
],[
|
||||
a atom:AtomPort ,
|
||||
lv2:InputPort;
|
||||
atom:bufferType atom:Sequence ;
|
||||
atom:supports patch:Message;
|
||||
lv2:designation lv2:control ;
|
||||
lv2:index 25 ;
|
||||
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 26 ;
|
||||
lv2:symbol "notify" ;
|
||||
lv2:name "Notify" ;
|
||||
rdfs:comment "Plugin to GUI communication" ;
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 27 ;
|
||||
lv2:symbol "sagf" ;
|
||||
lv2:name "SagF";
|
||||
lv2:default 13.0 ;
|
||||
lv2:minimum 5.0 ;
|
||||
lv2:maximum 25.0;
|
||||
rdfs:comment "Sag filter Fc." ;
|
||||
]
|
||||
.
|
||||
|
||||
|
||||
@@ -0,0 +1,587 @@
|
||||
@prefix doap: <http://usefulinc.com/ns/doap#> .
|
||||
@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
|
||||
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
||||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
@prefix units: <http://lv2plug.in/ns/extensions/units#> .
|
||||
@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
|
||||
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
|
||||
@prefix midi: <http://lv2plug.in/ns/ext/midi#> .
|
||||
@prefix epp: <http://lv2plug.in/ns/ext/port-props#> .
|
||||
@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
|
||||
@prefix idpy: <http://harrisonconsoles.com/lv2/inlinedisplay#> .
|
||||
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
|
||||
@prefix mod: <http://moddevices.com/ns/mod#> .
|
||||
@prefix param: <http://lv2plug.in/ns/ext/parameters#> .
|
||||
@prefix work: <http://lv2plug.in/ns/ext/worker#> .
|
||||
@prefix pg: <http://lv2plug.in/ns/ext/port-groups#> .
|
||||
|
||||
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
|
||||
@prefix patch: <http://lv2plug.in/ns/ext/patch#> .
|
||||
@prefix plug: <http://two-play.com/plugins/toob-power-stage-2#> .
|
||||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
@prefix state: <http://lv2plug.in/ns/ext/state#> .
|
||||
@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
|
||||
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
||||
@prefix modgui: <http://moddevices.com/ns/modgui#> .
|
||||
@prefix pstage: <http://two-play.com/plugins/toob-power-stage-2#> .
|
||||
|
||||
|
||||
pstage:stage1
|
||||
a param:ControlGroup ,
|
||||
pg:InputGroup ;
|
||||
lv2:name "Stage 1" ;
|
||||
lv2:symbol "stage1" .
|
||||
|
||||
pstage:stage2
|
||||
a param:ControlGroup ,
|
||||
pg:InputGroup ;
|
||||
lv2:name "Stage 2" ;
|
||||
lv2:symbol "stage2" .
|
||||
|
||||
|
||||
pstage:stage3
|
||||
a param:ControlGroup ,
|
||||
pg:InputGroup ;
|
||||
lv2:name "Stage 3" ;
|
||||
lv2:symbol "stage3" .
|
||||
|
||||
|
||||
<http://two-play.com/plugins/toob-power-stage-2#uiState>
|
||||
a lv2:Parameter ;
|
||||
rdfs:label "uiState" ;
|
||||
rdfs:range atom:Vector .
|
||||
|
||||
|
||||
<http://two-play.com/rerdavies#me>
|
||||
a foaf:Person ;
|
||||
foaf:name "Robin Davies" ;
|
||||
foaf:mbox <mailto:rerdavies@gmail.com> ;
|
||||
foaf:homepage <http://two-play.com/> .
|
||||
|
||||
<http://two-play.com/plugins/toob-power-stage-2>
|
||||
a lv2:Plugin ,
|
||||
lv2:SimulatorPlugin ;
|
||||
|
||||
doap:name "TooB2 Power Stage";
|
||||
|
||||
doap:license <https://two-play.com/TooB/licenses/isc> ;
|
||||
doap:maintainer <http://two-play.com/rerdavies#me> ;
|
||||
lv2:minorVersion 0 ;
|
||||
lv2:microVersion 1 ;
|
||||
|
||||
mod:brand "TooB";
|
||||
mod:label "Power Stage 2.0";
|
||||
lv2:requiredFeature urid:map ;
|
||||
lv2:optionalFeature lv2:hardRTCapable;
|
||||
lv2:extensionData state:interface;
|
||||
patch:readable
|
||||
<http://two-play.com/plugins/toob-power-stage-2#uiState>;
|
||||
|
||||
rdfs:comment """
|
||||
The TooB Power Stage provides flexible and nuanced emulations of guitar amp power stages.
|
||||
The goal of TooB Power Stage is not to inflexibly emulate existing tube power stages, but instead,
|
||||
to be better.
|
||||
|
||||
TooB Power Stage provides 3 consecutive gain stages, each of which can be overdriven to varying
|
||||
degrees. Power transformer sag is emulated using the SAG and SAGD controls, which emulate the
|
||||
volume and distortion effects introduced when power transformer voltage sags.
|
||||
|
||||
Each gain section expects an input level that is nominally in the range of 12db to 0db.
|
||||
It's ok if the levels are slightly over 0db, but they should not be massively over. Use the
|
||||
Trim control to adjust input signal levels.
|
||||
|
||||
The Gain controls use oversampled atan wave shaping to emulate the effect of overdriving
|
||||
gain stages. Atan wave shaping provides rich even-order harmonics similar to those produced by a tube
|
||||
amp power stage. A modest amount of gain will produce the characteristically "warm" sound of a tube
|
||||
gain stage. More extreme settings produce harder overdrive.
|
||||
|
||||
Judicious use of the LO CUT and HI CUT controls have interesting and subtle effects on the overall sound.
|
||||
You are encouraged to play with these controls to see what happens. Tightening up low and high frequencies,
|
||||
in early gain sections can allow you to drive the signal much harder in later gain sections without totally
|
||||
breaking up. Real amps will usually cut low frequency response at somewhere between 80Hz (Fender)
|
||||
and 140Hz (Marshall).
|
||||
|
||||
General experience seems to suggest that gradually increasing the gain in each section allows you to drive
|
||||
the signal harder without introducing undesirable effects in the output. However, there definitely interesting
|
||||
and subtle differences in tone that can be acheived by not adhering to that rule of thumb.
|
||||
|
||||
The SAG and SAGD controls are important controls. You need to undertand how they work. SAG controls how much
|
||||
the overall volume of the output decreases as the transform sags. It provides the subtle "compression" that
|
||||
tube amps provide, which is quite different from the compression provided by compressors. SAGD controls
|
||||
the amount of additional distortion that occurs as the gain stages receive reduced voltage. It provides
|
||||
the "forgiveness" of a good tube amp. Specifically, because SAGD operates in a feedback loop that runs through
|
||||
all three gain stages. Increasing the distortion in the gain stages increases the power use of the gain stages;
|
||||
increasing the power use of the gain stages increases the effect of SAG and SAGD which has an opposing effect
|
||||
on power use. The net result is that using SAG and SAGD causes signals to break up more gradually
|
||||
(hence the perceived "forgiveness"). The effects are non-linear, so not easy to describe completely. You
|
||||
are strongly urged to experiment with SAG and SAGD settings in order to get best tone results.
|
||||
|
||||
The TooB Power Stage design is based on an experimental design, that unexpectedly produced extraordinarily
|
||||
good amp tones. To be perfectly honest, we have not completely explored the sonic possibilities of the
|
||||
TooB Power Stage. What's known so far: it produces exceptionally pretty clean tones; it can be driven really
|
||||
hard, and seems to preserve an unusual amount of detail in the signal even when being driven hard; and it
|
||||
can definitely produce signals that have many of the most prized features of tube amplifiers: warmth, detail,
|
||||
subtle "compression" without coloration, and forgiving break up.
|
||||
|
||||
Explore!
|
||||
|
||||
The TooB Input Stage is part of the TooB Amp Emulation Toolkit. Typically, you would
|
||||
use the following plugins in the following order.
|
||||
|
||||
- TooB Input Stage
|
||||
|
||||
- TooB Tone Stack
|
||||
|
||||
- Toob Power Stage
|
||||
|
||||
- Toob Cabinet Simulator
|
||||
""";
|
||||
lv2:port
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 0 ;
|
||||
pg:group pstage:stage1 ;
|
||||
lv2:symbol "trim1" ;
|
||||
lv2:name "Trim";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum -20.0 ;
|
||||
lv2:maximum 20.0 ;
|
||||
units:unit units:db ;
|
||||
rdfs:comment "Trim input level (stage 1)" ;
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 1 ;
|
||||
pg:group pstage:stage1 ;
|
||||
lv2:symbol "locut1" ;
|
||||
lv2:name "Lo Cut";
|
||||
lv2:default 30.0 ;
|
||||
lv2:minimum 30.0 ;
|
||||
lv2:maximum 300.0 ;
|
||||
units:unit units:hz;
|
||||
lv2:designation param:cutoffFrequency ;
|
||||
|
||||
lv2:scalePoint [
|
||||
rdfs:label "OFF" ;
|
||||
rdf:value 30.0
|
||||
];
|
||||
rdfs:comment "Low frequency cutoff (stage 1). Set to minimum to disable." ;
|
||||
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 2 ;
|
||||
pg:group pstage:stage1 ;
|
||||
lv2:symbol "hicut1" ;
|
||||
lv2:name "Hi Cut";
|
||||
lv2:default 19000.0 ;
|
||||
lv2:minimum 1000.0 ;
|
||||
lv2:maximum 19000.0;
|
||||
units:unit units:hz;
|
||||
lv2:designation param:cutoffFrequency ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "OFF" ;
|
||||
rdf:value 19000.0
|
||||
];
|
||||
rdfs:comment "High cutoff frequency (stage 1). Set to maximum to disable." ;
|
||||
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
pg:group pstage:stage1 ;
|
||||
|
||||
lv2:index 3 ;
|
||||
lv2:symbol "shape1" ;
|
||||
lv2:name "Shape1";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0;
|
||||
lv2:rangeStep 2;
|
||||
|
||||
lv2:portProperty lv2:enumeration ;
|
||||
rdfs:comment "Wave Shape" ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "atan" ;
|
||||
rdf:value 0.0
|
||||
],
|
||||
[
|
||||
rdfs:label "triode" ;
|
||||
rdf:value 1.0
|
||||
];
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 4 ;
|
||||
pg:group pstage:stage1 ;
|
||||
lv2:symbol "gain1" ;
|
||||
lv2:name "Gain";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0 ;
|
||||
rdfs:comment "Gain (stage 1)"
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
pg:group pstage:stage1 ;
|
||||
|
||||
lv2:index 5 ;
|
||||
lv2:symbol "bias1" ;
|
||||
lv2:name "Bias1";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum -2.0 ;
|
||||
lv2:maximum 2.0;
|
||||
],
|
||||
|
||||
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 6 ;
|
||||
pg:group pstage:stage2 ;
|
||||
lv2:symbol "trim2" ;
|
||||
lv2:name "Trim";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum -20.0 ;
|
||||
lv2:maximum 20.0 ;
|
||||
units:unit units:db ;
|
||||
rdfs:comment "Trim input (stage 2)" ;
|
||||
],
|
||||
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 7 ;
|
||||
pg:group pstage:stage2 ;
|
||||
lv2:symbol "locut2" ;
|
||||
lv2:name "Lo Cut";
|
||||
lv2:default 30.0 ;
|
||||
lv2:minimum 30.0 ;
|
||||
lv2:maximum 300.0 ;
|
||||
units:unit units:hz;
|
||||
lv2:designation param:cutoffFrequency ;
|
||||
|
||||
lv2:scalePoint [
|
||||
rdfs:label "OFF" ;
|
||||
rdf:value 30.0
|
||||
]
|
||||
;
|
||||
rdfs:comment "Low frequency cutoff (stage 2). Set to minimum to disable." ;
|
||||
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 8 ;
|
||||
pg:group pstage:stage2 ;
|
||||
lv2:symbol "hicut2" ;
|
||||
lv2:name "Hi Cut";
|
||||
lv2:default 19000.0 ;
|
||||
lv2:minimum 1000.0 ;
|
||||
lv2:maximum 19000.0;
|
||||
units:unit units:hz;
|
||||
lv2:designation param:cutoffFrequency ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "OFF" ;
|
||||
rdf:value 19000.0
|
||||
];
|
||||
rdfs:comment "High cutoff frequency (stage 2). Set to maximum to disable." ;
|
||||
|
||||
],
|
||||
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
pg:group pstage:stage2 ;
|
||||
|
||||
lv2:index 9 ;
|
||||
lv2:symbol "shape2" ;
|
||||
lv2:name "Shape2";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0;
|
||||
lv2:rangeStep 2;
|
||||
|
||||
lv2:portProperty lv2:enumeration ;
|
||||
rdfs:comment "Wave Shape" ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "atan" ;
|
||||
rdf:value 0.0
|
||||
],
|
||||
[
|
||||
rdfs:label "triode" ;
|
||||
rdf:value 1.0
|
||||
]
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 10 ;
|
||||
pg:group pstage:stage2 ;
|
||||
lv2:symbol "gain2" ;
|
||||
lv2:name "Gain";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0 ;
|
||||
rdfs:comment "Gain (stage 2)"
|
||||
],
|
||||
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
pg:group pstage:stage2 ;
|
||||
|
||||
lv2:index 11 ;
|
||||
lv2:symbol "bias2" ;
|
||||
lv2:name "Bias2";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum -2.0 ;
|
||||
lv2:maximum 2.0;
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 12 ;
|
||||
pg:group pstage:stage2 ;
|
||||
lv2:symbol "gain2_enable" ;
|
||||
lv2:name "Enable2";
|
||||
lv2:default 1 ;
|
||||
lv2:minimum 0 ;
|
||||
lv2:maximum 1;
|
||||
lv2:portProperty lv2:toggled ;
|
||||
rdfs:comment "Enable gain stage 2" ;
|
||||
],
|
||||
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 13 ;
|
||||
pg:group pstage:stage3 ;
|
||||
lv2:symbol "trim3" ;
|
||||
lv2:name "Trim";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum -20.0 ;
|
||||
lv2:maximum 20.0 ;
|
||||
units:unit units:db ;
|
||||
rdfs:comment "Trim input level (stage 3)." ;
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 14 ;
|
||||
pg:group pstage:stage3 ;
|
||||
lv2:symbol "locut3" ;
|
||||
lv2:name "Lo Cut";
|
||||
lv2:default 30.0 ;
|
||||
lv2:minimum 30.0 ;
|
||||
lv2:maximum 300.0 ;
|
||||
units:unit units:hz;
|
||||
lv2:designation param:cutoffFrequency ;
|
||||
|
||||
lv2:scalePoint [
|
||||
rdfs:label "OFF" ;
|
||||
rdf:value 30.0
|
||||
];
|
||||
rdfs:comment "Low frequency cutoff (stage 3). Set to minimum to disable." ;
|
||||
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 15 ;
|
||||
pg:group pstage:stage3 ;
|
||||
lv2:symbol "hicut3" ;
|
||||
lv2:name "Hi Cut";
|
||||
lv2:default 19000.0 ;
|
||||
lv2:minimum 1000.0 ;
|
||||
lv2:maximum 19000.0;
|
||||
units:unit units:hz;
|
||||
lv2:designation param:cutoffFrequency ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "OFF" ;
|
||||
rdf:value 19000
|
||||
];
|
||||
rdfs:comment "High cutoff frequency (stage 3). Set to minimum to disable." ;
|
||||
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
pg:group pstage:stage3 ;
|
||||
|
||||
lv2:index 16 ;
|
||||
lv2:symbol "shape3" ;
|
||||
lv2:name "Shape3";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0;
|
||||
lv2:rangeStep 2;
|
||||
|
||||
lv2:portProperty lv2:enumeration ;
|
||||
rdfs:comment "Wave Shape" ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "atan" ;
|
||||
rdf:value 0.0
|
||||
],
|
||||
[
|
||||
rdfs:label "triode" ;
|
||||
rdf:value 1.0
|
||||
]
|
||||
],
|
||||
|
||||
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 17 ;
|
||||
pg:group pstage:stage3 ;
|
||||
lv2:symbol "gain3" ;
|
||||
lv2:name "Gain";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0 ;
|
||||
rdfs:comment "Gain (stage 3)."
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
pg:group pstage:stage3 ;
|
||||
|
||||
lv2:index 18 ;
|
||||
lv2:symbol "bias3" ;
|
||||
lv2:name "Bias3";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum -2.0 ;
|
||||
lv2:maximum 2.0;
|
||||
],
|
||||
|
||||
|
||||
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 19 ;
|
||||
pg:group pstage:stage3 ;
|
||||
lv2:symbol "gain3_enable" ;
|
||||
lv2:name "Enable3";
|
||||
lv2:default 1 ;
|
||||
lv2:minimum 0 ;
|
||||
lv2:maximum 1;
|
||||
lv2:portProperty lv2:toggled ;
|
||||
rdfs:comment "Enable gain stage 3" ;
|
||||
],
|
||||
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 20 ;
|
||||
lv2:symbol "sag" ;
|
||||
lv2:name "Sag Vol";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0;
|
||||
rdfs:comment "Transformer sag (volume)." ;
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 21 ;
|
||||
lv2:symbol "sagd" ;
|
||||
lv2:name "Sag Dist";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0;
|
||||
rdfs:comment "Transformer sag (distortion)." ;
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 22 ;
|
||||
lv2:symbol "master" ;
|
||||
lv2:name "Master";
|
||||
lv2:default -0.0 ;
|
||||
lv2:minimum -60.0 ;
|
||||
lv2:maximum 30.0;
|
||||
units:unit units:db;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "-60db" ;
|
||||
rdf:value -60.0
|
||||
] , [
|
||||
rdfs:label "0db" ;
|
||||
rdf:value 0.0
|
||||
], [
|
||||
rdfs:label "30db" ;
|
||||
rdf:value -30.0
|
||||
];
|
||||
rdfs:comment "Master volume." ;
|
||||
|
||||
],
|
||||
[
|
||||
a lv2:AudioPort ,
|
||||
lv2:InputPort ;
|
||||
lv2:index 23 ;
|
||||
lv2:symbol "in" ;
|
||||
lv2:name "In"
|
||||
] , [
|
||||
a lv2:AudioPort ,
|
||||
lv2:OutputPort ;
|
||||
lv2:index 24 ;
|
||||
lv2:symbol "out" ;
|
||||
lv2:name "Out"
|
||||
],[
|
||||
a atom:AtomPort ,
|
||||
lv2:InputPort;
|
||||
atom:bufferType atom:Sequence ;
|
||||
atom:supports patch:Message;
|
||||
lv2:designation lv2:control ;
|
||||
lv2:index 25 ;
|
||||
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 26 ;
|
||||
lv2:symbol "notify" ;
|
||||
lv2:name "Notify" ;
|
||||
rdfs:comment "Plugin to GUI communication" ;
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 27 ;
|
||||
lv2:symbol "sagf" ;
|
||||
lv2:name "SagF";
|
||||
lv2:default 13.0 ;
|
||||
lv2:minimum 5.0 ;
|
||||
lv2:maximum 25.0;
|
||||
rdfs:comment "Sag filter Fc." ;
|
||||
]
|
||||
.
|
||||
|
||||
|
||||
@@ -0,0 +1,151 @@
|
||||
@prefix doap: <http://usefulinc.com/ns/doap#> .
|
||||
@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
|
||||
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
||||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
@prefix units: <http://lv2plug.in/ns/extensions/units#> .
|
||||
@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
|
||||
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
|
||||
@prefix midi: <http://lv2plug.in/ns/ext/midi#> .
|
||||
@prefix epp: <http://lv2plug.in/ns/ext/port-props#> .
|
||||
@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
|
||||
@prefix idpy: <http://harrisonconsoles.com/lv2/inlinedisplay#> .
|
||||
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
|
||||
@prefix mod: <http://moddevices.com/ns/mod#> .
|
||||
@prefix param: <http://lv2plug.in/ns/ext/parameters#> .
|
||||
@prefix work: <http://lv2plug.in/ns/ext/worker#> .
|
||||
|
||||
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
|
||||
@prefix patch: <http://lv2plug.in/ns/ext/patch#> .
|
||||
@prefix plug: <http://two-play.com/plugins/toob-spectrum#> .
|
||||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
@prefix state: <http://lv2plug.in/ns/ext/state#> .
|
||||
@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
|
||||
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
||||
|
||||
|
||||
|
||||
<http://two-play.com/rerdavies#me>
|
||||
a foaf:Person ;
|
||||
foaf:name "Robin Davies" ;
|
||||
foaf:mbox <mailto:rerdavies@gmail.com> ;
|
||||
foaf:homepage <http://two-play.com/> .
|
||||
|
||||
<http://two-play.com/plugins/toob-spectrum>
|
||||
a lv2:Plugin ,
|
||||
lv2:AnalyserPlugin ;
|
||||
doap:name "TooB Spectrum Analyzer" ,
|
||||
"TooB Spectrum Analyzer"@en-gb-gb
|
||||
;
|
||||
doap:license <https://two-play.com/TooB/licenses/isc> ;
|
||||
doap:maintainer <http://two-play.com/rerdavies#me> ;
|
||||
lv2:minorVersion 0 ;
|
||||
lv2:microVersion 13 ;
|
||||
rdfs:comment "TooB spectrum analyzer" ;
|
||||
|
||||
mod:brand "TooB";
|
||||
mod:label "Spectrum Analyzer";
|
||||
lv2:requiredFeature urid:map ;
|
||||
lv2:optionalFeature lv2:hardRTCapable;
|
||||
lv2:extensionData state:interface,
|
||||
work:interface
|
||||
;
|
||||
rdfs:comment """
|
||||
Displays a spectral plot of the input signal.
|
||||
""";
|
||||
lv2:port
|
||||
[
|
||||
a lv2:AudioPort ,
|
||||
lv2:InputPort ;
|
||||
lv2:index 0 ;
|
||||
lv2:symbol "in" ;
|
||||
lv2:name "In"
|
||||
] ,
|
||||
[
|
||||
a lv2:AudioPort ,
|
||||
lv2:OutputPort ;
|
||||
lv2:index 1 ;
|
||||
lv2:symbol "out" ;
|
||||
lv2:name "Out"
|
||||
], [
|
||||
a atom:AtomPort ,
|
||||
lv2:InputPort;
|
||||
atom:bufferType atom:Sequence ;
|
||||
atom:supports patch:Message;
|
||||
lv2:designation lv2:control ;
|
||||
lv2:index 2 ;
|
||||
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 3;
|
||||
lv2:symbol "notify" ;
|
||||
lv2:name "Notify" ;
|
||||
rdfs:comment "Plugin to GUI communication" ;
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 4 ;
|
||||
lv2:symbol "blockSize" ;
|
||||
lv2:name "Block Size";
|
||||
lv2:default 4096.0 ;
|
||||
lv2:minimum 1024.0 ;
|
||||
lv2:maximum 8192.0;
|
||||
|
||||
lv2:portProperty lv2:enumeration ;
|
||||
rdfs:comment "Wave Shape" ;
|
||||
lv2:scalePoint [
|
||||
rdfs:label "1024" ;
|
||||
rdf:value 1024.0
|
||||
],
|
||||
[
|
||||
rdfs:label "2048" ;
|
||||
rdf:value 2048.0
|
||||
],
|
||||
[
|
||||
rdfs:label "4096" ;
|
||||
rdf:value 4096.0
|
||||
],
|
||||
[
|
||||
rdfs:label "8192" ;
|
||||
rdf:value 8192.0
|
||||
];
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 5 ;
|
||||
lv2:symbol "minF" ;
|
||||
lv2:name "Min F";
|
||||
lv2:default 60.0 ;
|
||||
lv2:minimum 10.0 ;
|
||||
lv2:maximum 400.0 ;
|
||||
units:unit units:hz;
|
||||
|
||||
rdfs:comment "Minimum frequency displayed." ;
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 6 ;
|
||||
lv2:symbol "maxF" ;
|
||||
lv2:name "Max F";
|
||||
lv2:default 16000.0 ;
|
||||
lv2:minimum 1000.0 ;
|
||||
lv2:maximum 22000.0 ;
|
||||
units:unit units:hz;
|
||||
|
||||
rdfs:comment "Maximum frequency displayed." ;
|
||||
|
||||
];
|
||||
.
|
||||
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
@prefix doap: <http://usefulinc.com/ns/doap#> .
|
||||
@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
|
||||
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
||||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
@prefix units: <http://lv2plug.in/ns/extensions/units#> .
|
||||
@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
|
||||
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
|
||||
@prefix midi: <http://lv2plug.in/ns/ext/midi#> .
|
||||
@prefix epp: <http://lv2plug.in/ns/ext/port-props#> .
|
||||
@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
|
||||
@prefix idpy: <http://harrisonconsoles.com/lv2/inlinedisplay#> .
|
||||
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
|
||||
@prefix mod: <http://moddevices.com/ns/mod#> .
|
||||
@prefix param: <http://lv2plug.in/ns/ext/parameters#> .
|
||||
@prefix work: <http://lv2plug.in/ns/ext/worker#> .
|
||||
|
||||
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
|
||||
@prefix patch: <http://lv2plug.in/ns/ext/patch#> .
|
||||
@prefix plug: <http://two-play.com/plugins/toob-tone-stack#> .
|
||||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
@prefix state: <http://lv2plug.in/ns/ext/state#> .
|
||||
@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
|
||||
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
||||
|
||||
|
||||
<http://two-play.com/plugins/toob#frequencyResponseVector>
|
||||
a lv2:Parameter ;
|
||||
rdfs:label "frequencyResponseVector" ;
|
||||
rdfs:range atom:Vector .
|
||||
|
||||
<http://two-play.com/plugins/toob-tone-stack#uiState>
|
||||
a lv2:Parameter ;
|
||||
rdfs:label "uiState" ;
|
||||
rdfs:range atom:Vector .
|
||||
|
||||
|
||||
<http://two-play.com/rerdavies#me>
|
||||
a foaf:Person ;
|
||||
foaf:name "Robin Davies" ;
|
||||
foaf:mbox <mailto:rerdavies@gmail.com> ;
|
||||
foaf:homepage <http://two-play.com/> .
|
||||
|
||||
<http://two-play.com/plugins/toob-tone-stack>
|
||||
a lv2:Plugin ,
|
||||
lv2:SimulatorPlugin ;
|
||||
doap:name "TooB Tone Stack" ,
|
||||
"TooB Tone Stack"@en-gb-gb
|
||||
;
|
||||
doap:license <https://two-play.com/TooB/licenses/isc> ;
|
||||
doap:maintainer <http://two-play.com/rerdavies#me> ;
|
||||
lv2:minorVersion 0 ;
|
||||
lv2:microVersion 13 ;
|
||||
rdfs:comment """
|
||||
The TooB Tone Stack emulates the tone controls of either a 59' Bassman or a JCM8000 guitar amplifier.
|
||||
|
||||
The TooB Input Stage is part of the TooB Amp Emulation Toolkit. Typically, you would
|
||||
use the following plugins in the following order.
|
||||
|
||||
- TooB Input Stage
|
||||
|
||||
- TooB Tone Stack
|
||||
|
||||
- Toob Power Stage
|
||||
|
||||
- Toob Cabinet Simulator
|
||||
""" ;
|
||||
|
||||
mod:brand "TooB";
|
||||
mod:label "Tone Stack";
|
||||
lv2:requiredFeature urid:map ;
|
||||
lv2:optionalFeature lv2:hardRTCapable;
|
||||
lv2:extensionData state:interface;
|
||||
patch:readable
|
||||
<http://two-play.com/plugins/toob#frequencyResponseVector>
|
||||
;
|
||||
lv2:port
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 0 ;
|
||||
lv2:symbol "bass" ;
|
||||
lv2:name "Bass";
|
||||
lv2:default 0.5 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0 ;
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 1 ;
|
||||
lv2:symbol "mid" ;
|
||||
lv2:name "Mid";
|
||||
lv2:default 0.5 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0 ;
|
||||
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 2 ;
|
||||
lv2:symbol "treble" ;
|
||||
lv2:name "Treble";
|
||||
lv2:default 0.5 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0;
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 3 ;
|
||||
lv2:symbol "ampmodel" ;
|
||||
lv2:name "Model";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 2.0;
|
||||
lv2:portProperty lv2:enumeration ;
|
||||
|
||||
lv2:scalePoint [
|
||||
rdfs:label "Bassman" ;
|
||||
rdf:value 0.0
|
||||
] , [
|
||||
rdfs:label "JCM8000" ;
|
||||
rdf:value 1.0
|
||||
], [
|
||||
rdfs:label "Baxandall" ;
|
||||
rdf:value 2.0
|
||||
];
|
||||
],
|
||||
[
|
||||
a lv2:AudioPort ,
|
||||
lv2:InputPort ;
|
||||
lv2:index 4 ;
|
||||
lv2:symbol "in" ;
|
||||
lv2:name "In"
|
||||
], [
|
||||
a lv2:AudioPort ,
|
||||
lv2:OutputPort ;
|
||||
lv2:index 5 ;
|
||||
lv2:symbol "out" ;
|
||||
lv2:name "Out"
|
||||
],[
|
||||
a atom:AtomPort ,
|
||||
lv2:InputPort;
|
||||
atom:bufferType atom:Sequence ;
|
||||
atom:supports patch:Message;
|
||||
lv2:designation lv2:control ;
|
||||
lv2:index 6 ;
|
||||
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 7 ;
|
||||
lv2:symbol "notify" ;
|
||||
lv2:name "Notify" ;
|
||||
rdfs:comment "Plugin to GUI communication" ;
|
||||
]
|
||||
.
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ToobAmp.so.0
|
||||
@@ -0,0 +1 @@
|
||||
ToobAmp.so.0.0.2
|
||||
@@ -0,0 +1,344 @@
|
||||
@prefix doap: <http://usefulinc.com/ns/doap#> .
|
||||
@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
|
||||
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
||||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
@prefix units: <http://lv2plug.in/ns/extensions/units#> .
|
||||
@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
|
||||
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
|
||||
@prefix midi: <http://lv2plug.in/ns/ext/midi#> .
|
||||
@prefix epp: <http://lv2plug.in/ns/ext/port-props#> .
|
||||
@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
|
||||
@prefix idpy: <http://harrisonconsoles.com/lv2/inlinedisplay#> .
|
||||
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
|
||||
@prefix mod: <http://moddevices.com/ns/mod#> .
|
||||
@prefix param: <http://lv2plug.in/ns/ext/parameters#> .
|
||||
@prefix work: <http://lv2plug.in/ns/ext/worker#> .
|
||||
@prefix pg: <http://lv2plug.in/ns/ext/port-groups#> .
|
||||
|
||||
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
|
||||
@prefix patch: <http://lv2plug.in/ns/ext/patch#> .
|
||||
@prefix plug: <http://two-play.com/plugins/toob-tone-stack#> .
|
||||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
@prefix state: <http://lv2plug.in/ns/ext/state#> .
|
||||
@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
|
||||
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
||||
@prefix toobml: <http://two-play.com/plugins/toob-ml#> .
|
||||
|
||||
toobml:filterGroup
|
||||
a param:ControlGroup ,
|
||||
pg:InputGroup ;
|
||||
lv2:name "EQ" ;
|
||||
lv2:symbol "filter" .
|
||||
|
||||
|
||||
|
||||
<http://two-play.com/rerdavies#me>
|
||||
a foaf:Person ;
|
||||
foaf:name "Robin Davies" ;
|
||||
foaf:mbox <mailto:rerdavies@gmail.com> ;
|
||||
foaf:homepage <http://two-play.com/> .
|
||||
|
||||
<http://two-play.com/plugins/toob-ml>
|
||||
a lv2:Plugin ,
|
||||
lv2:SimulatorPlugin ;
|
||||
doap:name "TooB ML Amplifier" ,
|
||||
"TooB ML Amplifier"@en-gb-gb
|
||||
;
|
||||
doap:license <https://two-play.com/TooB/licenses/isc> ;
|
||||
doap:maintainer <http://two-play.com/rerdavies#me> ;
|
||||
lv2:minorVersion 0 ;
|
||||
lv2:microVersion 13 ;
|
||||
rdfs:comment """
|
||||
The TooB ML Amplifier plugin provides emulation of a variety of amplifiers and overdrive pedals that are implemented
|
||||
using artifical intelligence/machine learning modelling of real amplifiers.
|
||||
|
||||
A few models are trained to emulate the effects of the gain control on the amps that they model, but most are not.
|
||||
|
||||
For convenience, tone controls are provided for rough shaping of tone before the input signal is fed to the neural net models. The tone
|
||||
section can be completely bypassed by setting all tone controls to exactly 0.5.
|
||||
|
||||
The TooB ML Amplifier is based heavily on code from the RTNeural project (https://github.com/jatinchowdhury18/RTNeural), by Jatin Chowdhury,
|
||||
and uses model files from from the GuitarML Neural Pi project (https://github.com/GuitarML/NeuralPi).
|
||||
|
||||
""" ;
|
||||
|
||||
mod:brand "TooB";
|
||||
mod:label "ML Amplifier";
|
||||
lv2:requiredFeature urid:map, work:schedule ;
|
||||
lv2:optionalFeature lv2:hardRTCapable;
|
||||
lv2:extensionData state:interface, work:interface;
|
||||
|
||||
patch:readable
|
||||
<http://two-play.com/plugins/toob#frequencyResponseVector>
|
||||
;
|
||||
|
||||
lv2:port
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 0;
|
||||
lv2:symbol "trim" ;
|
||||
lv2:name "Trim";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum -30.0 ;
|
||||
lv2:maximum 30.0 ;
|
||||
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:symbol "model" ;
|
||||
lv2:name "Model" ;
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0 ;
|
||||
lv2:portProperty lv2:enumeration ;
|
||||
lv2:scalePoint
|
||||
[
|
||||
rdfs:label "BluesJR";
|
||||
rdf:value 0.0
|
||||
],
|
||||
[
|
||||
rdfs:label "BluesJR FullD";
|
||||
rdf:value 1.0
|
||||
],
|
||||
[
|
||||
rdfs:label "BossDistortionDs1 highGain";
|
||||
rdf:value 2.0
|
||||
],
|
||||
[
|
||||
rdfs:label "BossMetalZoneMt2 highGain";
|
||||
rdf:value 3.0
|
||||
],
|
||||
[
|
||||
rdfs:label "DumbleClone clean";
|
||||
rdf:value 4.0
|
||||
],
|
||||
[
|
||||
rdfs:label "DumbleClone highGain";
|
||||
rdf:value 5.0
|
||||
],
|
||||
[
|
||||
rdfs:label "DumbleClone medGain";
|
||||
rdf:value 6.0
|
||||
],
|
||||
[
|
||||
rdfs:label "EH CockFight highDrive";
|
||||
rdf:value 7.0
|
||||
],
|
||||
[
|
||||
rdfs:label "FenderPrinceton clean";
|
||||
rdf:value 8.0
|
||||
],
|
||||
[
|
||||
rdfs:label "FenderPrinceton highLevel";
|
||||
rdf:value 9.0
|
||||
],
|
||||
[
|
||||
rdfs:label "Goat DistortionGen highDist";
|
||||
rdf:value 10.0
|
||||
],
|
||||
[
|
||||
rdfs:label "Goat DistortionGen lowDist";
|
||||
rdf:value 11.0
|
||||
],
|
||||
[
|
||||
rdfs:label "HT40 Overdrive";
|
||||
rdf:value 12.0
|
||||
],
|
||||
[
|
||||
rdfs:label "LittleBigMuff";
|
||||
rdf:value 13.0
|
||||
],
|
||||
[
|
||||
rdfs:label "MIAudio Crunchbox highGain";
|
||||
rdf:value 14.0
|
||||
],
|
||||
[
|
||||
rdfs:label "MIAudio Crunchbox midGain";
|
||||
rdf:value 15.0
|
||||
],
|
||||
[
|
||||
rdfs:label "MesaBoogieMk2b Clean";
|
||||
rdf:value 16.0
|
||||
],
|
||||
[
|
||||
rdfs:label "MesaBoogieMk2b Crunch";
|
||||
rdf:value 17.0
|
||||
],
|
||||
[
|
||||
rdfs:label "MesaBoogieMk2b highGain";
|
||||
rdf:value 18.0
|
||||
],
|
||||
[
|
||||
rdfs:label "MesaBoogie Studio22 Clean";
|
||||
rdf:value 19.0
|
||||
],
|
||||
[
|
||||
rdfs:label "MesaBoogie Studio22 highGain";
|
||||
rdf:value 20.0
|
||||
],
|
||||
[
|
||||
rdfs:label "PAiA AxeGrinder highDist";
|
||||
rdf:value 21.0
|
||||
],
|
||||
[
|
||||
rdfs:label "ProCoRat";
|
||||
rdf:value 22.0
|
||||
],
|
||||
[
|
||||
rdfs:label "RockmanXPR Clean";
|
||||
rdf:value 23.0
|
||||
],
|
||||
[
|
||||
rdfs:label "RockmanXPR Distortion";
|
||||
rdf:value 24.0
|
||||
],
|
||||
[
|
||||
rdfs:label "Rockman Acoustic";
|
||||
rdf:value 25.0
|
||||
],
|
||||
[
|
||||
rdfs:label "Rockman Ultimatum highGain";
|
||||
rdf:value 26.0
|
||||
],
|
||||
[
|
||||
rdfs:label "Soldano crunch";
|
||||
rdf:value 27.0
|
||||
],
|
||||
[
|
||||
rdfs:label "Soldano highGain";
|
||||
rdf:value 28.0
|
||||
],
|
||||
[
|
||||
rdfs:label "TS9";
|
||||
rdf:value 29.0
|
||||
],
|
||||
[
|
||||
rdfs:label "TS9 FullD";
|
||||
rdf:value 30.0
|
||||
],
|
||||
[
|
||||
rdfs:label "WamplerTumnus highGain";
|
||||
rdf:value 31.0
|
||||
],
|
||||
[
|
||||
rdfs:label "XoticCompSP";
|
||||
rdf:value 32.0
|
||||
];
|
||||
] ,
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 5 ;
|
||||
lv2:symbol "gain" ;
|
||||
lv2:name "Gain";
|
||||
lv2:default 3.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 10.0 ;
|
||||
rdf:comment "Model gain (used by some but not all models)"
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 6 ;
|
||||
lv2:symbol "master" ;
|
||||
lv2:name "Master";
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum -30.0 ;
|
||||
lv2:maximum 30.0 ;
|
||||
units:unit units:db ;
|
||||
rdf:comment "Output volume trim (pot-model)";
|
||||
],
|
||||
|
||||
[
|
||||
a lv2:AudioPort ,
|
||||
lv2:InputPort ;
|
||||
lv2:index 7 ;
|
||||
lv2:symbol "in" ;
|
||||
lv2:name "In"
|
||||
], [
|
||||
a lv2:AudioPort ,
|
||||
lv2:OutputPort ;
|
||||
lv2:index 8 ;
|
||||
lv2:symbol "out" ;
|
||||
lv2:name "Out"
|
||||
]
|
||||
,
|
||||
[
|
||||
a atom:AtomPort ,
|
||||
lv2:InputPort;
|
||||
atom:bufferType atom:Sequence ;
|
||||
atom:supports patch:Message;
|
||||
lv2:designation lv2:control ;
|
||||
lv2:index 9 ;
|
||||
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:symbol "notify" ;
|
||||
lv2:name "Notify" ;
|
||||
rdfs:comment "Plugin to GUI communication" ;
|
||||
]
|
||||
.
|
||||
|
||||
|
||||
@@ -0,0 +1,140 @@
|
||||
@prefix doap: <http://usefulinc.com/ns/doap#> .
|
||||
@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
|
||||
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
|
||||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
@prefix units: <http://lv2plug.in/ns/extensions/units#> .
|
||||
@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
|
||||
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
|
||||
@prefix midi: <http://lv2plug.in/ns/ext/midi#> .
|
||||
@prefix epp: <http://lv2plug.in/ns/ext/port-props#> .
|
||||
@prefix uiext: <http://lv2plug.in/ns/extensions/ui#> .
|
||||
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
|
||||
@prefix param: <http://lv2plug.in/ns/ext/parameters#> .
|
||||
@prefix work: <http://lv2plug.in/ns/ext/worker#> .
|
||||
|
||||
@prefix atom: <http://lv2plug.in/ns/ext/atom#> .
|
||||
@prefix patch: <http://lv2plug.in/ns/ext/patch#> .
|
||||
@prefix plug: <http://two-play.com/plugins/toob-tone-stack#> .
|
||||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
@prefix state: <http://lv2plug.in/ns/ext/state#> .
|
||||
@prefix urid: <http://lv2plug.in/ns/ext/urid#> .
|
||||
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
||||
@prefix toobtuner: <http://two-play.com/plugins/toob-tuner#> .
|
||||
|
||||
|
||||
|
||||
|
||||
<http://two-play.com/rerdavies#me>
|
||||
a foaf:Person ;
|
||||
foaf:name "Robin Davies" ;
|
||||
foaf:mbox <mailto:rerdavies@gmail.com> ;
|
||||
foaf:homepage <http://two-play.com/> .
|
||||
|
||||
<http://two-play.com/plugins/toob-tuner>
|
||||
a lv2:Plugin ,
|
||||
lv2:AnalyserPlugin ;
|
||||
doap:name "TooB Tuner";
|
||||
doap:license <https://two-play.com/TooB/licenses/isc> ;
|
||||
doap:maintainer <http://two-play.com/rerdavies#me> ;
|
||||
lv2:minorVersion 0 ;
|
||||
lv2:microVersion 1 ;
|
||||
rdfs:comment """
|
||||
A chromatic guitar tuner.
|
||||
""" ;
|
||||
|
||||
lv2:requiredFeature urid:map, work:schedule ;
|
||||
lv2:optionalFeature lv2:hardRTCapable;
|
||||
lv2:extensionData state:interface, work:interface;
|
||||
|
||||
lv2:port
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 0;
|
||||
lv2:symbol "REFFREQ" ;
|
||||
lv2:name "RefFreq";
|
||||
lv2:default 440 ;
|
||||
lv2:minimum 425;
|
||||
lv2:maximum 455 ;
|
||||
units:unit units:hz ;
|
||||
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 1 ;
|
||||
lv2:symbol "THRESHOLD" ;
|
||||
lv2:name "Threshold";
|
||||
|
||||
|
||||
lv2:default -37 ;
|
||||
lv2:minimum -60 ;
|
||||
lv2:maximum 0 ;
|
||||
units:unit units:db ;
|
||||
|
||||
], [
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:portProperty lv2:integer;
|
||||
|
||||
lv2:index 2 ;
|
||||
lv2:symbol "MUTE" ;
|
||||
lv2:name "Mute";
|
||||
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1.0 ;
|
||||
],
|
||||
[
|
||||
a lv2:OutputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 3 ;
|
||||
lv2:symbol "FREQ" ;
|
||||
lv2:name "Freq";
|
||||
|
||||
lv2:default 0.0 ;
|
||||
lv2:minimum 0.0 ;
|
||||
lv2:maximum 1200.0 ;
|
||||
],
|
||||
[
|
||||
a lv2:AudioPort ,
|
||||
lv2:InputPort ;
|
||||
lv2:index 4 ;
|
||||
lv2:symbol "in" ;
|
||||
lv2:name "In"
|
||||
], [
|
||||
a lv2:AudioPort ,
|
||||
lv2:OutputPort ;
|
||||
lv2:index 5 ;
|
||||
lv2:symbol "out" ;
|
||||
lv2:name "Out"
|
||||
]
|
||||
,
|
||||
[
|
||||
a atom:AtomPort ,
|
||||
lv2:InputPort;
|
||||
atom:bufferType atom:Sequence ;
|
||||
atom:supports patch:Message;
|
||||
lv2:designation lv2:control ;
|
||||
lv2:index 6 ;
|
||||
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 7 ;
|
||||
lv2:symbol "notify" ;
|
||||
lv2:name "Notify" ;
|
||||
rdfs:comment "Plugin to GUI communication" ;
|
||||
]
|
||||
.
|
||||
|
||||
|
||||
@@ -0,0 +1,271 @@
|
||||
@prefix lv2: <http://lv2plug.in/ns/lv2core#> .
|
||||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
@prefix modgui: <http://moddevices.com/ns/modgui#> .
|
||||
|
||||
|
||||
<http://two-play.com/plugins/toob-tone-stack> a lv2:Plugin ;
|
||||
lv2:binary <ToobAmp.so> ;
|
||||
rdfs:seeAlso <ToneStack.ttl> .
|
||||
|
||||
<http://two-play.com/plugins/toob-ml> a lv2:Plugin ;
|
||||
lv2:binary <ToobAmp.so> ;
|
||||
rdfs:seeAlso <ToobML.ttl> .
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<http://two-play.com/plugins/toob-power-stage> a lv2:Plugin ;
|
||||
lv2:binary <ToobAmp.so> ;
|
||||
rdfs:seeAlso <PowerStage.ttl> .
|
||||
|
||||
<http://two-play.com/plugins/toob-power-stage-2> a lv2:Plugin ;
|
||||
lv2:binary <ToobAmp.so> ;
|
||||
rdfs:seeAlso <PowerStage2.ttl> .
|
||||
|
||||
<http://two-play.com/plugins/toob-input_stage> a lv2:Plugin ;
|
||||
lv2:binary <ToobAmp.so> ;
|
||||
rdfs:seeAlso <InputStage.ttl> .
|
||||
|
||||
<http://two-play.com/plugins/toob-cab-sim> a lv2:Plugin ;
|
||||
lv2:binary <ToobAmp.so> ;
|
||||
rdfs:seeAlso <CabSim.ttl> .
|
||||
|
||||
<http://two-play.com/plugins/toob-spectrum> a lv2:Plugin ;
|
||||
lv2:binary <ToobAmp.so> ;
|
||||
rdfs:seeAlso <SpectrumAnalyzer.ttl> .
|
||||
|
||||
<http://two-play.com/plugins/toob-tuner> a lv2:Plugin ;
|
||||
lv2:binary <ToobAmp.so> ;
|
||||
rdfs:seeAlso <ToobTuner.ttl> .
|
||||
|
||||
|
||||
|
||||
<http://two-play.com/plugins/toob-power-stage>
|
||||
modgui:gui [
|
||||
modgui:resourcesDirectory <modgui> ;
|
||||
modgui:iconTemplate <modgui/icon-toob-power-stage.html> ;
|
||||
modgui:stylesheet <modgui/stylesheet-toob.css> ;
|
||||
modgui:screenshot <modgui/screenshot-toob-power-stage.png> ;
|
||||
modgui:thumbnail <modgui/thumbnail-toob-power-stage.png> ;
|
||||
modgui:javascript <modgui/script-toob-power-stage.js> ;
|
||||
|
||||
modgui:brand "TooB" ;
|
||||
modgui:label "TooB Power Stage" ;
|
||||
|
||||
modgui:monitoredOutputs [ lv2:symbol "notify"] ;
|
||||
modgui:port [
|
||||
lv2:index 0 ;
|
||||
lv2:symbol "trim1" ;
|
||||
lv2:name "TRIM" ;
|
||||
] , [
|
||||
lv2:index 1 ;
|
||||
lv2:symbol "gain1" ;
|
||||
lv2:name "GAIN" ;
|
||||
] , [
|
||||
lv2:index 2 ;
|
||||
lv2:symbol "locut1" ;
|
||||
lv2:name "LO CUT" ;
|
||||
] , [
|
||||
lv2:index 3 ;
|
||||
lv2:symbol "hicut1" ;
|
||||
lv2:name "HI CUT" ;
|
||||
], [
|
||||
lv2:index 22 ;
|
||||
lv2:symbol "shape1" ;
|
||||
lv2:name "SHAPE1" ;
|
||||
], [
|
||||
lv2:index 4 ;
|
||||
lv2:symbol "gain2_enable" ;
|
||||
lv2:name "Ena" ;
|
||||
] , [
|
||||
lv2:index 5 ;
|
||||
lv2:symbol "trim2" ;
|
||||
lv2:name "TRIM" ;
|
||||
] , [
|
||||
lv2:index 6 ;
|
||||
lv2:symbol "gain2" ;
|
||||
lv2:name "GAIN" ;
|
||||
] , [
|
||||
lv2:index 7 ;
|
||||
lv2:symbol "locut2" ;
|
||||
lv2:name "LO CUT" ;
|
||||
] , [
|
||||
lv2:index 8 ;
|
||||
lv2:symbol "hicut2" ;
|
||||
lv2:name "HI CUT" ;
|
||||
], [
|
||||
lv2:index 23 ;
|
||||
lv2:symbol "shape2" ;
|
||||
lv2:name "SHAPE2" ;
|
||||
] , [
|
||||
lv2:index 9 ;
|
||||
lv2:symbol "gain3_enable" ;
|
||||
lv2:name "Ena" ;
|
||||
] ,
|
||||
[
|
||||
lv2:index 10 ;
|
||||
lv2:symbol "trim3" ;
|
||||
lv2:name "TRIM" ;
|
||||
] , [
|
||||
lv2:index 11 ;
|
||||
lv2:symbol "gain3" ;
|
||||
lv2:name "GAIN" ;
|
||||
] , [
|
||||
lv2:index 12 ;
|
||||
lv2:symbol "locut3" ;
|
||||
lv2:name "LO CUT" ;
|
||||
] , [
|
||||
lv2:index 13 ;
|
||||
lv2:symbol "hicut3" ;
|
||||
lv2:name "HI CUT" ;
|
||||
] , [
|
||||
lv2:index 24 ;
|
||||
lv2:symbol "shape3" ;
|
||||
lv2:name "SHAPE3" ;
|
||||
], [
|
||||
lv2:index 14 ;
|
||||
lv2:symbol "sag" ;
|
||||
lv2:name "SAG" ;
|
||||
] , [
|
||||
lv2:index 15 ;
|
||||
lv2:symbol "sagd" ;
|
||||
lv2:name "SAGD" ;
|
||||
], [
|
||||
lv2:index 16 ;
|
||||
lv2:symbol "master" ;
|
||||
lv2:name "MASTER" ;
|
||||
],
|
||||
[
|
||||
a lv2:InputPort ,
|
||||
lv2:ControlPort ;
|
||||
|
||||
lv2:index 21 ;
|
||||
lv2:symbol "sagf" ;
|
||||
lv2:name "SagF";
|
||||
]
|
||||
;
|
||||
] .
|
||||
|
||||
<http://two-play.com/plugins/toob-input_stage>
|
||||
modgui:gui [
|
||||
modgui:resourcesDirectory <modgui> ;
|
||||
modgui:javascript <modgui/script-toob-input-stage.js> ;
|
||||
modgui:iconTemplate <modgui/icon-toob-input-stage.html> ;
|
||||
modgui:stylesheet <modgui/stylesheet-toob.css> ;
|
||||
modgui:screenshot <modgui/screenshot-toob-input-stage.png> ;
|
||||
modgui:thumbnail <modgui/thumbnail-toob-input-stage.png> ;
|
||||
|
||||
modgui:brand "TooB" ;
|
||||
modgui:label "TooB Input Stage" ;
|
||||
|
||||
modgui:monitoredOutputs [ lv2:symbol "notify"] ;
|
||||
modgui:port [
|
||||
lv2:index 0 ;
|
||||
lv2:symbol "trim" ;
|
||||
lv2:name "Trim" ;
|
||||
] , [
|
||||
lv2:index 1 ;
|
||||
lv2:symbol "locut" ;
|
||||
lv2:name "Lo Cut" ;
|
||||
] , [
|
||||
lv2:index 2 ;
|
||||
lv2:symbol "bright" ;
|
||||
lv2:name "Bright" ;
|
||||
] , [
|
||||
lv2:index 3 ;
|
||||
lv2:symbol "brightf" ;
|
||||
lv2:name "Bright F" ;
|
||||
] , [
|
||||
lv2:index 4 ;
|
||||
lv2:symbol "hicut" ;
|
||||
lv2:name "Hi Cut" ;
|
||||
] , [
|
||||
lv2:index 5 ;
|
||||
lv2:symbol "gate_t" ;
|
||||
lv2:name "Gate T" ;
|
||||
] , [
|
||||
lv2:index 6 ;
|
||||
lv2:symbol "boost" ;
|
||||
lv2:name "Boost" ;
|
||||
]
|
||||
;
|
||||
] .
|
||||
|
||||
<http://two-play.com/plugins/toob-cab-sim>
|
||||
modgui:gui [
|
||||
modgui:resourcesDirectory <modgui> ;
|
||||
modgui:javascript <modgui/script-toob-cab-sim.js> ;
|
||||
modgui:iconTemplate <modgui/icon-toob-cab-sim.html> ;
|
||||
modgui:stylesheet <modgui/stylesheet-toob.css> ;
|
||||
modgui:screenshot <modgui/screenshot-toob-cab-sim.png> ;
|
||||
modgui:thumbnail <modgui/thumbnail-toob-cab-sim.png> ;
|
||||
|
||||
modgui:brand "TooB" ;
|
||||
modgui:label "TooB Cab Simulator" ;
|
||||
|
||||
modgui:monitoredOutputs [ lv2:symbol "notify"] ;
|
||||
modgui:port [
|
||||
lv2:index 0 ;
|
||||
lv2:symbol "locut" ;
|
||||
lv2:name "Lo Cut" ;
|
||||
] , [
|
||||
lv2:index 1 ;
|
||||
lv2:symbol "bright" ;
|
||||
lv2:name "Bright" ;
|
||||
] , [
|
||||
lv2:index 2 ;
|
||||
lv2:symbol "brightf" ;
|
||||
lv2:name "F" ;
|
||||
] , [
|
||||
lv2:index 3 ;
|
||||
lv2:symbol "hicut" ;
|
||||
lv2:name "Hi Cut" ;
|
||||
], [
|
||||
lv2:index 4 ;
|
||||
lv2:symbol "comb" ;
|
||||
lv2:name "Comb" ;
|
||||
], [
|
||||
lv2:index 5 ;
|
||||
lv2:symbol "combf" ;
|
||||
lv2:name "F" ;
|
||||
], [
|
||||
lv2:index 6 ;
|
||||
lv2:symbol "trim" ;
|
||||
lv2:name "Trim" ;
|
||||
]
|
||||
;
|
||||
] .
|
||||
|
||||
<http://two-play.com/plugins/toob-tone-stack>
|
||||
modgui:gui [
|
||||
modgui:resourcesDirectory <modgui> ;
|
||||
modgui:javascript <modgui/script-toob-tone-stack.js> ;
|
||||
modgui:iconTemplate <modgui/icon-toob-tone-stack.html> ;
|
||||
modgui:stylesheet <modgui/stylesheet-toob.css> ;
|
||||
modgui:screenshot <modgui/screenshot-toob-tone-stack.png> ;
|
||||
modgui:thumbnail <modgui/thumbnail-toob-tone-stack.png> ;
|
||||
|
||||
modgui:brand "TooB" ;
|
||||
modgui:label "TooB Tone Stack" ;
|
||||
|
||||
modgui:monitoredOutputs [ lv2:symbol "notify"] ;
|
||||
modgui:port [
|
||||
lv2:index 0 ;
|
||||
lv2:symbol "bass" ;
|
||||
lv2:name "Bass" ;
|
||||
] , [
|
||||
lv2:index 1 ;
|
||||
lv2:symbol "mid" ;
|
||||
lv2:name "Mid" ;
|
||||
], [
|
||||
lv2:index 2 ;
|
||||
lv2:symbol "treble" ;
|
||||
lv2:name "Treble" ;
|
||||
] , [
|
||||
lv2:index 3 ;
|
||||
lv2:symbol "ampmodel" ;
|
||||
lv2:name "Amp Model" ;
|
||||
]
|
||||
;
|
||||
] .
|
||||
@@ -0,0 +1 @@
|
||||
# NeuralPi Tones
|
||||
@@ -0,0 +1,33 @@
|
||||
BluesJR.json
|
||||
BluesJR_FullD.json
|
||||
BossDistortionDs1_highGain.json
|
||||
BossMetalZoneMt2_highGain.json
|
||||
DumbleClone_clean.json
|
||||
DumbleClone_highGain.json
|
||||
DumbleClone_medGain.json
|
||||
EH_CockFight_highDrive.json
|
||||
FenderPrinceton_clean.json
|
||||
FenderPrinceton_highLevel.json
|
||||
Goat_DistortionGen_highDist.json
|
||||
Goat_DistortionGen_lowDist.json
|
||||
HT40_Overdrive.json
|
||||
LittleBigMuff.json
|
||||
MIAudio_Crunchbox_highGain.json
|
||||
MIAudio_Crunchbox_midGain.json
|
||||
MesaBoogieMk2b_Clean.json
|
||||
MesaBoogieMk2b_Crunch.json
|
||||
MesaBoogieMk2b_highGain.json
|
||||
MesaBoogie_Studio22_Clean.json
|
||||
MesaBoogie_Studio22_highGain.json
|
||||
PAiA_AxeGrinder_highDist.json
|
||||
ProCoRat.json
|
||||
RockmanXPR_Clean.json
|
||||
RockmanXPR_Distortion.json
|
||||
Rockman_Acoustic.json
|
||||
Rockman_Ultimatum_highGain.json
|
||||
Soldano_crunch.json
|
||||
Soldano_highGain.json
|
||||
TS9.json
|
||||
TS9_FullD.json
|
||||
WamplerTumnus_highGain.json
|
||||
XoticCompSP.json
|
||||
@@ -0,0 +1,115 @@
|
||||
<div class="mod-pedal mod-rack-reaktor{{{cns}}} mod-rack-cab-sim{{{cns}}}">
|
||||
<script id="ToobFrequencyScript" src="/resources/js/ToobFrequencyPlot.js{{{ns}}}" type="application/javascript" />
|
||||
<script id="ToobVuScript" src="/resources/js/ToobVu.js{{{ns}}}" type="application/javascript" />
|
||||
<div mod-role="drag-handle" class="mod-drag-handle" style="height:100%; width: 100%"></div>
|
||||
<div class="mod-control-group">
|
||||
|
||||
<div class="toob_column_grid" style="height: 100%">
|
||||
<div class="toob_column">
|
||||
<div class="mod-switch clearfix" mod-role="bypass">
|
||||
<div class="mod-switch-image" mod-role="bypass-light"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="toob_column" >
|
||||
<div class="toob_row_grid" style="flex-flow: row wrap; width: 240px" >
|
||||
<div id="toob_cabsim_fresp" class="toob_frequency_response toob_cabsim_fresp toob_row"
|
||||
/>
|
||||
{{#controls.0}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.0}}
|
||||
{{#controls.1}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.1}}
|
||||
{{#controls.3}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.3}}
|
||||
{{#controls.4}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.4}}
|
||||
|
||||
<div class="toob_row" style="width: 120px; padding-left: 60px">
|
||||
{{#controls.2}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.2}}
|
||||
</div>
|
||||
<div class="toob_row" style="width: 120px; padding-left: 60px">
|
||||
{{#controls.5}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.5}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="toob_column clearfix">
|
||||
<div class="toob_row_grid">
|
||||
<div class="toob_row">
|
||||
<div class="toob_vu cabsim_vu" >
|
||||
</div>
|
||||
</div>
|
||||
<div class="toob_column_grid toob_row">
|
||||
{{#controls.6}}
|
||||
<div class="mod-bakelite toob_column" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.6}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mod-pedal-input">
|
||||
{{#effect.ports.audio.input}}
|
||||
<div class="mod-input mod-input-disconnected" title="{{name}}" mod-role="input-audio-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-input-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.audio.input}}
|
||||
{{#effect.ports.midi.input}}
|
||||
<div class="mod-input mod-input-disconnected" title="{{name}}" mod-role="input-midi-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-input-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.midi.input}}
|
||||
{{#effect.ports.cv.input}}
|
||||
<div class="mod-input mod-input-disconnected" title="{{name}}" mod-role="input-cv-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-input-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.cv.input}}
|
||||
</div>
|
||||
|
||||
<div class="mod-pedal-output">
|
||||
{{#effect.ports.audio.output}}
|
||||
<div class="mod-output mod-output-disconnected" title="{{name}}" mod-role="output-audio-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-output-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.audio.output}}
|
||||
{{#effect.ports.midi.output}}
|
||||
<div class="mod-output mod-output-disconnected" title="{{name}}" mod-role="output-midi-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-output-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.midi.output}}
|
||||
{{#effect.ports.cv.output}}
|
||||
<div class="mod-output mod-output-disconnected" title="{{name}}" mod-role="output-cv-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-output-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.cv.output}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,166 @@
|
||||
<div class="mod-pedal mod-rack-reaktor{{{cns}}}">
|
||||
<script id="ToobFrequencyScript" src="/resources/js/ToobFrequencyPlot.js{{{ns}}}" type="application/javascript" />
|
||||
<script id="ToobVuScript" src="/resources/js/ToobVu.js{{{ns}}}" type="application/javascript" />
|
||||
<script id="ToobGainScript" src="/resources/js/ToobGain.js{{{ns}}}" type="application/javascript" />
|
||||
<div mod-role="drag-handle" class="mod-drag-handle" style="height:100%; width: 100%"></div>
|
||||
<div class="mod-control-group">
|
||||
|
||||
<div class="toob_column_grid" style="height: 100%">
|
||||
<div class="toob_column">
|
||||
<div class="mod-switch clearfix" mod-role="bypass">
|
||||
<div class="mod-switch-image" mod-role="bypass-light"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="toob_column" >
|
||||
<div class="toob_row_grid">
|
||||
<div id="toob_vu" class="toob_vu toob_row" />
|
||||
{{#controls.0}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.0}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="toob_column clearfix">
|
||||
<div class="toob_row_grid">
|
||||
<div class="toob_row">
|
||||
<div class="toob_frequency_response" mode-role="frequency-display">
|
||||
</div>
|
||||
</div>
|
||||
<div class="toob_column_grid toob_row">
|
||||
{{#controls.1}}
|
||||
<div class="mod-bakelite toob_column" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.1}}
|
||||
{{#controls.2}}
|
||||
<div class="mod-bakelite toob_column" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.2}}
|
||||
{{#controls.4}}
|
||||
<div class="mod-bakelite toob_column" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.4}}
|
||||
|
||||
</div>
|
||||
<div class="toob_row">
|
||||
{{#controls.3}}
|
||||
<div class="mod-bakelite" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.3}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="toob_column clearfix">
|
||||
<div class="toob_row_grid">
|
||||
{{#controls.5}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.5}}
|
||||
<div class="toob_row">
|
||||
<div class="toob_gain" />
|
||||
</div>
|
||||
|
||||
{{#controls.6}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.6}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="toob_column">
|
||||
{{#controls.7}}
|
||||
<div class="mod-bakelite" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.7}}
|
||||
<div class="toob_row_grid">
|
||||
{{#controls.8}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.8}}
|
||||
{{#controls.9}}
|
||||
<div class="mod-enumerated mod-enumerated-1" mod-role="input-control-port" mod-port-symbol="{{symbol}}" mod-widget="custom-select">
|
||||
<div mod-role="input-control-value" mod-port-symbol="{{symbol}}" class="mod-enumerated-selected"></div>
|
||||
<div class="mod-enumerated-list">
|
||||
{{#scalePoints}}
|
||||
<div mod-role="enumeration-option" mod-port-value="{{value}}">{{label}}</div>
|
||||
{{/scalePoints}}
|
||||
</div>
|
||||
</div>
|
||||
{{/controls.9}}
|
||||
</div>
|
||||
{{#controls.10}}
|
||||
<div class="mod-enumerated mod-enumerated-2" mod-role="input-control-port" mod-port-symbol="{{symbol}}" mod-widget="custom-select">
|
||||
<div mod-role="input-control-value" mod-port-symbol="{{symbol}}" class="mod-enumerated-selected"></div>
|
||||
<div class="mod-enumerated-list">
|
||||
{{#scalePoints}}
|
||||
<div mod-role="enumeration-option" mod-port-value="{{value}}">{{label}}</div>
|
||||
{{/scalePoints}}
|
||||
</div>
|
||||
</div>
|
||||
{{/controls.10}}
|
||||
{{#controls.11}}
|
||||
<div class="mod-enumerated mod-enumerated-3" mod-role="input-control-port" mod-port-symbol="{{symbol}}" mod-widget="custom-select">
|
||||
<div mod-role="input-control-value" mod-port-symbol="{{symbol}}" class="mod-enumerated-selected"></div>
|
||||
<div class="mod-enumerated-list">
|
||||
{{#scalePoints}}
|
||||
<div mod-role="enumeration-option" mod-port-value="{{value}}">{{label}}</div>
|
||||
{{/scalePoints}}
|
||||
</div>
|
||||
</div>
|
||||
{{/controls.11}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mod-pedal-input">
|
||||
{{#effect.ports.audio.input}}
|
||||
<div class="mod-input mod-input-disconnected" title="{{name}}" mod-role="input-audio-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-input-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.audio.input}}
|
||||
{{#effect.ports.midi.input}}
|
||||
<div class="mod-input mod-input-disconnected" title="{{name}}" mod-role="input-midi-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-input-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.midi.input}}
|
||||
{{#effect.ports.cv.input}}
|
||||
<div class="mod-input mod-input-disconnected" title="{{name}}" mod-role="input-cv-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-input-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.cv.input}}
|
||||
</div>
|
||||
|
||||
<div class="mod-pedal-output">
|
||||
{{#effect.ports.audio.output}}
|
||||
<div class="mod-output mod-output-disconnected" title="{{name}}" mod-role="output-audio-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-output-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.audio.output}}
|
||||
{{#effect.ports.midi.output}}
|
||||
<div class="mod-output mod-output-disconnected" title="{{name}}" mod-role="output-midi-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-output-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.midi.output}}
|
||||
{{#effect.ports.cv.output}}
|
||||
<div class="mod-output mod-output-disconnected" title="{{name}}" mod-role="output-cv-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-output-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.cv.output}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,182 @@
|
||||
<div class="mod-pedal mod-rack-reaktor{{{cns}}} mod-pedal mod-rack-power-stage{{{cns}}}">
|
||||
<script id="ToobFrequencyScript" src="/resources/js/ToobFrequencyPlot.js{{{ns}}}" type="application/javascript" />
|
||||
<script id="ToobVuScript" src="/resources/js/ToobVu.js{{{ns}}}" type="application/javascript" />
|
||||
<script id="ToobGainScript" src="/resources/js/ToobGain.js{{{ns}}}" type="application/javascript" />
|
||||
<div mod-role="drag-handle" class="mod-drag-handle" style="height:100%; width: 100%"></div>
|
||||
<div class="mod-control-group">
|
||||
|
||||
<div class="toob_column_grid" style="height: 100%">
|
||||
<!-- SWITCH -->
|
||||
<div class="toob_column">
|
||||
<div class="mod-switch clearfix" mod-role="bypass">
|
||||
<div class="mod-switch-image" mod-role="bypass-light"></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- GAIN STAGE 1-->
|
||||
<div class="toob_column" >
|
||||
<div class="toob_row_grid" style="flex-flow: row wrap; width: 120px">
|
||||
<div id="toob_gain1_vu1" class="toob_micro_vu toob_row" />
|
||||
<div id="toob_gain1_gain" class="toob_gain toob_gain_power_stage toob_row" />
|
||||
|
||||
{{#controls.0}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.0}}
|
||||
{{#controls.1}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.1}}
|
||||
{{#controls.2}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.2}}
|
||||
{{#controls.3}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.3}}
|
||||
</div>
|
||||
</div>
|
||||
<!-- GAIN STAGE 2-->
|
||||
<div class="toob_column" >
|
||||
<div class="toob_row_grid" style="flex-flow: row wrap; width: 120px">
|
||||
<div id="toob_gain2_vu" class="toob_micro_vu toob_row" />
|
||||
<div id="toob_gain2_gain" class="toob_gain toob_gain_power_stage toob_row" />
|
||||
|
||||
{{#controls.5}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.5}}
|
||||
{{#controls.6}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.6}}
|
||||
{{#controls.7}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.7}}
|
||||
{{#controls.8}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.8}}
|
||||
</div>
|
||||
</div>
|
||||
<!-- GAIN STAGE 2-->
|
||||
<div class="toob_column" >
|
||||
<div class="toob_row_grid" style="flex-flow: row wrap; width: 120px">
|
||||
<div id="toob_gain3_vu" class="toob_micro_vu toob_row" />
|
||||
<div id="toob_gain3_gain" class="toob_gain toob_gain_power_stage toob_row" />
|
||||
|
||||
|
||||
{{#controls.10}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.10}}
|
||||
{{#controls.11}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.11}}
|
||||
{{#controls.12}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.12}}
|
||||
{{#controls.13}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.13}}
|
||||
</div>
|
||||
</div>
|
||||
<!-- OUTPUT-->
|
||||
<div class="toob_column" >
|
||||
<div class="toob_row_grid" style="flex-flow: row wrap; width: 128px">
|
||||
|
||||
<div style="margin-left: 34px; margin-right: 34px; margin-bottom: 15px;">
|
||||
{{#controls.16}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.16}}
|
||||
</div>
|
||||
<div class="toob-sag-meter" />
|
||||
{{#controls.14}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.14}}
|
||||
<div class="toob-sag-meter" />
|
||||
{{#controls.15}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.15}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="toob_column" >
|
||||
<div class="toob_large_vu" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mod-pedal-input">
|
||||
{{#effect.ports.audio.input}}
|
||||
<div class="mod-input mod-input-disconnected" title="{{name}}" mod-role="input-audio-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-input-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.audio.input}}
|
||||
{{#effect.ports.midi.input}}
|
||||
<div class="mod-input mod-input-disconnected" title="{{name}}" mod-role="input-midi-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-input-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.midi.input}}
|
||||
{{#effect.ports.cv.input}}
|
||||
<div class="mod-input mod-input-disconnected" title="{{name}}" mod-role="input-cv-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-input-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.cv.input}}
|
||||
</div>
|
||||
|
||||
<div class="mod-pedal-output">
|
||||
{{#effect.ports.audio.output}}
|
||||
<div class="mod-output mod-output-disconnected" title="{{name}}" mod-role="output-audio-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-output-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.audio.output}}
|
||||
{{#effect.ports.midi.output}}
|
||||
<div class="mod-output mod-output-disconnected" title="{{name}}" mod-role="output-midi-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-output-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.midi.output}}
|
||||
{{#effect.ports.cv.output}}
|
||||
<div class="mod-output mod-output-disconnected" title="{{name}}" mod-role="output-cv-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-output-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.cv.output}}
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,81 @@
|
||||
<div class="mod-pedal mod-rack-reaktor{{{cns}}} mod-rack-tone-stack{{{cns}}}">
|
||||
<script id="ToobFrequencyScript" src="/resources/js/ToobFrequencyPlot.js{{{ns}}}" type="application/javascript" />
|
||||
<div mod-role="drag-handle" class="mod-drag-handle" style="height:100%; width: 100%"></div>
|
||||
<div class="mod-control-group">
|
||||
<div class="toob_column_grid" style="height: 100%">
|
||||
<div class="toob_column">
|
||||
<div class="mod-switch clearfix" mod-role="bypass">
|
||||
<div class="mod-switch-image" mod-role="bypass-light"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="toob_column" >
|
||||
<div class="toob_row_grid" style="flex-flow: row wrap; width: 180px" >
|
||||
<div style="width: 180px" class="toob_row">
|
||||
{{#controls.3}}
|
||||
<div class="toob-amp-model" title="{{comment}}">
|
||||
<div class="toob-amp-model-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}" mod-widget="switch"></div>
|
||||
</div>
|
||||
{{/controls.3}}
|
||||
</div>
|
||||
<div id="toob_tonestack_fresp" class="toob_frequency_response toob_tonestack_fresp toob_row"
|
||||
/>
|
||||
{{#controls.0}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.0}}
|
||||
{{#controls.1}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.1}}
|
||||
{{#controls.2}}
|
||||
<div class="mod-bakelite toob_row" title="{{comment}}">
|
||||
<div class="mod-bakelite-image" mod-role="input-control-port" mod-port-symbol="{{symbol}}"></div>
|
||||
<span class="mod-bakelite-title">{{name}}</span>
|
||||
</div>
|
||||
{{/controls.2}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mod-pedal-input">
|
||||
{{#effect.ports.audio.input}}
|
||||
<div class="mod-input mod-input-disconnected" title="{{name}}" mod-role="input-audio-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-input-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.audio.input}}
|
||||
{{#effect.ports.midi.input}}
|
||||
<div class="mod-input mod-input-disconnected" title="{{name}}" mod-role="input-midi-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-input-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.midi.input}}
|
||||
{{#effect.ports.cv.input}}
|
||||
<div class="mod-input mod-input-disconnected" title="{{name}}" mod-role="input-cv-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-input-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.cv.input}}
|
||||
</div>
|
||||
|
||||
<div class="mod-pedal-output">
|
||||
{{#effect.ports.audio.output}}
|
||||
<div class="mod-output mod-output-disconnected" title="{{name}}" mod-role="output-audio-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-output-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.audio.output}}
|
||||
{{#effect.ports.midi.output}}
|
||||
<div class="mod-output mod-output-disconnected" title="{{name}}" mod-role="output-midi-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-output-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.midi.output}}
|
||||
{{#effect.ports.cv.output}}
|
||||
<div class="mod-output mod-output-disconnected" title="{{name}}" mod-role="output-cv-port" mod-port-symbol="{{symbol}}">
|
||||
<div class="mod-pedal-output-image"></div>
|
||||
</div>
|
||||
{{/effect.ports.cv.output}}
|
||||
</div>
|
||||
</div>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,147 @@
|
||||
var ToobFrequencyPlot = {
|
||||
CreateWrapper: function (selector,width,height, dbMinOpt,dbMaxOpt,dbTickSpacingOpt)
|
||||
{
|
||||
if (dbMinOpt == undefined) dbMinOpt = -45;
|
||||
if (dbMaxOpt == undefined) dbMaxOpt = 5;
|
||||
if (dbTickSpacingOpt == undefined) dbTickSpacingOpt = 10;
|
||||
var result = { };
|
||||
|
||||
result.MIN_DB_AF = Math.pow(10,-192/20);
|
||||
result.fMin = 30;
|
||||
result.fMax = 22050;
|
||||
result.logMin = Math.log(result.fMin);
|
||||
result.logMax = Math.log(result.fMax);
|
||||
|
||||
// Size of the SVG element.
|
||||
result.xMin = 0;
|
||||
result.xMax = PLOT_WIDTH;
|
||||
result.yMin = 0;
|
||||
result.yMax = PLOT_HEIGHT;
|
||||
result.dbMin = dbMaxOpt; // deliberately reversed to flip up and down.
|
||||
result.dbMax = dbMinOpt;
|
||||
result.dbTickSpacing = dbTickSpacingOpt;
|
||||
|
||||
result.DrawGrid = function(svg)
|
||||
{
|
||||
var style = { fill: 'none', stroke: "#066",strokeWidth: 0.25};
|
||||
|
||||
for (var db = Math.ceil(this.dbMax/this.dbTickSpacing)*this.dbTickSpacing; db < this.dbMin; db += this.dbTickSpacing )
|
||||
{
|
||||
var y = (db-this.dbMin)/(this.dbMax-this.dbMin)*(this.yMax-this.yMin);
|
||||
svg.line(this.xMin,y,this.xMax,y,style);
|
||||
}
|
||||
var decade0 = Math.pow(10,Math.floor(Math.log10(this.fMin)));
|
||||
for (var decade = decade0; decade < this.fMax; decade *= 10)
|
||||
{
|
||||
for (var i = 0; i < 10; ++i)
|
||||
{
|
||||
var f = decade*i;
|
||||
if (f > this.fMin && f < this.fMax)
|
||||
{
|
||||
var x = this.xScale(f);
|
||||
svg.line(x,this.yMin,x,this.yMax,style);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
result.Draw = function(svg,values)
|
||||
{
|
||||
svg.clear();
|
||||
|
||||
var points = new Array(values.length/2);
|
||||
for (var i = 0; i < values.length; i += 2)
|
||||
{
|
||||
var f = values[i];
|
||||
var v = values[i+1];
|
||||
var x = this.xScale(f);
|
||||
var y = this.afToY(v);
|
||||
points[i/2] = [x,y];
|
||||
}
|
||||
svg.polyline(points,{fill: 'none', stroke: "#990", strokeWidth: 0.5});
|
||||
};
|
||||
|
||||
result.MaybeDraw = function()
|
||||
{
|
||||
if (this.values && this.svgPlot)
|
||||
{
|
||||
this.Draw(this.svgPlot,this.values);
|
||||
}
|
||||
};
|
||||
result.SetValues = function(values)
|
||||
{
|
||||
this.values = values;
|
||||
this.MaybeDraw();
|
||||
};
|
||||
|
||||
result.DrawPlot = function(svg)
|
||||
{
|
||||
result.svgPlot = svg;
|
||||
result.MaybeDraw();
|
||||
};
|
||||
|
||||
result.Attach = function(selector, width,height)
|
||||
{
|
||||
this.xMax = width;
|
||||
this.yMax = height;
|
||||
this.selector = selector;
|
||||
this.background = $("<div>");
|
||||
selector.append(this.background);
|
||||
this.plot = $("<div>");
|
||||
selector.append(this.plot);
|
||||
|
||||
this.background.svg({onLoad: function (svg) { result.DrawGrid.apply(result,[svg]) } });
|
||||
this.plot.svg({onLoad: function (svg) { result.DrawPlot.apply(result,[svg]) } });
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
result.afToY = function(value)
|
||||
{
|
||||
value = Math.abs(value);
|
||||
|
||||
var db;
|
||||
if (value < this.MIN_DB_AF) {
|
||||
db = -192.0;
|
||||
} else {
|
||||
db = 20*Math.log10(value);
|
||||
}
|
||||
var y = (db-this.dbMin)/(this.dbMax-this.dbMin)*(this.yMax-this.yMin) + this.yMin;
|
||||
return y;
|
||||
|
||||
};
|
||||
|
||||
result.xScale = function(frequency)
|
||||
{
|
||||
var logV = Math.log(frequency);
|
||||
return (this.xMax-this.xMin) * (logV-this.logMin)/(this.logMax-this.logMin) + this.xMin;
|
||||
};
|
||||
result.UpdateFrequencyResponse = function(values)
|
||||
{
|
||||
this.values = values;
|
||||
this.MaybeDrawResponse();
|
||||
};
|
||||
result.DrawResponse = function(svg,values)
|
||||
{
|
||||
svg.clear();
|
||||
|
||||
var points = new Array(values.length/2);
|
||||
for (var i = 0; i < values.length; i += 2)
|
||||
{
|
||||
var f = values[i];
|
||||
var v = values[i+1];
|
||||
var x = this.xScale(f);
|
||||
var y = this.afToY(v);
|
||||
points[i/2] = [x,y];
|
||||
}
|
||||
svg.polyline(points,{fill: 'none', stroke: "#990", strokeWidth: 0.5});
|
||||
};
|
||||
|
||||
result.Attach(selector,width,height);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
var ToobGain = {
|
||||
CreateWrapper: function (selector,width,height)
|
||||
{
|
||||
var result = {
|
||||
MIN_DB_AF: Math.pow(10,-192/20),
|
||||
width: width,
|
||||
height:height,
|
||||
|
||||
debugBreak: true,
|
||||
|
||||
DebugBreak: function()
|
||||
{
|
||||
if (this.debugBreak)
|
||||
{
|
||||
this.debugBreak = false;
|
||||
debugger;
|
||||
}
|
||||
},
|
||||
gain: 1e-7,
|
||||
gainScale: 1,
|
||||
|
||||
SetValue: function(value)
|
||||
{
|
||||
value = value*value;
|
||||
value = value*value*1000;
|
||||
if (value < 1E-7) value = 1E-7;
|
||||
|
||||
this.gain = value;
|
||||
this.gainScale = 1/Math.atan(this.gain);
|
||||
this.MaybeDraw();
|
||||
},
|
||||
GainFn: function(x)
|
||||
{
|
||||
return Math.atan(x*this.gain)*this.gainScale;
|
||||
},
|
||||
|
||||
Draw: function(svg)
|
||||
{
|
||||
svg.clear();
|
||||
|
||||
var points = [];
|
||||
var ix = 0;
|
||||
var xs = this.width/2;
|
||||
var ys = (this.height-2)/2;
|
||||
var y0 = this.height/2;
|
||||
|
||||
for (var x = -1.0; x <= 1.0; x += 2.0/this.width)
|
||||
{
|
||||
var y = this.GainFn(x);
|
||||
points[ix++] = [ (x+1)*xs, y0-y*ys];
|
||||
}
|
||||
svg.polyline(points,{ fill: 'none', stroke: '#880', strokeThickness: 0.5, opacity: 0.5});
|
||||
},
|
||||
|
||||
MaybeDraw: function()
|
||||
{
|
||||
if (this.svgPlot)
|
||||
{
|
||||
this.Draw(this.svgPlot);
|
||||
}
|
||||
},
|
||||
DrawPlot: function(svg)
|
||||
{
|
||||
this.svgPlot = svg;
|
||||
this.MaybeDraw();
|
||||
},
|
||||
Attach: function(selector)
|
||||
{
|
||||
//this.DebugBreak();
|
||||
this.plot = $("<div>");
|
||||
selector.append(this.plot);
|
||||
var self = this;
|
||||
this.plot.svg({onLoad: function (svg) { self.DrawPlot.apply(self,[svg]); } });
|
||||
}
|
||||
};
|
||||
|
||||
result.Attach(selector);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
@@ -0,0 +1,419 @@
|
||||
var ToobVu = {
|
||||
CreateWrapper: function (selector, _channels, width, height, minDb, maxDb, tickSpacingOpt, isTinyOpt)
|
||||
{
|
||||
if (tickSpacingOpt == undefined)
|
||||
{
|
||||
tickSpacingOpt = 6;
|
||||
}
|
||||
isTinyOpt = isTinyOpt == undefined? false: isTinyOpt;
|
||||
|
||||
var result = {
|
||||
MIN_DB_AF: Math.pow(10,-192/20),
|
||||
channels: _channels,
|
||||
dbMin: minDb,
|
||||
dbMax: maxDb,
|
||||
width: width,
|
||||
height:height,
|
||||
yMin: 0,
|
||||
yMax: height-4,
|
||||
xMin: 0,
|
||||
xMax: width,
|
||||
tickSpacing: tickSpacingOpt,
|
||||
isTiny: isTinyOpt,
|
||||
|
||||
values: [-96],
|
||||
peaks: [-96],
|
||||
|
||||
|
||||
|
||||
prepareLayout: function() {
|
||||
var ticksWidth;
|
||||
if (this.isTiny)
|
||||
{
|
||||
this.tick0L = 0;
|
||||
this.tick1R = width;
|
||||
ticksWidth = this.tick1R-this.tick0L;
|
||||
this.trackL = this.tick0L + ticksWidth/3;
|
||||
this.trackR = this.tick0L + ticksWidth*2/3;
|
||||
this.tick0R = this.trackL-2;
|
||||
this.tick1L = this.trackR + 2;
|
||||
this.ledL = this.trackL+1;
|
||||
this.ledR = this.trackR-1;
|
||||
} else {
|
||||
this.tick0L = 20;
|
||||
this.tick1R = width;
|
||||
ticksWidth = this.tick1R-this.tick0L;
|
||||
if (this.channels > 1)
|
||||
{
|
||||
this.trackL = this.tick0L + ticksWidth/4;
|
||||
this.trackR = this.tick0L + ticksWidth*3/4;
|
||||
|
||||
} else
|
||||
{
|
||||
this.trackL = this.tick0L + ticksWidth/3;
|
||||
this.trackR = this.tick0L + ticksWidth*2/3;
|
||||
}
|
||||
this.tick0R = this.trackL-2;
|
||||
this.tick1L = this.trackR + 2;
|
||||
this.ledL = this.trackL+1;
|
||||
this.ledR = this.trackR-1;
|
||||
}
|
||||
},
|
||||
|
||||
DrawTicks: function (svg) {
|
||||
var majorTick = { fill: 'none', stroke: "#EEE",strokeWidth: 2, opacity: 0.5 };
|
||||
if (this.tickSpacing == 0)
|
||||
{
|
||||
var y = this.dbToY(0);
|
||||
|
||||
svg.line(this.tick0L,y,this.tick0R,y,
|
||||
majorTick);
|
||||
if (!this.isTiny)
|
||||
{
|
||||
svg.line(this.tick1L,y,this.tick1R,y,
|
||||
majorTick);
|
||||
}
|
||||
} else {
|
||||
var minorTick = { fill: 'none', stroke: "#EEE",strokeWidth: 1, opacity: 0.3 };
|
||||
var textSettings = { fill: '#eee', stroke: 'none', fontFamily: '"cooper hewitt",Sans-Serif',fontSize: "6px", textAnchor: "end", opacity: 0.5};
|
||||
|
||||
for (var db = Math.ceil(this.dbMin/this.tickSpacing)*this.tickSpacing; db < this.dbMax; db += this.tickSpacing )
|
||||
{
|
||||
var y = this.dbToY(db);
|
||||
|
||||
svg.line(this.tick0L,y,this.tick0R,y,
|
||||
db === 0? majorTick: minorTick);
|
||||
if (!this.isTiny)
|
||||
{
|
||||
svg.line(this.tick1L,y,this.tick1R,y,
|
||||
db === 0? majorTick: minorTick);
|
||||
|
||||
var text;
|
||||
if (db > 0)
|
||||
{
|
||||
text = "+" + db;
|
||||
} else {
|
||||
text = "" + db;
|
||||
}
|
||||
svg.text(this.tick0L-2,y+2,text,textSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
var y0 = this.dbToY(0);
|
||||
var y1 = this.dbToY(-this.tickSpacing);
|
||||
var targetFill = {fill: '#FFF', stroke: 'none',opacity: 0.07};
|
||||
svg.rect(this.tick0L,y0,this.tick0R-this.tick0L,y1-y0,0,0,targetFill);
|
||||
svg.rect(this.tick1L,y0,this.tick1R-this.tick1L,y1-y0,0,0,targetFill);
|
||||
|
||||
y0 = this.dbToY(this.dbMax);
|
||||
y1 = this.dbToY(this.dbMin);
|
||||
svg.rect(this.trackL,y0,this.trackR-this.trackL,y1-y0,0,0,{fill: '#000', stroke: 'none'});
|
||||
},
|
||||
|
||||
greenVu: { fill: "#080", stroke: 'none',opacity: 0.5},
|
||||
redVu: { fill: "#800", stroke: 'none',opacity: 0.5},
|
||||
yellowVu: { fill: "#880", stroke: 'none',opacity: 0.5},
|
||||
greenPeak: { fill: "#0F0", stroke: 'none',opacity: 1},
|
||||
redPeak: { fill: "#F00", stroke: 'none',opacity: 1},
|
||||
yellowPeak: { fill: "#FF0", stroke: 'none',opacity: 1},
|
||||
greenPeakColor: "#0F0",
|
||||
nonePeakColor: "transparent",
|
||||
redPeakColor: "#F00",
|
||||
yellowPeakColor: "#FF0",
|
||||
|
||||
debugBreak: true,
|
||||
|
||||
DebugBreak: function()
|
||||
{
|
||||
if (this.debugBreak)
|
||||
{
|
||||
this.debugBreak = false;
|
||||
debugger;
|
||||
}
|
||||
},
|
||||
Update: function()
|
||||
{
|
||||
var yMin = this.dbToY(this.dbMin);
|
||||
var yMax = this.dbToY(this.dbMax);
|
||||
var yZero = this.dbToY(0);
|
||||
var yYellow = this.dbToY(-6);
|
||||
|
||||
for (var channel = 0; channel < this.channels; ++channel)
|
||||
{
|
||||
var yValue = this.dbToY(this.values[channel]);
|
||||
var yPeak = this.dbToY(this.peaks[channel]);
|
||||
|
||||
var channelControls = this.channelControls[channel];
|
||||
if (yValue < yMin)
|
||||
{
|
||||
var yGreen = Math.max(yYellow,yValue);
|
||||
channelControls.greenRect.setAttribute("y",yGreen,"");
|
||||
channelControls.greenRect.setAttribute("height",yMin-yGreen,"");
|
||||
} else {
|
||||
channelControls.greenRect.setAttribute("y",0,"");
|
||||
channelControls.greenRect.setAttribute("height",0,"");
|
||||
}
|
||||
if (yValue < yYellow)
|
||||
{
|
||||
var y = Math.max(yZero,yValue);
|
||||
channelControls.yellowRect.setAttribute("y",y,"");
|
||||
channelControls.yellowRect.setAttribute("height",yYellow-y,"");
|
||||
} else {
|
||||
channelControls.yellowRect.setAttribute("y",0,"");
|
||||
channelControls.yellowRect.setAttribute("height",0,"");
|
||||
|
||||
}
|
||||
if (yValue < yZero)
|
||||
{
|
||||
var y = Math.max(yMax,yValue);
|
||||
|
||||
channelControls.redRect.setAttribute("y",y,"");
|
||||
channelControls.redRect.setAttribute("height",yZero-y,"");
|
||||
} else {
|
||||
channelControls.redRect.setAttribute("y",0,"");
|
||||
channelControls.redRect.setAttribute("height",0,"");
|
||||
}
|
||||
var peakFill = null;
|
||||
var peakHeight = 2;
|
||||
if (yPeak < yZero)
|
||||
{
|
||||
peakFill = this.redPeakColor;
|
||||
} else if (yPeak < yYellow)
|
||||
{
|
||||
peakFill = this.yellowPeakColor;
|
||||
} else if (yPeak < yMin)
|
||||
{
|
||||
peakFill = this.greenPeakColor;
|
||||
} else {
|
||||
peakFill = this.nonePeakColor;
|
||||
peakHeight = 0;
|
||||
}
|
||||
{
|
||||
var y = Math.max(yMax+1,yPeak);
|
||||
channelControls.peakRect.setAttribute("y",y-1,"");
|
||||
channelControls.peakRect.setAttribute("height",peakHeight);
|
||||
channelControls.peakRect.setAttribute("fill",peakFill);
|
||||
}
|
||||
}
|
||||
|
||||
if (!this.isTiny && this.hasGate)
|
||||
{
|
||||
// 0: disabled, 1: released, 2: releasing, 3: attacking, 4: holding.
|
||||
var yGateThreshold = this.dbToY(this.gateThreshold);
|
||||
var showGate = (this.gateEnabled && yGateThreshold < yMin);
|
||||
|
||||
if (showGate)
|
||||
{
|
||||
var state = { fill: this.gateState >= 3 ? "#080" : "#C00", stroke: '#000', strokeWidth: 1};
|
||||
var fill = this.gateState >= 3 ? "#080" : "#C00";
|
||||
|
||||
this.gateIndicatorL.setAttribute("fill",fill,"");
|
||||
this.gateIndicatorR.setAttribute("fill",fill,"");
|
||||
var pointsL = (this.trackL-1) +","+ (yGateThreshold) +
|
||||
" " + (this.trackL-9) + "," + (yGateThreshold+4) +
|
||||
" " + (this.trackL-9) + "," + (yGateThreshold-4) +
|
||||
" " + (this.trackL-1) +","+ (yGateThreshold);
|
||||
this.gateIndicatorL.setAttribute("points",pointsL,"");
|
||||
|
||||
var pointsR = (this.trackR+1) +","+ (yGateThreshold) +
|
||||
" " + (this.trackR+9) + "," + (yGateThreshold-4) +
|
||||
" " + (this.trackR+9) + "," + (yGateThreshold+4) +
|
||||
" " + (this.trackR+1) +","+ (yGateThreshold);
|
||||
this.gateIndicatorR.setAttribute("points",pointsR,"");
|
||||
|
||||
this.gateIndicatorL.setAttribute("opacity","1","");
|
||||
this.gateIndicatorR.setAttribute("opacity","1","");
|
||||
} else {
|
||||
this.gateIndicatorL.setAttribute("opacity","0","");
|
||||
this.gateIndicatorR.setAttribute("opacity","0","");
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
Draw: function(svg)
|
||||
{
|
||||
svg.clear();
|
||||
|
||||
for (var channel = 0; channel < this.channels; ++channel)
|
||||
{
|
||||
this.channelControls[channel] = this.drawChannel(svg,channel);
|
||||
}
|
||||
if (!this.isTiny)
|
||||
{
|
||||
var yGateThreshold = this.dbToY(0);
|
||||
var state = { fill: "transparent", stroke: '#000', strokeWidth: 1};
|
||||
var points = [[0,0]]; // just create the structure. Updates will give the shape.
|
||||
this.gateIndicatorL = svg.polyline(points,state);
|
||||
this.gateIndicatorR = svg.polyline(points,state);
|
||||
}
|
||||
},
|
||||
drawChannel: function(svg,channel)
|
||||
{
|
||||
var result = {};
|
||||
var width = ((this.ledR-this.ledL)-(this.channels-1))/this.channels;
|
||||
var x0 = this.ledL + channel*(width+1);
|
||||
|
||||
|
||||
// render all the controls, without y info which will be filled in during Update.
|
||||
|
||||
result.greenRect = svg.rect(x0,0,width,0,0,0,this.greenVu);
|
||||
result.yellowRect = svg.rect(x0,0,width,0,0,0,this.yellowVu);
|
||||
result.redRect = svg.rect(x0,0,width,0,0,0,this.redVu);
|
||||
result.peakRect = svg.rect(x0,0,width,0,0,0,this.greenPeak);
|
||||
return result;
|
||||
},
|
||||
|
||||
channelControls: [],
|
||||
MaybeUpdate: function()
|
||||
{
|
||||
if (this.svgPlot)
|
||||
{
|
||||
for (var i = 0; i < this.channels; ++i)
|
||||
{
|
||||
this.Update(this.channelControls[i],this.values[i],this.peaks[i]);
|
||||
}
|
||||
}
|
||||
},
|
||||
getTimeMs: function()
|
||||
{
|
||||
return new Date().getTime();
|
||||
},
|
||||
lastPeaks: [-96],
|
||||
holdTimes: [0],
|
||||
|
||||
holdLengthMs: 2000,
|
||||
holdTime: 0,
|
||||
peakDecayRate: -96/4000,
|
||||
valueDecayRate: -96/1000,
|
||||
lastValueTime: 0,
|
||||
gateState: 0,
|
||||
|
||||
UpdateValue: function(value, gateStateOpt)
|
||||
{
|
||||
this.UpdateValues([value],gateStateOpt);
|
||||
},
|
||||
UpdateValues: function(values,gateStateOpt)
|
||||
{
|
||||
if (gateStateOpt == undefined)
|
||||
{
|
||||
gateStateOpt = 0;
|
||||
}
|
||||
//this.DebugBreak();
|
||||
var time = this.getTimeMs();
|
||||
|
||||
for (var i = 0; i < this.values.length; ++i)
|
||||
{
|
||||
var value = i < values.length? values[i]: 0;
|
||||
value = this.afToDb(value);
|
||||
var decayedValue = this.values[i] +(time-this.lastValueTime)*this.valueDecayRate;
|
||||
if (decayedValue > value)
|
||||
{
|
||||
value = decayedValue;
|
||||
}
|
||||
this.values[i] = value;
|
||||
|
||||
|
||||
if (time > this.holdTimes[i])
|
||||
{
|
||||
this.peaks[i] = this.lastPeaks[i] +(time-this.holdTimes[i])*this.peakDecayRate;
|
||||
}
|
||||
if (value > this.peaks[i])
|
||||
{
|
||||
this.lastPeaks[i] = this.peaks[i] = value;
|
||||
this.holdTimes[i] = time+this.holdLengthMs;
|
||||
}
|
||||
}
|
||||
this.lastValueTime = time;
|
||||
this.gateState = gateStateOpt;
|
||||
this.MaybeUpdate();
|
||||
},
|
||||
|
||||
gateEnabled: false,
|
||||
gateThreshold: -180,
|
||||
hasGate: false,
|
||||
SetGateEnabled: function(enabled)
|
||||
{
|
||||
this.hasGate = true;
|
||||
if (this.gateEnabled != enabled)
|
||||
{
|
||||
this.gateEnabled = enabled;
|
||||
this.MaybeUpdate();
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
SetGateThreshold: function(value)
|
||||
{
|
||||
this.hasGate = true;
|
||||
if (this.gateThreshold != value)
|
||||
{
|
||||
this.gateThreshold = value;
|
||||
this.MaybeUpdate();
|
||||
}
|
||||
},
|
||||
DrawPlot: function(svg)
|
||||
{
|
||||
this.svgPlot = svg;
|
||||
this.Draw(this.svgPlot,this.value,this.peak);
|
||||
},
|
||||
dbToY: function(db)
|
||||
{
|
||||
if (db < this.minDb) db = this.minDb;
|
||||
if (db > this.maxDb) db = this.maxDb;
|
||||
return (db-this.dbMin)/(this.dbMax-this.dbMin)*(this.yMin-this.yMax)+this.yMax;
|
||||
},
|
||||
afToDb: function(af)
|
||||
{
|
||||
var value = Math.abs(af);
|
||||
|
||||
var db;
|
||||
if (value < this.MIN_DB_AF) {
|
||||
db = -192.0;
|
||||
} else {
|
||||
db = 20*Math.log10(value);
|
||||
}
|
||||
return db;
|
||||
},
|
||||
|
||||
afToY: function(value)
|
||||
{
|
||||
var db = afToDb(value);
|
||||
return this.dbToY(db);
|
||||
},
|
||||
|
||||
|
||||
Attach: function(selector)
|
||||
{
|
||||
|
||||
var time = this.getTimeMs();
|
||||
this.lastValueTime = time;
|
||||
if (this.holdTime === 0) this.holdTime = time;
|
||||
for (var i = 1; i < this.channels; ++i)
|
||||
{
|
||||
this.values[i] = this.values[0];
|
||||
this.peaks[i] = this.peaks[0];
|
||||
this.lastPeaks[i] = this.peaks[0];
|
||||
}
|
||||
for (var i = 0; i < this.channels; ++i)
|
||||
{
|
||||
this.holdTimes[i] = time;
|
||||
}
|
||||
this.prepareLayout();
|
||||
this.background = $("<div>");
|
||||
selector.append(this.background);
|
||||
this.plot = $("<div>");
|
||||
selector.append(this.plot);
|
||||
var self = this;
|
||||
this.background.svg({onLoad: function (svg) { self.DrawTicks.apply(self,[svg]); } });
|
||||
this.plot.svg({onLoad: function (svg) { self.DrawPlot.apply(self,[svg]); } });
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
result.Attach(selector);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
After Width: | Height: | Size: 112 KiB |
|
After Width: | Height: | Size: 441 KiB |
|
After Width: | Height: | Size: 177 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 50 KiB |
@@ -0,0 +1,167 @@
|
||||
method = function (event,jsFuncs) {
|
||||
|
||||
|
||||
function LoadScripts(ds)
|
||||
{
|
||||
var script = event.icon.find("#ToobFrequencyScript");
|
||||
|
||||
$.get(script[0].src, function(data,status) {
|
||||
ds.OnFrequencyScriptLoaded.apply(ds,[data,status]);
|
||||
});
|
||||
|
||||
script = event.icon.find("#ToobVuScript");
|
||||
$.get(script[0].src, function(data,status) {
|
||||
ds.OnVuScriptLoaded.apply(ds,[data,status]);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
function handle_event (symbol, value) {
|
||||
switch (symbol) {
|
||||
case "gate_t":
|
||||
{
|
||||
var ds = event.icon.data('xModFrequency');
|
||||
ds.SetGateThreshold(value);
|
||||
ds.SetGateEnabled(value != -80);
|
||||
}
|
||||
break;
|
||||
case "boost":
|
||||
{
|
||||
var ds = event.icon.data('xModFrequency');
|
||||
ds.SetBoost(value);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function MakeDs()
|
||||
{
|
||||
var ds = {
|
||||
|
||||
FREQUENCY_RESPONSE_URI: "http://two-play.com/plugins/toob#frequencyResponseVector",
|
||||
UI_STATE_URI: "http://two-play.com/plugins/toob-cab-sim#uiState",
|
||||
|
||||
SpectrumDiv: event.icon.find('.toob_cabsim_fresp'),
|
||||
|
||||
|
||||
attached: false,
|
||||
vuAttached: false,
|
||||
|
||||
|
||||
OnVuScriptLoaded: function(data,status)
|
||||
{
|
||||
eval(data);
|
||||
if (ToobVu && !this.vuAttached)
|
||||
{
|
||||
this.vuAttached = true;
|
||||
this.ToobVu = ToobVu;
|
||||
this.vu = this.ToobVu.CreateWrapper(this.VuDiv,2,48,130,-80,20,12);
|
||||
}
|
||||
},
|
||||
gateThreshold: -192,
|
||||
gateEnabled: false,
|
||||
SetGateThreshold: function(value)
|
||||
{
|
||||
this.gateThreshold = value;
|
||||
if (this.vu)
|
||||
{
|
||||
this.vu.SetGateThreshold(value);
|
||||
}
|
||||
},
|
||||
SetGateEnabled: function(enabled)
|
||||
{
|
||||
this.gateEnabled = enabled;
|
||||
if (this.vu)
|
||||
{
|
||||
this.vu.SetGateEnabled(enabled);
|
||||
}
|
||||
},
|
||||
boost: 0,
|
||||
SetBoost: function(value)
|
||||
{
|
||||
this.boost = value;
|
||||
if (this.gain)
|
||||
{
|
||||
this.gain.SetValue(value);
|
||||
}
|
||||
},
|
||||
OnFrequencyScriptLoaded: function(data,status)
|
||||
{
|
||||
eval(data);
|
||||
if (ToobFrequencyPlot && !ds.attached)
|
||||
{
|
||||
ds.ToobFrequencyPlot = ToobFrequencyPlot;
|
||||
ds.attached = true;
|
||||
ds.frequencyPlot = ToobFrequencyPlot.CreateWrapper(this.SpectrumDiv,236,66);
|
||||
}
|
||||
this.MaybeDrawResponse();
|
||||
},
|
||||
MaybeDrawResponse: function() {
|
||||
if (this.frequencyPlot && this.values)
|
||||
{
|
||||
this.frequencyPlot.SetValues(this.values);
|
||||
}
|
||||
},
|
||||
VuDiv: event.icon.find('.cabsim_vu'),
|
||||
|
||||
UpdateFrequencyResults: function(values)
|
||||
{
|
||||
this.values = values;
|
||||
this.MaybeDrawResponse();
|
||||
},
|
||||
UpdateUiState: function(values)
|
||||
{
|
||||
var vuLevel = values[0];
|
||||
var gateState = values[1];
|
||||
if (this.vu)
|
||||
{
|
||||
this.vu.UpdateValues([ values[0], values[1] ],gateState);
|
||||
}
|
||||
}
|
||||
};
|
||||
return ds;
|
||||
|
||||
}
|
||||
function handle_property(uri, value)
|
||||
{
|
||||
var ds = event.icon.data('xModFrequency');
|
||||
if (uri == ds.FREQUENCY_RESPONSE_URI)
|
||||
{
|
||||
ds.UpdateFrequencyResults(value);
|
||||
} else if (uri == ds.UI_STATE_URI)
|
||||
{
|
||||
ds.UpdateUiState(value);
|
||||
}
|
||||
}
|
||||
|
||||
if (event.type == 'start') {
|
||||
//debugger;
|
||||
|
||||
|
||||
// var dpy = event.icon.find('[mod-role=frequency-display]');
|
||||
|
||||
var ds = MakeDs();
|
||||
event.icon.data('xModFrequency', ds);
|
||||
LoadScripts(ds);
|
||||
var ports = event.ports;
|
||||
for (var p in ports) {
|
||||
handle_event(ports[p].symbol, ports[p].value);
|
||||
}
|
||||
// refresh the frequency display if not first load.
|
||||
jsFuncs.patch_get(ds.FREQUENCY_RESPONSE_URI);
|
||||
|
||||
}
|
||||
else if (event.type == 'change') {
|
||||
if (event.symbol)
|
||||
{
|
||||
handle_event (event.symbol, event.value);
|
||||
} else {
|
||||
handle_property(event.uri,event.value);
|
||||
}
|
||||
} else {
|
||||
//debugger;
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,188 @@
|
||||
method = function (event,jsFuncs) {
|
||||
|
||||
|
||||
function LoadScripts(ds)
|
||||
{
|
||||
var script = event.icon.find("#ToobFrequencyScript");
|
||||
|
||||
$.get(script[0].src, function(data,status) {
|
||||
ds.OnFrequencyScriptLoaded.apply(ds,[data,status]);
|
||||
});
|
||||
|
||||
script = event.icon.find("#ToobVuScript");
|
||||
$.get(script[0].src, function(data,status) {
|
||||
ds.OnVuScriptLoaded.apply(ds,[data,status]);
|
||||
});
|
||||
script = event.icon.find("#ToobGainScript");
|
||||
$.get(script[0].src, function(data,status) {
|
||||
ds.OnGainScriptLoaded.apply(ds,[data,status]);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
function handle_event (symbol, value) {
|
||||
switch (symbol) {
|
||||
case "gate_t":
|
||||
{
|
||||
var ds = event.icon.data('xModFrequency');
|
||||
ds.SetGateThreshold(value);
|
||||
ds.SetGateEnabled(value != -80);
|
||||
}
|
||||
break;
|
||||
case "boost":
|
||||
{
|
||||
var ds = event.icon.data('xModFrequency');
|
||||
ds.SetBoost(value);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function MakeDs()
|
||||
{
|
||||
var ds = {
|
||||
|
||||
FREQUENCY_RESPONSE_URI: "http://two-play.com/plugins/toob#frequencyResponseVector",
|
||||
UI_STATE_URI: "http://two-play.com/plugins/toob-input_stage#uiState",
|
||||
|
||||
SpectrumDiv: event.icon.find('.toob_frequency_response'),
|
||||
|
||||
|
||||
attached: false,
|
||||
vuAttached: false,
|
||||
gainAttached: false,
|
||||
|
||||
OnGainScriptLoaded: function(data,status)
|
||||
{
|
||||
eval(data);
|
||||
if (ToobGain && !this.gainAttached)
|
||||
{
|
||||
this.gainAttached = true;
|
||||
this.ToobGain = ToobGain;
|
||||
this.gain = this.ToobGain.CreateWrapper(this.GainDiv,48,48);
|
||||
this.gain.SetValue(this.boost);
|
||||
}
|
||||
},
|
||||
|
||||
OnVuScriptLoaded: function(data,status)
|
||||
{
|
||||
eval(data);
|
||||
if (ToobVu && !this.vuAttached)
|
||||
{
|
||||
this.vuAttached = true;
|
||||
this.ToobVu = ToobVu;
|
||||
this.vu = this.ToobVu.CreateWrapper(this.VuDiv,1,48,130,-80,10,12);
|
||||
}
|
||||
},
|
||||
gateThreshold: -192,
|
||||
gateEnabled: false,
|
||||
SetGateThreshold: function(value)
|
||||
{
|
||||
this.gateThreshold = value;
|
||||
if (this.vu)
|
||||
{
|
||||
this.vu.SetGateThreshold(value);
|
||||
}
|
||||
},
|
||||
SetGateEnabled: function(enabled)
|
||||
{
|
||||
this.gateEnabled = enabled;
|
||||
if (this.vu)
|
||||
{
|
||||
this.vu.SetGateEnabled(enabled);
|
||||
}
|
||||
},
|
||||
boost: 0,
|
||||
SetBoost: function(value)
|
||||
{
|
||||
this.boost = value;
|
||||
if (this.gain)
|
||||
{
|
||||
this.gain.SetValue(value);
|
||||
}
|
||||
},
|
||||
OnFrequencyScriptLoaded: function(data,status)
|
||||
{
|
||||
eval(data);
|
||||
if (ToobFrequencyPlot && !ds.attached)
|
||||
{
|
||||
ds.ToobFrequencyPlot = ToobFrequencyPlot;
|
||||
ds.attached = true;
|
||||
ds.frequencyPlot = ToobFrequencyPlot.CreateWrapper(this.SpectrumDiv,178,78);
|
||||
}
|
||||
this.MaybeDrawResponse();
|
||||
},
|
||||
MaybeDrawResponse: function() {
|
||||
if (this.frequencyPlot && this.values)
|
||||
{
|
||||
this.frequencyPlot.SetValues(this.values);
|
||||
}
|
||||
},
|
||||
VuDiv: event.icon.find('.toob_vu'),
|
||||
GainDiv: event.icon.find('.toob_gain'),
|
||||
|
||||
UpdateFrequencyResults: function(values)
|
||||
{
|
||||
this.values = values;
|
||||
this.MaybeDrawResponse();
|
||||
},
|
||||
UpdateUiState: function(values)
|
||||
{
|
||||
var vuLevel = values[0];
|
||||
var gateState = values[1];
|
||||
if (this.vu)
|
||||
{
|
||||
this.vu.UpdateValue(vuLevel,gateState);
|
||||
}
|
||||
}
|
||||
};
|
||||
return ds;
|
||||
|
||||
}
|
||||
function handle_property(uri, value)
|
||||
{
|
||||
var ds = event.icon.data('xModFrequency');
|
||||
if (uri == ds.FREQUENCY_RESPONSE_URI)
|
||||
{
|
||||
ds.UpdateFrequencyResults(value);
|
||||
} else if (uri == ds.UI_STATE_URI)
|
||||
{
|
||||
ds.UpdateUiState(value);
|
||||
}
|
||||
}
|
||||
|
||||
if (event.type == 'start') {
|
||||
//debugger;
|
||||
if (event.api_version < 2)
|
||||
{
|
||||
alert("Requires mod-ui Javascript API 2.0 or later.");
|
||||
}
|
||||
|
||||
|
||||
// var dpy = event.icon.find('[mod-role=frequency-display]');
|
||||
|
||||
var ds = MakeDs();
|
||||
event.icon.data('xModFrequency', ds);
|
||||
LoadScripts(ds);
|
||||
var ports = event.ports;
|
||||
for (var p in ports) {
|
||||
handle_event(ports[p].symbol, ports[p].value);
|
||||
}
|
||||
// refresh the frequency display if not first load.
|
||||
jsFuncs.patch_get(ds.FREQUENCY_RESPONSE_URI);
|
||||
|
||||
}
|
||||
else if (event.type == 'change') {
|
||||
if (event.symbol)
|
||||
{
|
||||
handle_event (event.symbol, event.value);
|
||||
} else {
|
||||
handle_property(event.uri,event.value);
|
||||
}
|
||||
} else {
|
||||
//debugger;
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,257 @@
|
||||
method = function (event,jsFuncs) {
|
||||
|
||||
|
||||
function LoadScripts(ds)
|
||||
{
|
||||
var script = event.icon.find("#ToobFrequencyScript");
|
||||
|
||||
$.get(script[0].src, function(data,status) {
|
||||
ds.OnFrequencyScriptLoaded.apply(ds,[data,status]);
|
||||
});
|
||||
|
||||
script = event.icon.find("#ToobVuScript");
|
||||
$.get(script[0].src, function(data,status) {
|
||||
ds.OnVuScriptLoaded.apply(ds,[data,status]);
|
||||
});
|
||||
script = event.icon.find("#ToobGainScript");
|
||||
$.get(script[0].src, function(data,status) {
|
||||
ds.OnGainScriptLoaded.apply(ds,[data,status]);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
function handle_event (symbol, value) {
|
||||
var ds;
|
||||
switch (symbol) {
|
||||
case "gain1":
|
||||
{
|
||||
ds = event.icon.data('xModFrequency');
|
||||
ds.SetGain(0,value);
|
||||
}
|
||||
break;
|
||||
case "gain2":
|
||||
{
|
||||
ds = event.icon.data('xModFrequency');
|
||||
ds.SetGain(1,value);
|
||||
}
|
||||
break;
|
||||
case "gain3":
|
||||
{
|
||||
ds = event.icon.data('xModFrequency');
|
||||
ds.SetGain(2,value);
|
||||
}
|
||||
break;
|
||||
|
||||
case "boost":
|
||||
{
|
||||
ds = event.icon.data('xModFrequency');
|
||||
ds.SetBoost(value);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function MakeDs()
|
||||
{
|
||||
var ds = {
|
||||
|
||||
UI_STATE_URI: "http://two-play.com/plugins/toob-power-stage#uiState",
|
||||
|
||||
SpectrumDiv: event.icon.find('.toob_frequency_response'),
|
||||
|
||||
icon: event.icon,
|
||||
|
||||
|
||||
attached: false,
|
||||
vuAttached: false,
|
||||
gainAttached: false,
|
||||
|
||||
OnGainScriptLoaded: function(data,status)
|
||||
{
|
||||
eval(data);
|
||||
if (ToobGain && !this.gainAttached)
|
||||
{
|
||||
|
||||
|
||||
this.gainAttached = true;
|
||||
this.ToobGain = ToobGain;
|
||||
this.gainControls = [];
|
||||
|
||||
var divs = event.icon.find('.toob_gain');
|
||||
var self = this;
|
||||
divs.each(function (i)
|
||||
{
|
||||
self.gainControls[i] = self.ToobGain.CreateWrapper($(this),48,48);
|
||||
self.gainControls[i].SetValue(self.gains[i]);
|
||||
});
|
||||
|
||||
}
|
||||
},
|
||||
gains: [1E-7,1E-7,1E-7],
|
||||
SetGain: function(gainStage,value)
|
||||
{
|
||||
this.gains[gainStage] = value;
|
||||
if (this.gainControls)
|
||||
{
|
||||
this.gainControls[gainStage].SetValue(value);
|
||||
}
|
||||
},
|
||||
|
||||
SAG_METER_SIZE: { width: 2, height: 44},
|
||||
sagRects: [],
|
||||
|
||||
DrawSagMeters: function(selector)
|
||||
{
|
||||
var self = this;
|
||||
var targetFill = { fill: "#044", stroke: 'none'};
|
||||
selector.each(function (i) {
|
||||
var meter = $(this);
|
||||
meter.svg({onLoad: function (svg) {
|
||||
self.sagRects[i] = svg.rect(0,0,
|
||||
self.SAG_METER_SIZE.width,self.SAG_METER_SIZE.height,
|
||||
0,0,
|
||||
targetFill);
|
||||
}});
|
||||
});
|
||||
$(this)
|
||||
},
|
||||
|
||||
OnVuScriptLoaded: function(data,status)
|
||||
{
|
||||
eval(data);
|
||||
if (ToobVu && !this.vuAttached)
|
||||
{
|
||||
this.vuAttached = true;
|
||||
this.ToobVu = ToobVu;
|
||||
this.vuControls = [];
|
||||
var microVus = this.icon.find('.toob_micro_vu');
|
||||
var self = this;
|
||||
microVus.each(function (i)
|
||||
{
|
||||
self.vuControls[i] = self.ToobVu.CreateWrapper($(this),1,20,66,-30,10,0,true);
|
||||
self.vuControls[i].UpdateValue(self.vus[i]);
|
||||
});
|
||||
|
||||
var masterVu = this.icon.find('.toob_large_vu');
|
||||
this.vuControls[3] = this.ToobVu.CreateWrapper(masterVu,1,48,206,-80,10,12);
|
||||
this.vuControls[3].UpdateValue(this.vus[3]);
|
||||
}
|
||||
},
|
||||
vuControls: null,
|
||||
vus: [0,0,0,0],
|
||||
|
||||
SetVu: function(i,value)
|
||||
{
|
||||
this.vus[i] = value;
|
||||
if (this.vuControls)
|
||||
{
|
||||
this.vuControls[i].UpdateValue(value);
|
||||
}
|
||||
},
|
||||
|
||||
sag: 0,
|
||||
sagD: 0,
|
||||
|
||||
SetSag: function(value)
|
||||
{
|
||||
this.sag = value;
|
||||
var rect = this.sagRects[0];
|
||||
if (rect != undefined)
|
||||
{
|
||||
var y = this.SAG_METER_SIZE.height*this.sag;
|
||||
rect.setAttribute("top",y,"");
|
||||
rect.setAttribute("height",this.SAG_METER_SIZE.height-y,"");
|
||||
}
|
||||
},
|
||||
SetSagD: function(value)
|
||||
{
|
||||
|
||||
this.sagD = value;
|
||||
var rect = this.sagRects[1];
|
||||
if (rect != undefined)
|
||||
{
|
||||
var y = this.SAG_METER_SIZE.height*(this.sagD);
|
||||
rect.setAttribute("top",y,"");
|
||||
rect.setAttribute("height",this.SAG_METER_SIZE.height-y,"");
|
||||
}
|
||||
|
||||
},
|
||||
OnFrequencyScriptLoaded: function(data,status)
|
||||
{
|
||||
eval(data);
|
||||
if (ToobFrequencyPlot && !ds.attached)
|
||||
{
|
||||
ds.ToobFrequencyPlot = ToobFrequencyPlot;
|
||||
ds.attached = true;
|
||||
ds.frequencyPlot = ToobFrequencyPlot.CreateWrapper(this.SpectrumDiv,178,78);
|
||||
}
|
||||
this.MaybeDrawResponse();
|
||||
},
|
||||
MaybeDrawResponse: function() {
|
||||
if (this.frequencyPlot && this.values)
|
||||
{
|
||||
this.frequencyPlot.SetValues(this.values);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
UpdateFrequencyResults: function(values)
|
||||
{
|
||||
this.values = values;
|
||||
this.MaybeDrawResponse();
|
||||
},
|
||||
UpdateUiState: function(values)
|
||||
{
|
||||
for (var i = 0; i < 4; ++i)
|
||||
{
|
||||
this.SetVu(i,values[i]);
|
||||
}
|
||||
this.SetSag(values[4]);
|
||||
this.SetSagD(values[5]);
|
||||
}
|
||||
};
|
||||
ds.DrawSagMeters(event.icon.find(".toob-sag-meter"));
|
||||
return ds;
|
||||
|
||||
}
|
||||
function handle_property(uri, value)
|
||||
{
|
||||
var ds = event.icon.data('xModFrequency');
|
||||
if (uri == ds.FREQUENCY_RESPONSE_URI)
|
||||
{
|
||||
ds.UpdateFrequencyResults(value);
|
||||
} else if (uri == ds.UI_STATE_URI)
|
||||
{
|
||||
ds.UpdateUiState(value);
|
||||
}
|
||||
}
|
||||
|
||||
if (event.type == 'start') {
|
||||
debugger;
|
||||
|
||||
|
||||
// var dpy = event.icon.find('[mod-role=frequency-display]');
|
||||
|
||||
var ds = MakeDs();
|
||||
event.icon.data('xModFrequency', ds);
|
||||
LoadScripts(ds);
|
||||
var ports = event.ports;
|
||||
for (var p in ports) {
|
||||
handle_event(ports[p].symbol, ports[p].value);
|
||||
}
|
||||
|
||||
}
|
||||
else if (event.type == 'change') {
|
||||
if (event.symbol)
|
||||
{
|
||||
handle_event (event.symbol, event.value);
|
||||
} else {
|
||||
handle_property(event.uri,event.value);
|
||||
}
|
||||
} else {
|
||||
//debugger;
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,130 @@
|
||||
method = function (event,jsFuncs) {
|
||||
|
||||
|
||||
function LoadScripts(ds)
|
||||
{
|
||||
var script = event.icon.find("#ToobFrequencyScript");
|
||||
|
||||
$.get(script[0].src, function(data,status) {
|
||||
ds.OnFrequencyScriptLoaded.apply(ds,[data,status]);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
function handle_event (symbol, value) {
|
||||
switch (symbol) {
|
||||
case "gate_t":
|
||||
{
|
||||
var ds = event.icon.data('xModFrequency');
|
||||
ds.SetGateThreshold(value);
|
||||
ds.SetGateEnabled(value != -80);
|
||||
}
|
||||
break;
|
||||
case "boost":
|
||||
{
|
||||
var ds = event.icon.data('xModFrequency');
|
||||
ds.SetBoost(value);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function MakeDs()
|
||||
{
|
||||
var ds = {
|
||||
|
||||
FREQUENCY_RESPONSE_URI: "http://two-play.com/plugins/toob#frequencyResponseVector",
|
||||
UI_STATE_URI: "http://two-play.com/plugins/toob-tone-stack#uiState",
|
||||
|
||||
SpectrumDiv: event.icon.find('.toob_tonestack_fresp'),
|
||||
|
||||
|
||||
attached: false,
|
||||
|
||||
OnFrequencyScriptLoaded: function(data,status)
|
||||
{
|
||||
eval(data);
|
||||
if (ToobFrequencyPlot && !ds.attached)
|
||||
{
|
||||
//debugger;
|
||||
ds.ToobFrequencyPlot = ToobFrequencyPlot;
|
||||
ds.attached = true;
|
||||
ds.frequencyPlot = ToobFrequencyPlot.CreateWrapper(this.SpectrumDiv,176,86,-25,3);
|
||||
}
|
||||
this.MaybeDrawResponse();
|
||||
},
|
||||
MaybeDrawResponse: function() {
|
||||
if (this.frequencyPlot && this.values)
|
||||
{
|
||||
this.frequencyPlot.SetValues(this.values);
|
||||
}
|
||||
},
|
||||
VuDiv: event.icon.find('.cabsim_vu'),
|
||||
|
||||
UpdateFrequencyResults: function(values)
|
||||
{
|
||||
this.values = values;
|
||||
this.MaybeDrawResponse();
|
||||
},
|
||||
UpdateUiState: function(values)
|
||||
{
|
||||
var vuLevel = values[0];
|
||||
var gateState = values[1];
|
||||
if (this.vu)
|
||||
{
|
||||
this.vu.UpdateValues([ values[0], values[1] ],gateState);
|
||||
}
|
||||
}
|
||||
};
|
||||
return ds;
|
||||
|
||||
}
|
||||
function handle_property(uri, value)
|
||||
{
|
||||
var ds = event.icon.data('xModFrequency');
|
||||
if (uri == ds.FREQUENCY_RESPONSE_URI)
|
||||
{
|
||||
ds.UpdateFrequencyResults(value);
|
||||
} else if (uri == ds.UI_STATE_URI)
|
||||
{
|
||||
ds.UpdateUiState(value);
|
||||
}
|
||||
}
|
||||
|
||||
if (event.type == 'start') {
|
||||
//debugger;
|
||||
|
||||
if (event.api_version < 2)
|
||||
{
|
||||
alert("Requires mod-ui Javascript API 2.0 or later.");
|
||||
}
|
||||
|
||||
|
||||
// var dpy = event.icon.find('[mod-role=frequency-display]');
|
||||
|
||||
var ds = MakeDs();
|
||||
event.icon.data('xModFrequency', ds);
|
||||
LoadScripts(ds);
|
||||
var ports = event.ports;
|
||||
for (var p in ports) {
|
||||
handle_event(ports[p].symbol, ports[p].value);
|
||||
}
|
||||
// refresh the frequency display if not first load.
|
||||
jsFuncs.patch_get(ds.FREQUENCY_RESPONSE_URI);
|
||||
|
||||
}
|
||||
else if (event.type == 'change') {
|
||||
if (event.symbol)
|
||||
{
|
||||
handle_event (event.symbol, event.value);
|
||||
} else {
|
||||
handle_property(event.uri,event.value);
|
||||
}
|
||||
} else {
|
||||
//debugger;
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,542 @@
|
||||
/* SKINS */
|
||||
.mod-rack-reaktor{{{cns}}} {
|
||||
background-image:url(/resources/racks/reaktor/reaktor.png{{{ns}}});
|
||||
background-position:center center;
|
||||
background-repeat:no-repeat;
|
||||
font-family:Helvetica,Arial,Sans-serif;
|
||||
height:255px;
|
||||
position:relative;
|
||||
width:458px;
|
||||
}
|
||||
.mod-rack-power-stage{{{cns}}} {
|
||||
background-image:url(/resources/racks/reaktor/PowerStage.png{{{ns}}});
|
||||
width:701px;
|
||||
}
|
||||
.mod-rack-cab-sim{{{cns}}} {
|
||||
background-image:url(/resources/racks/reaktor/CabSimulator.png{{{ns}}});
|
||||
width:458px;
|
||||
}
|
||||
.mod-rack-tone-stack{{{cns}}} {
|
||||
background-image:url(/resources/racks/reaktor/ToneStack.png{{{ns}}});
|
||||
width:341px;
|
||||
}
|
||||
|
||||
/* THE AUTHOR */
|
||||
.mod-rack-reaktor{{{cns}}} .mod-plugin-brand h1 {
|
||||
color:#fff;
|
||||
font-size:14px;
|
||||
left:70px;
|
||||
line-height:1;
|
||||
margin:0;
|
||||
position:absolute;
|
||||
top:20px;
|
||||
}
|
||||
|
||||
/* PLUGIN'S NAME */
|
||||
.mod-rack-reaktor{{{cns}}} .mod-plugin-name h1 {
|
||||
color:#fff;
|
||||
font-size:18px;
|
||||
left:75px;
|
||||
top:26px;
|
||||
opacity: 0.6;
|
||||
|
||||
line-height:1;
|
||||
margin:0;
|
||||
position:absolute;
|
||||
}
|
||||
|
||||
/* INPUT/OUTPUT */
|
||||
.mod-rack-reaktor{{{cns}}} .mod-pedal-input {
|
||||
top:25px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .mod-pedal-output {
|
||||
top:25px;
|
||||
}
|
||||
|
||||
/* CONTROLS */
|
||||
.mod-rack-reaktor{{{cns}}} .mod-control-group {
|
||||
bottom:15px;
|
||||
color:#fff;
|
||||
font-size:10px;
|
||||
height:210px;
|
||||
bottom: 15px;
|
||||
left:32px;
|
||||
position:absolute;
|
||||
right:32px;
|
||||
z-index: 30;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .mod-control-group > div {
|
||||
margin-right:4px;
|
||||
}
|
||||
|
||||
/* SWITCH ON/OFF GENERAL */
|
||||
.mod-rack-reaktor{{{cns}}} .mod-switch {
|
||||
cursor:pointer;
|
||||
float:left;
|
||||
height:73px;
|
||||
position:relative;
|
||||
width:73px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .mod-switch-image {
|
||||
background-image:url(/resources/switches/switch-001.png{{{ns}}});
|
||||
background-position:-9px 0px;
|
||||
background-repeat:no-repeat;
|
||||
background-size:auto 73px;
|
||||
height:73px;
|
||||
width:73px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .mod-switch-image.on {
|
||||
background-position:-82px 0px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .mod-switch-image.off {
|
||||
background-position:-9px 0px;
|
||||
}
|
||||
|
||||
/* SMALL CONTROL */
|
||||
.mod-rack-reaktor{{{cns}}} .mod-bakelite-small {
|
||||
float:left;
|
||||
height:52px;
|
||||
overflow:hidden;
|
||||
position:relative;
|
||||
text-align:center;
|
||||
width:46px;
|
||||
}
|
||||
.mod-rack-reaktor{{{cns}}} .mod-bakelite-small .mod-bakelite-image {
|
||||
background-image:url(/resources/knobs/bakelite/_strip.png{{{ns}}});
|
||||
background-position:left 0px;
|
||||
background-repeat:no-repeat;
|
||||
background-size:auto 36px;
|
||||
height:36px;
|
||||
margin-top:0px;
|
||||
position:relative;
|
||||
width:36px;
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
z-index:2;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .mod-bakelite-small .mod-bakelite-title {
|
||||
font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;
|
||||
opacity: 0.5;
|
||||
font-size:9px;
|
||||
font-weight:bold;
|
||||
height:16px;
|
||||
left:0;
|
||||
overflow:hidden;
|
||||
position:absolute;
|
||||
right:0;
|
||||
text-transform:uppercase;
|
||||
top:37px;
|
||||
z-index:1;
|
||||
}
|
||||
|
||||
/* MEDIUM CONTROL */
|
||||
.mod-rack-reaktor{{{cns}}} .mod-bakelite {
|
||||
float:left;
|
||||
height:70px;
|
||||
overflow:hidden;
|
||||
position:relative;
|
||||
text-align:center;
|
||||
width:60px;
|
||||
}
|
||||
.mod-rack-reaktor{{{cns}}} .mod-bakelite .mod-bakelite-image {
|
||||
background-image:url(/resources/knobs/bakelite/_strip.png{{{ns}}});
|
||||
background-position:left 0px;
|
||||
background-repeat:no-repeat;
|
||||
background-size:auto 50px;
|
||||
height:50px;
|
||||
margin-top:0px;
|
||||
position:relative;
|
||||
width:50px;
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
z-index:2;
|
||||
}
|
||||
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .mod-bakelite .mod-bakelite-title {
|
||||
font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;
|
||||
opacity: 0.5;
|
||||
font-size:10px;
|
||||
font-weight:bold;
|
||||
height:16px;
|
||||
left:0;
|
||||
overflow:hidden;
|
||||
position:absolute;
|
||||
right:0;
|
||||
text-transform:uppercase;
|
||||
top:49px;
|
||||
z-index:1;
|
||||
}
|
||||
|
||||
/* ENUMERATED LIST */
|
||||
.mod-rack-reaktor{{{cns}}} .mod-enumerated {
|
||||
display:inline-block;
|
||||
overflow:hidden;
|
||||
position:absolute;
|
||||
top:-42px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .mod-enumerated.mod-enumerated-1 {
|
||||
left:135px;
|
||||
width:326px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .mod-enumerated.mod-enumerated-2 {
|
||||
left:476px;
|
||||
width:326px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .mod-enumerated.mod-enumerated-3 {
|
||||
left:820px;
|
||||
width:98px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .mod-enumerated .mod-enumerated-selected {
|
||||
background-color:rgba(255,255,255,.2);
|
||||
background-image:url(/resources/utils/dropdown-arrow-white.png{{{ns}}});
|
||||
background-position:right center;
|
||||
background-repeat:no-repeat;
|
||||
border-radius:4px;
|
||||
box-shadow:inset 1px 1px 5px #000;
|
||||
color:#fff;
|
||||
font-size:14px;
|
||||
height:34px;
|
||||
line-height:2.5;
|
||||
margin-right:8px;
|
||||
overflow:hidden;
|
||||
padding:0 9px;
|
||||
}
|
||||
|
||||
/* WHEN IS HOVER */
|
||||
.mod-rack-reaktor{{{cns}}} .mod-enumerated:hover .mod-enumerated-selected {
|
||||
border-radius:4px 4px 0 0;
|
||||
}
|
||||
|
||||
/* THE LIST OF OPTIONS */
|
||||
.mod-rack-reaktor{{{cns}}} .mod-enumerated .mod-enumerated-list {
|
||||
display:none;
|
||||
background:rgba(0,0,0,.9);
|
||||
height:85px;
|
||||
overflow:auto;
|
||||
position:relative;
|
||||
z-index:3;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .mod-enumerated .mod-enumerated-list > div {
|
||||
padding:3px 9px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .mod-enumerated .mod-enumerated-list > div:hover {
|
||||
background:rgba(255,255,255,.2);
|
||||
cursor:pointer;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .mod-enumerated.mod-enumerated-1:hover .mod-enumerated-list,
|
||||
.mod-rack-reaktor{{{cns}}} .mod-enumerated.mod-enumerated-2:hover .mod-enumerated-list {
|
||||
width:318px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .mod-enumerated.mod-enumerated-3:hover .mod-enumerated-list {
|
||||
width:90px;
|
||||
}
|
||||
|
||||
/* SEPARATOR */
|
||||
.mod-rack-reaktor{{{cns}}} .mod-separator {
|
||||
background:#bbb;
|
||||
border-color:#000;
|
||||
border-style:solid;
|
||||
border-width:0 1px 0 0;
|
||||
display:inline-block;
|
||||
float:left;
|
||||
height:69px;
|
||||
margin-top:2px;
|
||||
width:1px;
|
||||
}
|
||||
|
||||
.toob_logo_head {
|
||||
background-image:url(/resources/img/toob_logo.png{{{ns}}});
|
||||
background-position:left 0px;
|
||||
background-repeat:no-repeat;
|
||||
background-size:auto 32px;
|
||||
height:32px;
|
||||
width: 20px;
|
||||
margin-bottom: 0px;
|
||||
z-index:2;
|
||||
|
||||
left:50px;
|
||||
top: 20px;
|
||||
|
||||
margin:0;
|
||||
position:absolute;
|
||||
|
||||
}
|
||||
|
||||
.toob_column {
|
||||
display: flex;
|
||||
flex-shrink: 0;
|
||||
flex-grow: 0;
|
||||
align-self: flex-end;
|
||||
|
||||
}
|
||||
|
||||
.toob_column_grid {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: nowrap;
|
||||
justify-content: flex-start;
|
||||
align-items: flex-end;
|
||||
|
||||
}
|
||||
|
||||
.toob_column_row {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
align-self: center;
|
||||
|
||||
}
|
||||
|
||||
.toob_row_grid {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-wrap: nowrap;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
}
|
||||
.mod-rack-reaktor{{{cns}}} .toob_frequency_response {
|
||||
position: relative;
|
||||
width: 180px;
|
||||
height: 60px;
|
||||
background: #001414;
|
||||
margin-bottom: 2px;
|
||||
border-top: 1px solid Black;
|
||||
border-bottom: 1px solid #666;
|
||||
border-left: 1px solid #222;
|
||||
border-right: 1px solid #333;
|
||||
overflow: hidden;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_frequency_response .hasSVG {
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
width: 178px;
|
||||
height: 58px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_frequency_response svg {
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
width: 178px;
|
||||
height: 58px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_cabsim_fresp {
|
||||
position: relative;
|
||||
width: 240px;
|
||||
height: 60px;
|
||||
margin-bottom: 2px;
|
||||
margin-top: 8px;
|
||||
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_frequency_response.toob_tonestack_fresp {
|
||||
margin-bottom: 10px;
|
||||
height: 90px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_cabsim_fresp .hasSVG {
|
||||
width: 238px; height: 56px;
|
||||
}
|
||||
.mod-rack-reaktor{{{cns}}} .toob_cabsim_fresp svg {
|
||||
width: 238px; height: 56px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_tonestack_fresp .hasSVG {
|
||||
width: 176px; height: 86px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_tonestack_fresp svg {
|
||||
width: 176px; height: 86px;
|
||||
}
|
||||
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_scope_background {
|
||||
stroke: #011;
|
||||
stroke-width: 0.5;
|
||||
fill: none;
|
||||
}
|
||||
.mod-rack-reaktor{{{cns}}} .toob_scope_line {
|
||||
stroke: #AA0;
|
||||
stroke-width: 0.5;
|
||||
fill: none;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_yaxis_major {
|
||||
stroke: #066;
|
||||
stroke-width: 0.5;
|
||||
fill: none;
|
||||
}
|
||||
.mod-rack-reaktor{{{cns}}} .toob_yaxis_major {
|
||||
stroke: #066;
|
||||
stroke-width: 0.25;
|
||||
fill: none;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_vu {
|
||||
width: 48px;
|
||||
height: 130px;
|
||||
margin-bottom: 4px;
|
||||
background: transparent;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_vu .hasSVG {
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
width: 48px;
|
||||
height: 130px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_vu svg {
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
width: 48px;
|
||||
height: 130px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_micro_vu {
|
||||
width: 20px; height:66px;
|
||||
margin-right: 40px;
|
||||
margin-bottom: 4px;
|
||||
background: transparent;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_micro_vu .hasSVG {
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
width: 20px; height:66px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_micro_vu svg {
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
width: 20px; height:66px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_large_vu {
|
||||
width: 48px; height:206px;
|
||||
margin-bottom: 4px;
|
||||
background: transparent;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_large_vu .hasSVG {
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
width: 48px; height:206px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_large_vu svg {
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
width: 48px; height:206px;
|
||||
}
|
||||
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_gain {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin-bottom: 4px;
|
||||
background: transparent;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
border-top: 1px solid Black;
|
||||
border-bottom: 1px solid #666;
|
||||
border-left: 1px solid #222;
|
||||
border-right: 1px solid #333;
|
||||
background: #001414;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_gain_power-stage {
|
||||
margin-top: 16px;
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
.mod-rack-reaktor{{{cns}}} .toob_gain .hasSVG {
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob_gain svg {
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob-amp-model{
|
||||
width: 97px; height: 32px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob-amp-model-image {
|
||||
background-image:url(/resources/switches/AmpModel.png{{{ns}}}) !important;
|
||||
width: 97px; height: 32px;
|
||||
background-repeat:no-repeat;
|
||||
background-size: 97px 64px;
|
||||
|
||||
}
|
||||
.mod-rack-reaktor{{{cns}}} .toob-amp-model-image.on {
|
||||
background-position-y: -32px;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob-sag-meter {
|
||||
width: 4px; height: 46px; margin-top: 4px; margin-bottom: 22px; padding: 1px; background: #000;
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob-sag-meter.hasSVG {
|
||||
}
|
||||
|
||||
.mod-rack-reaktor{{{cns}}} .toob-sag-meter svg {
|
||||
width: 2px; height: 44px;
|
||||
}
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 977 B |
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1 @@
|
||||
cp -R /usr/lib/lv2/ToobAmp.lv2/ ./lv2/aarch64/
|
||||
@@ -33,7 +33,7 @@ set(LIBNL3_LIBRARIES nl-3 nl-genl-3)
|
||||
|
||||
pkg_check_modules(SYSTEMD "systemd")
|
||||
if(!SYSTEMD_FOUND)
|
||||
message(ERROR "libsystemd-dev package not installed.")
|
||||
message(STATUS "libsystemd-dev package not installed.")
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
@@ -126,17 +126,6 @@ void StopService(bool excludeShutdownService = false)
|
||||
}
|
||||
}
|
||||
|
||||
void Uninstall()
|
||||
{
|
||||
StopService();
|
||||
DisableService();
|
||||
silentSysExec(SYSTEMCTL_BIN " stop jack");
|
||||
silentSysExec(SYSTEMCTL_BIN " disable jack");
|
||||
std::filesystem::remove("/usr/bin/systemd/system/" SHUTDOWN_SERVICE ".service");
|
||||
std::filesystem::remove("/usr/bin/systemd/system/" NATIVE_SERVICE ".service");
|
||||
std::filesystem::remove("/usr/bin/systemd/system/" JACK_SERVICE ".service");
|
||||
}
|
||||
|
||||
void StartService(bool excludeShutdownService = false)
|
||||
{
|
||||
|
||||
@@ -196,9 +185,63 @@ static bool userExists(const char *userName)
|
||||
return true;
|
||||
}
|
||||
|
||||
static void RemoveLine(const std::string&path, const std::string lineToRemove)
|
||||
{
|
||||
std::string newLine = PAM_LINE;
|
||||
std::vector<std::string> lines;
|
||||
try
|
||||
{
|
||||
if (std::filesystem::exists(path))
|
||||
{
|
||||
{
|
||||
ifstream f(path);
|
||||
if (!f.is_open())
|
||||
{
|
||||
throw PiPedalException((std::stringstream() << "Can't open " << path).str());
|
||||
}
|
||||
while (true)
|
||||
{
|
||||
std::string line;
|
||||
if (f.eof())
|
||||
break;
|
||||
std::getline(f, line);
|
||||
if (line != lineToRemove)
|
||||
{
|
||||
lines.push_back(line);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
std::ofstream f(path);
|
||||
if (!f.is_open())
|
||||
{
|
||||
throw PiPedalException("Can't write to file.");
|
||||
}
|
||||
for (auto&line: lines)
|
||||
{
|
||||
f << line << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (const std::exception &e)
|
||||
{
|
||||
cout << "Failed to update " << path << ". " << e.what();
|
||||
}
|
||||
}
|
||||
|
||||
const std::string PAM_LINE = "JACK_PROMISCUOUS_SERVER DEFAULT=" JACK_SERVICE_GROUP_NAME;
|
||||
void UninstallPamEnv()
|
||||
{
|
||||
RemoveLine(
|
||||
"/etc/security/pam_env.conf",
|
||||
PAM_LINE
|
||||
);
|
||||
}
|
||||
void InstallPamEnv()
|
||||
{
|
||||
std::string newLine = "JACK_PROMISCUOUS_SERVER DEFAULT=" JACK_SERVICE_GROUP_NAME;
|
||||
std::string newLine = PAM_LINE;
|
||||
std::vector<std::string> lines;
|
||||
std::filesystem::path path = "/etc/security/pam_env.conf";
|
||||
try
|
||||
@@ -209,7 +252,7 @@ void InstallPamEnv()
|
||||
ifstream f(path);
|
||||
if (!f.is_open())
|
||||
{
|
||||
throw PiPedalException("Can't open pam_env.conf");
|
||||
throw PiPedalException((std::stringstream() << "Can't open " << path).str());
|
||||
}
|
||||
while (true)
|
||||
{
|
||||
@@ -256,7 +299,7 @@ void InstallLimits()
|
||||
throw PiPedalException("Failed to create audio service group.");
|
||||
}
|
||||
|
||||
std::filesystem::path limitsConfig = "/usr/security/audio.conf";
|
||||
std::filesystem::path limitsConfig = "/usr/security/pipedal.conf";
|
||||
|
||||
if (!std::filesystem::exists(limitsConfig))
|
||||
{
|
||||
@@ -267,6 +310,16 @@ void InstallLimits()
|
||||
}
|
||||
}
|
||||
|
||||
void UninstallLimits()
|
||||
{
|
||||
std::filesystem::path limitsConfig = "/usr/security/pipedal.conf";
|
||||
|
||||
if (std::filesystem::exists(limitsConfig))
|
||||
{
|
||||
std::filesystem::remove(limitsConfig);
|
||||
}
|
||||
}
|
||||
|
||||
void MaybeStartJackService()
|
||||
{
|
||||
std::filesystem::path drcFile = "/etc/jackdrc";
|
||||
@@ -315,6 +368,41 @@ void InstallJackService()
|
||||
MaybeStartJackService();
|
||||
}
|
||||
|
||||
|
||||
int SudoExec(char **argv)
|
||||
{
|
||||
int pbPid;
|
||||
int returnValue = 0;
|
||||
|
||||
if ((pbPid = fork()) == 0)
|
||||
{
|
||||
execv(argv[0], argv);
|
||||
exit(-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
waitpid(pbPid, &returnValue, 0);
|
||||
int exitStatus = WEXITSTATUS(returnValue);
|
||||
return exitStatus;
|
||||
}
|
||||
}
|
||||
|
||||
void Uninstall()
|
||||
{
|
||||
StopService();
|
||||
DisableService();
|
||||
silentSysExec(SYSTEMCTL_BIN " stop jack");
|
||||
silentSysExec(SYSTEMCTL_BIN " disable jack");
|
||||
std::filesystem::remove("/usr/bin/systemd/system/" SHUTDOWN_SERVICE ".service");
|
||||
std::filesystem::remove("/usr/bin/systemd/system/" NATIVE_SERVICE ".service");
|
||||
std::filesystem::remove("/usr/bin/systemd/system/" JACK_SERVICE ".service");
|
||||
UninstallPamEnv();
|
||||
UninstallLimits();
|
||||
sysExec(SYSTEMCTL_BIN " daemon-reload");
|
||||
|
||||
}
|
||||
|
||||
|
||||
void Install(const std::filesystem::path &programPrefix, const std::string endpointAddress)
|
||||
{
|
||||
if (sysExec(GROUPADD_BIN " -f " AUDIO_SERVICE_GROUP_NAME) != EXIT_SUCCESS)
|
||||
@@ -473,23 +561,6 @@ void Install(const std::filesystem::path &programPrefix, const std::string endpo
|
||||
cout << "Complete" << endl;
|
||||
}
|
||||
|
||||
int SudoExec(char **argv)
|
||||
{
|
||||
int pbPid;
|
||||
int returnValue = 0;
|
||||
|
||||
if ((pbPid = fork()) == 0)
|
||||
{
|
||||
execv(argv[0], argv);
|
||||
exit(-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
waitpid(pbPid, &returnValue, 0);
|
||||
int exitStatus = WEXITSTATUS(returnValue);
|
||||
return exitStatus;
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
|
||||