diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..3ca0a50 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,16 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "type": "cmake", + "label": "CMake: clean rebuild", + "command": "cleanRebuild", + "targets": [ + "all" + ], + "group": "build", + "problemMatcher": [], + "detail": "CMake template clean rebuild task" + } + ] +} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index a4fbce2..50bb735 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,13 +1,13 @@ cmake_minimum_required(VERSION 3.16.0) project(pipedal - VERSION 1.5.95 + VERSION 1.5.97 DESCRIPTION "PiPedal Guitar Effect Pedal For Raspberry Pi" HOMEPAGE_URL "https://rerdavies.github.io/pipedal" ) execute_process( COMMAND dpkg --print-architecture COMMAND tr -d '\n' OUTPUT_VARIABLE DEBIAN_ARCHITECTURE ) -set (DISPLAY_VERSION "PiPedal v1.5.95-Experimental") +set (DISPLAY_VERSION "PiPedal v1.5.97-Beta") set (PACKAGE_ARCHITECTURE ${DEBIAN_ARCHITECTURE}) set (CMAKE_INSTALL_PREFIX "/usr/") diff --git a/README.md b/README.md index 156e2a7..51bcfc8 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,11 @@ -Download: v1.5.95 +Download: v1.5.97 Website: [https://rerdavies.github.io/pipedal](https://rerdavies.github.io/pipedal). Documentation: [https://rerdavies.github.io/pipedal/Documentation.html](https://rerdavies.github.io/pipedal/Documentation.html). -#### NEW version 1.5.95 Release. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details. TooB NAM calibration, manipulation of i/r files in Toob Convolution Reverb, new Parametric EQ and 3 Band EQ plugins, and MORE! +#### NEW version 1.5.97 Release. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details. TooB NAM calibration, manipulation of i/r files in Toob Convolution Reverb, new Parametric EQ and 3 Band EQ plugins, and MORE!   diff --git a/docs/Installing.md b/docs/Installing.md index 4f53ef2..7054900 100644 --- a/docs/Installing.md +++ b/docs/Installing.md @@ -13,18 +13,18 @@ page_icon: img/Install4.jpg Download the most recent Debian (.deb) package for your platform: -- [Raspberry Pi OS bookworm (aarch64) v1.5.95](https://github.com/rerdavies/pipedal/releases/download/v1.5.95/pipedal_1.5.95_arm64.deb) -- [Ubuntu 24.04 through 25.04 (aarch64) v1.5.95](https://github.com/rerdavies/pipedal/releases/download/v1.5.95/pipedal_1.5.95_arm64.deb) -- [Ubuntu 24.04 through 25.04 (amd64) v1.5.95](https://github.com/rerdavies/pipedal/releases/download/v1.5.95/pipedal_1.5.95_amd64.deb) +- [Raspberry Pi OS bookworm (aarch64) v1.5.97](https://github.com/rerdavies/pipedal/releases/download/v1.5.97/pipedal_1.5.97_arm64.deb) +- [Ubuntu 24.04 through 25.04 (aarch64) v1.5.97](https://github.com/rerdavies/pipedal/releases/download/v1.5.97/pipedal_1.5.97_arm64.deb) +- [Ubuntu 24.04 through 25.04 (amd64) v1.5.97](https://github.com/rerdavies/pipedal/releases/download/v1.5.97/pipedal_1.5.97_amd64.deb) -Version 1.5.95 has been tested on Raspberry Pi OS bookworm, Ubuntu 24.04 (amd64), Ubuntu 24.10 (aarch64), and Ubuntu 25.04 (aarch64). Download the appropriate package for your platform, and install using the following procedure: +Version 1.5.97 has been tested on Raspberry Pi OS bookworm, Ubuntu 24.04 (amd64), Ubuntu 24.10 (aarch64), and Ubuntu 25.04 (aarch64). Download the appropriate package for your platform, and install using the following procedure: ``` sudo apt update sudo apt upgrade cd ~/Downloads - sudo apt-get install ./pipedal_1.5.95_arm64.deb + sudo apt-get install ./pipedal_1.5.97_arm64.deb ``` You MUST use `apt-get`. `apt` will not install downloaded packages; and `dpkg -i` will not install dependencies. diff --git a/docs/ReleaseNotes.md b/docs/ReleaseNotes.md index 5a0115c..1a23ddc 100644 --- a/docs/ReleaseNotes.md +++ b/docs/ReleaseNotes.md @@ -1,5 +1,25 @@ # Release Notes +## PiPedal 1.5.97 Beta + +### Features + +- Stereo versions of TooB 3 Band EQ and TooB Parameteric EQ +- Added a Start Offset control to the TooB Convolution Reverbs. + +### Bug Fixes + +- TooB 3 Band Eq has no effect. +- TooB Convolution Reveb Bypass not saved in Snapshots. +- Split controls do not reset to default when double-tapped/-clicked. +- Convolution Reverb: Default values changed. Direct control defaults to 0dB, Reverb control defaults to -12dB +- L/R Split volume controls should default to 0Db instead of -3dB. +- Split controls behave unpredictably if the type of a Split is changed by a snapshot change. +- Split controls behave unpredictably if the type of a Split is changed when switching between presets that have otherwise identical structure. +- File selections are lost when switching between presets that have identical structure. +- Snapshot plugin states are not trimmed when a plugin is removed. +- Allow license.txt/.md and readme.txt/.md files to be uploaded via .zip files. + ## PiPedal 1.5.95 Beta Usability tweaks that have been blocked by a pending major feature, that needed to be released to satisfy commitments made to users. Now pushed out for general use. diff --git a/docs/download.md b/docs/download.md index edf7ba8..226941a 100644 --- a/docs/download.md +++ b/docs/download.md @@ -4,9 +4,9 @@ Download the most recent Debian (.deb) package for your platform: -- [Raspberry Pi OS bookworm (aarch64) v1.5.95 Beta](https://github.com/rerdavies/pipedal/releases/download/v1.5.95/pipedal_1.5.95_arm64.deb) -- [Ubuntu 24.x, 25.04 (aarch64) v1.5.95 Alpha](https://github.com/rerdavies/pipedal/releases/download/v1.5.95/pipedal_1.5.95_arm64.deb) -- [Ubuntu 24.x, 25.04 (amd64) v1.5.95 Alpha](https://github.com/rerdavies/pipedal/releases/download/v1.5.95/pipedal_1.5.95_amd64.deb) +- [Raspberry Pi OS bookworm (aarch64) v1.5.97 Beta](https://github.com/rerdavies/pipedal/releases/download/v1.5.97/pipedal_1.5.97_arm64.deb) +- [Ubuntu 24.x, 25.04 (aarch64) v1.5.97 Alpha](https://github.com/rerdavies/pipedal/releases/download/v1.5.97/pipedal_1.5.97_arm64.deb) +- [Ubuntu 24.x, 25.04 (amd64) v1.5.97 Alpha](https://github.com/rerdavies/pipedal/releases/download/v1.5.97/pipedal_1.5.97_amd64.deb) Install the package by running @@ -14,7 +14,7 @@ Install the package by running ``` sudo apt update cd ~/Downloads - sudo apt-get install ./pipedal_1.5.95_arm64.deb + sudo apt-get install ./pipedal_1.5.97_arm64.deb ``` You MUST use `apt-get` to install the package. `apt install` will NOT install the package correctly. The message about missing permissions given by `apt-get` is expected, and can be safely ignored. diff --git a/lv2/aarch64/ToobAmp.lv2/CabIR.ttl b/lv2/aarch64/ToobAmp.lv2/CabIR.ttl index b7c3ad0..b7e7cd1 100644 --- a/lv2/aarch64/ToobAmp.lv2/CabIR.ttl +++ b/lv2/aarch64/ToobAmp.lv2/CabIR.ttl @@ -93,7 +93,7 @@ cabir:impulseFile3 doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ TooB Cab IR is a convolution-based guitar cabinet impulse response simulator. diff --git a/lv2/aarch64/ToobAmp.lv2/CabSim.ttl b/lv2/aarch64/ToobAmp.lv2/CabSim.ttl index 47ba153..4f9cad5 100644 --- a/lv2/aarch64/ToobAmp.lv2/CabSim.ttl +++ b/lv2/aarch64/ToobAmp.lv2/CabSim.ttl @@ -50,7 +50,7 @@ toob:frequencyResponseVector doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; mod:brand "TooB"; mod:label "TooB CabSim"; diff --git a/lv2/aarch64/ToobAmp.lv2/ConvolutionReverb.ttl b/lv2/aarch64/ToobAmp.lv2/ConvolutionReverb.ttl index b8d77f9..30632fb 100644 --- a/lv2/aarch64/ToobAmp.lv2/ConvolutionReverb.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ConvolutionReverb.ttl @@ -53,7 +53,7 @@ toobimpulse:impulseFile doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ Toob Convolution Reverb Stereo uses convolution reverb impulse/response files in order to produce highly @@ -208,7 +208,7 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 lv2:index 2; lv2:symbol "direct_mix" ; lv2:name "Direct"; - lv2:default -3.0 ; + lv2:default 0.0 ; lv2:minimum -40.0 ; lv2:maximum 40.0 ; units:unit units:db ; @@ -228,7 +228,7 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 lv2:symbol "reverb_mix" ; lv2:name "Reverb"; - lv2:default -6.0 ; + lv2:default -12.0 ; lv2:minimum -40.0 ; lv2:maximum 40.0 ; units:unit units:db ; @@ -264,7 +264,6 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 ]; rdfs:comment "Removes leading silence in impulse when set to false." ; ], - [ a lv2:InputPort , lv2:ControlPort ; @@ -291,6 +290,27 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 lv2:ControlPort ; lv2:index 6 ; + lv2:symbol "start" ; + lv2:name "Start Offset"; + + + lv2:default 1.0 ; + lv2:minimum 1.0; + lv2:maximum 300.0 ; + + units:unit units:ms ; + lv2:portProperty epp:logarithmic; + lv2:scalePoint [ + rdfs:label "0.00ms" ; + rdf:value 1.0; + ]; + rdfs:comment "Start offset in the I/R file" ; + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 7 ; lv2:symbol "stretch" ; lv2:name "Stretch"; @@ -307,7 +327,7 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 a lv2:InputPort , lv2:ControlPort ; - lv2:index 7 ; + lv2:index 8 ; lv2:symbol "decay" ; lv2:name "Decay"; @@ -322,7 +342,7 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 a lv2:InputPort , lv2:ControlPort ; - lv2:index 8 ; + lv2:index 9 ; lv2:symbol "tails" ; lv2:name "Tails"; @@ -340,7 +360,7 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 a lv2:OutputPort , lv2:ControlPort ; - lv2:index 9 ; + lv2:index 10 ; lv2:symbol "loading_state" ; lv2:name "Status"; @@ -380,14 +400,14 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 [ a lv2:AudioPort , lv2:InputPort ; - lv2:index 10 ; + lv2:index 11 ; lv2:symbol "in" ; lv2:name "In" ], [ a lv2:AudioPort , lv2:OutputPort ; - lv2:index 11 ; + lv2:index 12 ; lv2:symbol "out" ; lv2:name "Out" ], @@ -399,7 +419,7 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 lv2:designation lv2:control ; atom:supports patch:Message ; - lv2:index 12 ; + lv2:index 13 ; lv2:symbol "control" ; lv2:name "Control" ; rdfs:comment "Control" ; @@ -409,7 +429,7 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 atom:bufferType atom:Sequence ; # atom:supports patch:Message; lv2:designation lv2:control ; - lv2:index 13; + lv2:index 14; lv2:symbol "notify" ; lv2:name "Notify" ; rdfs:comment "Notification" ; diff --git a/lv2/aarch64/ToobAmp.lv2/ConvolutionReverbStereo.ttl b/lv2/aarch64/ToobAmp.lv2/ConvolutionReverbStereo.ttl index 89b2bff..f5dcf59 100644 --- a/lv2/aarch64/ToobAmp.lv2/ConvolutionReverbStereo.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ConvolutionReverbStereo.ttl @@ -51,7 +51,7 @@ toobimpulse:impulseFile doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ @@ -210,7 +210,7 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 lv2:index 2; lv2:symbol "direct_mix" ; lv2:name "Direct"; - lv2:default -6.0 ; + lv2:default 0.0 ; lv2:minimum -40.0 ; lv2:maximum 40.0 ; units:unit units:db ; @@ -230,7 +230,7 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 lv2:symbol "reverb_mix" ; lv2:name "Reverb"; - lv2:default 0.0 ; + lv2:default -12.0 ; lv2:minimum -40.0 ; lv2:maximum 40.0 ; units:unit units:db ; @@ -321,6 +321,28 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 lv2:ControlPort ; lv2:index 8 ; + + lv2:symbol "start" ; + lv2:name "Start Offset"; + + + lv2:default 1.0 ; + lv2:minimum 1.0 ; + lv2:maximum 300.0 ; + + units:unit units:ms ; + lv2:portProperty epp:logarithmic; + lv2:scalePoint [ + rdfs:label "0.00ms" ; + rdf:value 1.0; + ]; + rdfs:comment "Start offset in the I/R file" ; + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 9 ; lv2:symbol "stretch" ; lv2:name "Stretch"; @@ -337,7 +359,7 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 a lv2:InputPort , lv2:ControlPort ; - lv2:index 9 ; + lv2:index 10 ; lv2:symbol "decay" ; lv2:name "Decay"; @@ -352,7 +374,7 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 a lv2:InputPort , lv2:ControlPort ; - lv2:index 10 ; + lv2:index 11 ; lv2:symbol "tails" ; lv2:name "Tails"; @@ -370,7 +392,7 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 a lv2:OutputPort , lv2:ControlPort ; - lv2:index 11 ; + lv2:index 12 ; lv2:symbol "loading_state" ; lv2:name "Status"; @@ -410,7 +432,7 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 [ a lv2:AudioPort , lv2:InputPort ; - lv2:index 12; + lv2:index 13; lv2:symbol "inL" ; lv2:name "InL" ; lv2:designation pg:left ; @@ -421,7 +443,7 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 [ a lv2:AudioPort , lv2:InputPort ; - lv2:index 13 ; + lv2:index 14 ; lv2:symbol "inR" ; lv2:name "InR" ; lv2:designation pg:right ; @@ -430,7 +452,7 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 [ a lv2:AudioPort , lv2:OutputPort ; - lv2:index 14 ; + lv2:index 15 ; lv2:symbol "outL" ; lv2:name "OutL" ; lv2:designation pg:left ; @@ -438,8 +460,8 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 ], [ a lv2:AudioPort , - lv2:OutputPort ; - lv2:index 15 ; + lv2:OutputPort ; + lv2:index 16 ; lv2:symbol "outR" ; lv2:name "OutR" ; lv2:designation pg:right ; @@ -453,7 +475,7 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 lv2:designation lv2:control ; atom:supports patch:Message ; - lv2:index 16 ; + lv2:index 17 ; lv2:symbol "control" ; lv2:name "Control" ; rdfs:comment "Control" ; @@ -463,7 +485,7 @@ Source: https://www.openair.hosted.york.ac.uk/?page_id=483 atom:bufferType atom:Sequence ; # atom:supports patch:Message; lv2:designation lv2:control ; - lv2:index 17; + lv2:index 18; lv2:symbol "notify" ; lv2:name "Notify" ; rdfs:comment "Notification" ; diff --git a/lv2/aarch64/ToobAmp.lv2/InputStage.ttl b/lv2/aarch64/ToobAmp.lv2/InputStage.ttl index a93c1d0..57fb97a 100644 --- a/lv2/aarch64/ToobAmp.lv2/InputStage.ttl +++ b/lv2/aarch64/ToobAmp.lv2/InputStage.ttl @@ -66,7 +66,7 @@ inputStage:filterGroup doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; mod:brand "TooB"; mod:label "TooB Input"; diff --git a/lv2/aarch64/ToobAmp.lv2/PowerStage2.ttl b/lv2/aarch64/ToobAmp.lv2/PowerStage2.ttl index dd51cd1..8d2624a 100644 --- a/lv2/aarch64/ToobAmp.lv2/PowerStage2.ttl +++ b/lv2/aarch64/ToobAmp.lv2/PowerStage2.ttl @@ -68,7 +68,7 @@ pstage:stage3 doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; mod:brand "TooB"; mod:label "Power Stage"; diff --git a/lv2/aarch64/ToobAmp.lv2/SpectrumAnalyzer.ttl b/lv2/aarch64/ToobAmp.lv2/SpectrumAnalyzer.ttl index a3cf56e..3dcd19c 100644 --- a/lv2/aarch64/ToobAmp.lv2/SpectrumAnalyzer.ttl +++ b/lv2/aarch64/ToobAmp.lv2/SpectrumAnalyzer.ttl @@ -57,7 +57,7 @@ doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment "TooB spectrum analyzer" ; mod:brand "TooB"; diff --git a/lv2/aarch64/ToobAmp.lv2/ToneStack.ttl b/lv2/aarch64/ToobAmp.lv2/ToneStack.ttl index 43c2b55..3bfa9f3 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToneStack.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToneStack.ttl @@ -57,7 +57,7 @@ tonestack:eqGroup doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; uiext:ui ; diff --git a/lv2/aarch64/ToobAmp.lv2/Toob3BandEq.ttl b/lv2/aarch64/ToobAmp.lv2/Toob3BandEq.ttl index 3641a19..ea0a3e8 100644 --- a/lv2/aarch64/ToobAmp.lv2/Toob3BandEq.ttl +++ b/lv2/aarch64/ToobAmp.lv2/Toob3BandEq.ttl @@ -45,14 +45,14 @@ toob:frequencyResponseVector a lv2:Plugin , lv2:EQPlugin ; - doap:name "TooB 3 Band EQ" , - "TooB 3 Band EQ"@en-gb + doap:name "TooB 3 Band EQ (mono)" , + "TooB 3 Band EQ (mono)"@en-gb ; doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; uiext:ui ; diff --git a/lv2/aarch64/ToobAmp.lv2/Toob3BandEqStereo.ttl b/lv2/aarch64/ToobAmp.lv2/Toob3BandEqStereo.ttl new file mode 100644 index 0000000..3d0dfff --- /dev/null +++ b/lv2/aarch64/ToobAmp.lv2/Toob3BandEqStereo.ttl @@ -0,0 +1,224 @@ +@prefix doap: . +@prefix lv2: . +@prefix rdf: . +@prefix rdfs: . +@prefix units: . +@prefix urid: . +@prefix atom: . +@prefix midi: . +@prefix epp: . +@prefix uiext: . +@prefix idpy: . +@prefix foaf: . +@prefix mod: . +@prefix param: . +@prefix work: . +@prefix pg: . + +@prefix atom: . +@prefix patch: . +@prefix rdfs: . +@prefix state: . +@prefix urid: . +@prefix xsd: . + +@prefix pipedal_ui: . +@prefix pipedal_patch: . + +@prefix toob: . + +@prefix tonestack: . + +toob:frequencyResponseVector + a lv2:Parameter; + rdfs:label "Frequency Response"; + rdfs:range atom:Vector. + + + + + a foaf:Person ; + foaf:name "Robin Davies" ; + foaf:mbox ; + foaf:homepage . + + + a lv2:Plugin , + lv2:EQPlugin ; + doap:name "TooB 3 Band EQ (Stereo)" , + "TooB 3 Band EQ (Stereo)"@en-gb + ; + + doap:license ; + doap:maintainer ; + lv2:minorVersion 0 ; + lv2:microVersion 73 ; + + uiext:ui ; + + rdfs:comment """ +TooB 3 Band Eq provides a basic 3-band equalizer optimized for shaping guitar tones. + +Beside being useful, TooB 3 Band Eq matches the EQ section found in Steven Atkinson's Neural Amp Modeler plugin, and is +therefore useful for migrating NAM presets to TooB Neural Amp Modeler. + +This plugin uses code from https://github.com/sdatkinson/NeuralAmpModelerPlugin covered under the following license. + + +MIT License + +Copyright (c) 2022 Steven Atkinson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +""" ; + + mod:brand "TooB"; + mod:label "3 Band EQ"; + lv2:requiredFeature urid:map ; + lv2:optionalFeature lv2:hardRTCapable; + pipedal_patch:readable + toob:frequencyResponseVector; + + + lv2:port + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 0 ; + lv2:symbol "bass" ; + lv2:name "Bass"; + lv2:default 5.0 ; + lv2:minimum 0.0 ; + lv2:maximum 10.0 ; + ], [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 1 ; + lv2:symbol "mid" ; + lv2:name "Mid"; + lv2:default 5.0 ; + lv2:minimum 0.0 ; + lv2:maximum 10.0 ; + + ], [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 2 ; + lv2:symbol "treble" ; + lv2:name "Treble"; + lv2:default 5.0 ; + lv2:minimum 0.0 ; + lv2:maximum 10.0; + ], [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 3 ; + lv2:symbol "gain" ; + lv2:name "Gain"; + lv2:default 0.0 ; + lv2:minimum -40.0 ; + lv2:maximum 30.0; + units:unit units:db; + ], + [ + a lv2:AudioPort , + lv2:InputPort ; + lv2:index 4 ; + lv2:symbol "in" ; + lv2:name "InL" + ], [ + a lv2:AudioPort , + lv2:OutputPort ; + lv2:index 5 ; + lv2:symbol "out" ; + lv2:name "OutL" + ],[ + 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" ; + ], + [ + a lv2:AudioPort , + lv2:InputPort ; + lv2:index 8 ; + lv2:symbol "inR" ; + lv2:name "InR" + ], [ + a lv2:AudioPort , + lv2:OutputPort ; + lv2:index 9 ; + lv2:symbol "outR" ; + lv2:name "OutR" + ] + . + + + a uiext:X11UI ; + lv2:binary ; + + lv2:extensionData uiext::idle ; + lv2:extensionData uiext:resize ; + lv2:extensionData uiext:idleInterface; + lv2:requiredFeature uiext:idleInterface ; + . + + + pipedal_ui:ui . + + + + a pipedal_ui:ui ; + pipedal_ui:frequencyPlot + [ + lv2:index 0 ; + pipedal_ui:patchProperty toob:frequencyResponseVector; + pipedal_ui:xLeft 30 ; + pipedal_ui:xRight 22050 ; + pipedal_ui:yTop 10 ; + pipedal_ui:yBottom -35 ; + pipedal_ui:xLog 1 ; + pipedal_ui:yDb 1 ; + pipedal_ui:width 236 ; + ] + . + + diff --git a/lv2/aarch64/ToobAmp.lv2/ToobAmpUI.so b/lv2/aarch64/ToobAmp.lv2/ToobAmpUI.so index 14d589b..8e7c67f 100755 Binary files a/lv2/aarch64/ToobAmp.lv2/ToobAmpUI.so and b/lv2/aarch64/ToobAmp.lv2/ToobAmpUI.so differ diff --git a/lv2/aarch64/ToobAmp.lv2/ToobChorus.ttl b/lv2/aarch64/ToobAmp.lv2/ToobChorus.ttl index 7799141..d2f9135 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobChorus.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobChorus.ttl @@ -40,7 +40,7 @@ doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ Emulation of a Boss CE-2 Chorus. diff --git a/lv2/aarch64/ToobAmp.lv2/ToobDelay.ttl b/lv2/aarch64/ToobAmp.lv2/ToobDelay.ttl index 62f3606..67e6360 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobDelay.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobDelay.ttl @@ -41,7 +41,7 @@ doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ A straightforward no-frills digital delay. diff --git a/lv2/aarch64/ToobAmp.lv2/ToobFlanger.ttl b/lv2/aarch64/ToobAmp.lv2/ToobFlanger.ttl index a35e540..1f4924a 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobFlanger.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobFlanger.ttl @@ -41,7 +41,7 @@ doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ Emulation of a Boss BF-2 Flanger, based on circuit analysis and simulation of the original. diff --git a/lv2/aarch64/ToobAmp.lv2/ToobFlangerStereo.ttl b/lv2/aarch64/ToobAmp.lv2/ToobFlangerStereo.ttl index b4551be..b916a0a 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobFlangerStereo.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobFlangerStereo.ttl @@ -41,7 +41,7 @@ doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ Digital emulation of a Boss BF-2 Flanger. diff --git a/lv2/aarch64/ToobAmp.lv2/ToobFreeverb.ttl b/lv2/aarch64/ToobAmp.lv2/ToobFreeverb.ttl index 3fa9b01..6159bbd 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobFreeverb.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobFreeverb.ttl @@ -41,7 +41,7 @@ doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ Toob Freeverb is an Lv2 implementation of the famous Freeverb reverb effect. FreeVerb delivers a well-balanced reverb with very little tonal coloration. diff --git a/lv2/aarch64/ToobAmp.lv2/ToobGraphicEq.ttl b/lv2/aarch64/ToobAmp.lv2/ToobGraphicEq.ttl index d469e2b..e55db06 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobGraphicEq.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobGraphicEq.ttl @@ -41,7 +41,7 @@ doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ A 7 octave graphic equalizer, with frequencies chosen to be useful for EQ-ing guitar signals. """ ; diff --git a/lv2/aarch64/ToobAmp.lv2/ToobLooperFour.ttl b/lv2/aarch64/ToobAmp.lv2/ToobLooperFour.ttl index cde2777..4e8eccd 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobLooperFour.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobLooperFour.ttl @@ -92,7 +92,7 @@ myprefix:output_group doap:license ; doap:maintainer ; lv2:minorVersion 2 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; ui:ui ; diff --git a/lv2/aarch64/ToobAmp.lv2/ToobLooperOne.ttl b/lv2/aarch64/ToobAmp.lv2/ToobLooperOne.ttl index 1df02e0..faba57d 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobLooperOne.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobLooperOne.ttl @@ -78,7 +78,7 @@ myprefix:output_group doap:license ; doap:maintainer ; lv2:minorVersion 2 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; ui:ui ; diff --git a/lv2/aarch64/ToobAmp.lv2/ToobML.ttl b/lv2/aarch64/ToobAmp.lv2/ToobML.ttl index b8d6545..23f1587 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobML.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobML.ttl @@ -67,7 +67,7 @@ toobml:sagGroup doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ The TooB ML Amplifier plugin provides emulation of a variety of amplifiers and overdrive pedals that are implemented using neural-network-based machine learning models of real amplifiers. diff --git a/lv2/aarch64/ToobAmp.lv2/ToobMix.ttl b/lv2/aarch64/ToobAmp.lv2/ToobMix.ttl index 61125e4..22771b1 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobMix.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobMix.ttl @@ -40,7 +40,7 @@ doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ Remix a stereo input signal. diff --git a/lv2/aarch64/ToobAmp.lv2/ToobNeuralAmpModeler.ttl b/lv2/aarch64/ToobAmp.lv2/ToobNeuralAmpModeler.ttl index 2f83e35..6214680 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobNeuralAmpModeler.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobNeuralAmpModeler.ttl @@ -72,7 +72,7 @@ toobNam:calibrationGroup doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ TooB Neural Amp Modeler is a neural network based Amp Simulator. It uses .nam model files that are generated by training nueral networks on audio recordings of actual guitar amps, effects pedals and other equipment. .nam files contain data from the trained models, which can be loaded into diff --git a/lv2/aarch64/ToobAmp.lv2/ToobNoiseGate.ttl b/lv2/aarch64/ToobAmp.lv2/ToobNoiseGate.ttl index d498abb..b15d898 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobNoiseGate.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobNoiseGate.ttl @@ -54,7 +54,7 @@ noisegate:envelope_group doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ A noise gate is an audio processing tool that controls the volume of an audio signal by allowing it to pass through only when it exceeds a set threshold. diff --git a/lv2/aarch64/ToobAmp.lv2/ToobParametricEq.ttl b/lv2/aarch64/ToobAmp.lv2/ToobParametricEq.ttl index c2f1769..12613db 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobParametricEq.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobParametricEq.ttl @@ -80,14 +80,14 @@ parametric_eq:hfGroup a lv2:Plugin , lv2:ParaEQPlugin ; - doap:name "TooB Parametric EQ" , - "TooB Parametric EQ"@en-gb + doap:name "TooB Parametric EQ (Mono)" , + "TooB Parametric EQ (Mono)"@en-gb ; doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; uiext:ui ; diff --git a/lv2/aarch64/ToobAmp.lv2/ToobParametricEqStereo.ttl b/lv2/aarch64/ToobAmp.lv2/ToobParametricEqStereo.ttl new file mode 100644 index 0000000..fa150bb --- /dev/null +++ b/lv2/aarch64/ToobAmp.lv2/ToobParametricEqStereo.ttl @@ -0,0 +1,395 @@ +@prefix doap: . +@prefix lv2: . +@prefix rdf: . +@prefix rdfs: . +@prefix units: . +@prefix urid: . +@prefix atom: . +@prefix midi: . +@prefix epp: . +@prefix uiext: . +@prefix idpy: . +@prefix foaf: . +@prefix mod: . +@prefix param: . +@prefix work: . +@prefix pg: . + +@prefix atom: . +@prefix patch: . +@prefix rdfs: . +@prefix state: . +@prefix urid: . +@prefix xsd: . + +@prefix pipedal_ui: . +@prefix pipedal_patch: . + +@prefix toob: . + +@prefix toob-parametric-eq-stereo: . + +toob:frequencyResponseVector + a lv2:Parameter; + rdfs:label "Frequency Response"; + rdfs:range atom:Vector. + + +toob-parametric-eq-stereo:filterGroup + a param:ControlGroup , + pg:InputGroup ; + + lv2:name "Filters" ; + lv2:symbol "filterGroup" . + +toob-parametric-eq-stereo:lfGroup + a param:ControlGroup , + pg:InputGroup ; + + lv2:name "Low" ; + lv2:symbol "lfGroup" . + +toob-parametric-eq-stereo:lmfGroup + a param:ControlGroup , + pg:InputGroup ; + + lv2:name "Low Mid" ; + lv2:symbol "lmfGroup" . + +toob-parametric-eq-stereo:hmfGroup + a param:ControlGroup , + pg:InputGroup ; + + lv2:name "High Mid" ; + lv2:symbol "hmfGroup" . + +toob-parametric-eq-stereo:hfGroup + a param:ControlGroup , + pg:InputGroup ; + + lv2:name "High" ; + lv2:symbol "hfGroup" . + + + + a foaf:Person ; + foaf:name "Robin Davies" ; + foaf:mbox ; + foaf:homepage . + + + a lv2:Plugin , + lv2:ParaEQPlugin ; + doap:name "TooB Parametric EQ (Stereo)" , + "TooB Parametric EQ (Stereo)"@en-gb + ; + + doap:license ; + doap:maintainer ; + lv2:minorVersion 0 ; + lv2:microVersion 73 ; + + uiext:ui ; + + rdfs:comment """ +TooB Parametric EQ provides a flexible 4-band parametric studio EQ that is up the task of shaping tone before or after amp models. + + +""" ; + + mod:brand "TooB"; + mod:label "Parametric EQ"; + lv2:requiredFeature urid:map ; + lv2:optionalFeature lv2:hardRTCapable; + pipedal_patch:readable + toob:frequencyResponseVector; + + + lv2:port + ### FILTERS ### + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 0 ; + lv2:symbol "loCut" ; + lv2:name "Lo Cut"; + pg:group toob-parametric-eq-stereo:filterGroup; + + lv2:default 0.0 ; + lv2:minimum 20.0 ; + lv2:maximum 350.0 ; + lv2:portProperty epp:logarithmic; + units:unit units:hz; + + lv2:scalePoint [ + rdfs:label "OFF" ; + rdf:value 20.0 + ]; + + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 1 ; + lv2:symbol "hiCut" ; + lv2:name "Hi Cut"; + pg:group toob-parametric-eq-stereo:filterGroup; + + lv2:default 21.000 ; + lv2:minimum 3.000 ; + lv2:maximum 21.000 ; + lv2:portProperty epp:logarithmic; + units:unit units:khz; + + lv2:scalePoint [ + rdfs:label "OFF" ; + rdf:value 21.000 + ]; + + ], + ## LF ########### + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 2 ; + lv2:symbol "lfLevel" ; + lv2:name "Level"; + pg:group toob-parametric-eq-stereo:lfGroup; + + lv2:default 0.0 ; + lv2:minimum -15.0 ; + lv2:maximum 15.0 ; + units:unit units:db ; + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 3 ; + lv2:symbol "lfC" ; + lv2:name "Freq"; + pg:group toob-parametric-eq-stereo:lfGroup; + + lv2:default 120.0 ; + lv2:minimum 30.0 ; + lv2:maximum 450.0 ; + units:unit units:hz ; + ], + + ## LMF ##### + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 4 ; + lv2:symbol "lmfLevel" ; + lv2:name "Level"; + pg:group toob-parametric-eq-stereo:lmfGroup; + + lv2:default 0.0 ; + lv2:minimum -15.0 ; + lv2:maximum 15.0 ; + units:unit units:db ; + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 5 ; + lv2:symbol "lmfC" ; + lv2:name "Freq"; + pg:group toob-parametric-eq-stereo:lmfGroup; + + lv2:portProperty epp:logarithmic ; + lv2:default 400.0 ; + lv2:minimum 129.0 ; + lv2:maximum 2500.0 ; + units:unit units:hz ; + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 6 ; + lv2:symbol "lmfQ" ; + lv2:name "Q"; + pg:group toob-parametric-eq-stereo:lmfGroup; + + lv2:portProperty epp:logarithmic; + lv2:default 1.5 ; + lv2:minimum 0.5 ; + lv2:maximum 3.0 ; + ], + + ## HMF ##### + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 7 ; + lv2:symbol "hmfLevel" ; + lv2:name "Level"; + pg:group toob-parametric-eq-stereo:hmfGroup; + + lv2:default 0.0 ; + lv2:minimum -15.0 ; + lv2:maximum 15.0 ; + units:unit units:db ; + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 8 ; + lv2:symbol "hmfC" ; + lv2:name "Freq"; + pg:group toob-parametric-eq-stereo:hmfGroup; + + lv2:portProperty epp:logarithmic; + lv2:default 2.0 ; + lv2:minimum 0.600 ; + lv2:maximum 7.500 ; + units:unit units:khz ; + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 9 ; + lv2:symbol "hmfQ" ; + lv2:name "Q"; + pg:group toob-parametric-eq-stereo:hmfGroup; + + lv2:portProperty epp:logarithmic; + lv2:default 1.5 ; + lv2:minimum 0.5 ; + lv2:maximum 3.0 ; + ], + + + ## HF ########### + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 10 ; + lv2:symbol "hfLevel" ; + lv2:name "Level"; + pg:group toob-parametric-eq-stereo:hfGroup; + + lv2:default 0.0 ; + lv2:minimum -15.0 ; + lv2:maximum 15.0 ; + units:unit units:db ; + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 11 ; + lv2:symbol "hfC" ; + lv2:name "Freq"; + pg:group toob-parametric-eq-stereo:hfGroup; + + lv2:default 2.0 ; + lv2:minimum 1.0 ; + lv2:maximum 16.0 ; + units:unit units:khz ; + ], + + + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 12 ; + lv2:symbol "gain" ; + lv2:name "Gain"; + lv2:default 0.0 ; + lv2:minimum -40.0 ; + lv2:maximum 30.0; + units:unit units:db; + + ], + [ + a lv2:AudioPort , + lv2:InputPort ; + lv2:index 13 ; + lv2:symbol "in" ; + lv2:name "InL" + ], [ + a lv2:AudioPort , + lv2:OutputPort ; + lv2:index 14 ; + lv2:symbol "out" ; + lv2:name "OutL" + ],[ + a atom:AtomPort , + lv2:InputPort; + atom:bufferType atom:Sequence ; + # atom:supports patch:Message; + lv2:designation lv2:control ; + lv2:index 15 ; + 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 16 ; + lv2:symbol "notify" ; + lv2:name "Notify" ; + rdfs:comment "Plugin to GUI communication" ; + ], + [ + a lv2:AudioPort , + lv2:InputPort ; + lv2:index 17 ; + lv2:symbol "inR" ; + lv2:name "InR" + ], [ + a lv2:AudioPort , + lv2:OutputPort ; + lv2:index 18 ; + lv2:symbol "outR" ; + lv2:name "OutR" + ] + . + + + a uiext:X11UI ; + lv2:binary ; + + lv2:extensionData uiext::idle ; + lv2:extensionData uiext:resize ; + lv2:extensionData uiext:idleInterface; + lv2:requiredFeature uiext:idleInterface ; + . + + + pipedal_ui:ui . + + + + a pipedal_ui:ui ; + pipedal_ui:frequencyPlot + [ + lv2:index 0 ; + pipedal_ui:patchProperty toob:frequencyResponseVector; + pipedal_ui:xLeft 30 ; + pipedal_ui:xRight 22050 ; + pipedal_ui:yTop 10 ; + pipedal_ui:yBottom -35 ; + pipedal_ui:xLog 1 ; + pipedal_ui:yDb 1 ; + pipedal_ui:width 236 ; + ] + . + + diff --git a/lv2/aarch64/ToobAmp.lv2/ToobPhaser.ttl b/lv2/aarch64/ToobAmp.lv2/ToobPhaser.ttl index 306eff3..1bb5572 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobPhaser.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobPhaser.ttl @@ -40,7 +40,7 @@ doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ A loose emulation of an MXR® Phase 90 Phaser. diff --git a/lv2/aarch64/ToobAmp.lv2/ToobPlayer.ttl b/lv2/aarch64/ToobAmp.lv2/ToobPlayer.ttl index a4dc596..7b5ca75 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobPlayer.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobPlayer.ttl @@ -60,7 +60,7 @@ toobPlayer:seek doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ Play audio files. Audio files can optionally be loooped by pressing the "Set loop" button. diff --git a/lv2/aarch64/ToobAmp.lv2/ToobRecordMono.ttl b/lv2/aarch64/ToobAmp.lv2/ToobRecordMono.ttl index 9ed03b3..170d59f 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobRecordMono.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobRecordMono.ttl @@ -51,7 +51,7 @@ recordPrefix:audioFile doap:license ; doap:maintainer ; lv2:minorVersion 2 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; ui:ui ; diff --git a/lv2/aarch64/ToobAmp.lv2/ToobRecordStereo.ttl b/lv2/aarch64/ToobAmp.lv2/ToobRecordStereo.ttl index dc98228..f1cc998 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobRecordStereo.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobRecordStereo.ttl @@ -88,7 +88,7 @@ myprefix:loop3_group doap:license ; doap:maintainer ; lv2:minorVersion 2 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; ui:ui ; diff --git a/lv2/aarch64/ToobAmp.lv2/ToobTremolo.ttl b/lv2/aarch64/ToobAmp.lv2/ToobTremolo.ttl index e4969f8..3511a3d 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobTremolo.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobTremolo.ttl @@ -41,7 +41,7 @@ doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ A tremolo effect, equivalent to "vibrato" on vintage Fender tube amps. diff --git a/lv2/aarch64/ToobAmp.lv2/ToobTremoloMono.ttl b/lv2/aarch64/ToobAmp.lv2/ToobTremoloMono.ttl index 153e1fa..3087f51 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobTremoloMono.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobTremoloMono.ttl @@ -41,7 +41,7 @@ doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ A tremolo effect, equivalent to "vibrato" on vintage Fender tube amps. diff --git a/lv2/aarch64/ToobAmp.lv2/ToobTuner.ttl b/lv2/aarch64/ToobAmp.lv2/ToobTuner.ttl index 0ccbecc..93b03da 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobTuner.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobTuner.ttl @@ -40,7 +40,7 @@ doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ TooB Tuner is a chromatic guitar tuner. """ ; diff --git a/lv2/aarch64/ToobAmp.lv2/ToobVolume.ttl b/lv2/aarch64/ToobAmp.lv2/ToobVolume.ttl index 12fb519..a21868b 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobVolume.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobVolume.ttl @@ -39,7 +39,7 @@ doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 72 ; + lv2:microVersion 73 ; rdfs:comment """ Volume control. diff --git a/lv2/aarch64/ToobAmp.lv2/bin/ToobAmp-a72.so b/lv2/aarch64/ToobAmp.lv2/bin/ToobAmp-a72.so index 333c265..5a6ae40 100755 Binary files a/lv2/aarch64/ToobAmp.lv2/bin/ToobAmp-a72.so and b/lv2/aarch64/ToobAmp.lv2/bin/ToobAmp-a72.so differ diff --git a/lv2/aarch64/ToobAmp.lv2/bin/ToobAmp-a76.so b/lv2/aarch64/ToobAmp.lv2/bin/ToobAmp-a76.so index cd0862b..de7fc43 100755 Binary files a/lv2/aarch64/ToobAmp.lv2/bin/ToobAmp-a76.so and b/lv2/aarch64/ToobAmp.lv2/bin/ToobAmp-a76.so differ diff --git a/lv2/aarch64/ToobAmp.lv2/manifest.ttl b/lv2/aarch64/ToobAmp.lv2/manifest.ttl index c92dffd..3e7ee13 100644 --- a/lv2/aarch64/ToobAmp.lv2/manifest.ttl +++ b/lv2/aarch64/ToobAmp.lv2/manifest.ttl @@ -12,10 +12,18 @@ lv2:binary ; rdfs:seeAlso . + a lv2:Plugin ; + lv2:binary ; + rdfs:seeAlso . + a lv2:Plugin ; lv2:binary ; rdfs:seeAlso . + a lv2:Plugin ; + lv2:binary ; + rdfs:seeAlso . + a lv2:Plugin ; lv2:binary ; diff --git a/src/Pedalboard.cpp b/src/Pedalboard.cpp index 3c8ad17..97d7f0f 100644 --- a/src/Pedalboard.cpp +++ b/src/Pedalboard.cpp @@ -135,6 +135,7 @@ bool Pedalboard::SetItemUseModUi(int64_t pedalItemId, bool enabled) bool Pedalboard::SetItemEnabled(int64_t pedalItemId, bool enabled) { PedalboardItem*item = GetItem(pedalItemId); + if (!item) return false; if (item->isEnabled() != enabled) { @@ -360,19 +361,19 @@ bool PedalboardItem::IsStructurallyIdentical(const PedalboardItem&other) const } if (this->isSplit()) // so is the other by virtue of idential uris. { - // provisionally, it seems ok to change the split type. - // auto myValue = this->GetControlValue("splitType"); - // auto otherValue = other.GetControlValue("splitType"); - // if (myValue == nullptr || otherValue == nullptr) // actually an error. - // { - // return false; - // } // // split type changes potentially trigger buffer allocation changes, // // so different split types are not structurally identical. - // if (myValue->value() != otherValue->value()) { - // return false; - // } + + auto myValue = this->GetControlValue("splitType"); + auto otherValue = other.GetControlValue("splitType"); + if (myValue == nullptr || otherValue == nullptr) // actually an error. + { + return false; + } + if (myValue->value() != otherValue->value()) { + return false; + } if (topChain().size() != other.topChain().size()) { return false; diff --git a/src/PiPedalModel.cpp b/src/PiPedalModel.cpp index 70adb50..7e9f4ff 100644 --- a/src/PiPedalModel.cpp +++ b/src/PiPedalModel.cpp @@ -671,6 +671,17 @@ void PiPedalModel::SetPedalboardItemEnable(int64_t clientId, int64_t pedalItemId std::lock_guard guard{mutex}; { this->pedalboard.SetItemEnabled(pedalItemId, enabled); + PedalboardItem * pPedalboardItem = this->pedalboard.GetItem(pedalItemId); + if (pPedalboardItem) { + Lv2PluginInfo::ptr pluginInfo = GetPluginInfo(pPedalboardItem->uri()); + if (pluginInfo) { + for (auto &port: pluginInfo->ports()) { + if (port->is_bypass()) { + pPedalboardItem->SetControlValue(port->symbol(), enabled? 1.0: 0.0f); + } + } + } + } // Notify clients. std::vector t{subscribers.begin(), subscribers.end()}; @@ -2049,6 +2060,26 @@ void PiPedalModel::UpdateDefaults(SnapshotValue&snapshotValue, const PedalboardI } if (pPlugin) { + // Fix incorrect bypass settings presint in Pipedal < 1.5.96 + for (size_t i = 0; i < pPlugin->ports().size(); ++i) + { + auto& port = pPlugin->ports()[i]; + if (port->is_bypass() && port->is_control_port() && port->is_input()) + { + ControlValue* pValue = snapshotValue.GetControlValue(port->symbol()); + float value = snapshotValue.isEnabled_ ? 1.0f : 0.0f; + + if (pValue == nullptr) + { + snapshotValue.controlValues_.push_back( + pipedal::ControlValue(port->symbol().c_str(), value)); + } + else + { + pValue->value(value); + } + } + } //////// PLUGIN SPECIFIC UPGRADES ////////////////////// if (pPlugin->uri() == "http://two-play.com/plugins/toob-nam") { @@ -2161,12 +2192,29 @@ void PiPedalModel::UpdateDefaults(PedalboardItem *pedalboardItem, std::unordered if (port->is_control_port() && port->is_input()) { - ControlValue *pValue = pedalboardItem->GetControlValue(port->symbol()); - if (pValue == nullptr) + if (port->is_bypass()) { - // Missing? Set it to default value. - pedalboardItem->controlValues().push_back( - pipedal::ControlValue(port->symbol().c_str(), port->default_value())); + // retroactively correct bug in version of PiPedal prior to 1.5.96. + ControlValue *pValue = pedalboardItem->GetControlValue(port->symbol()); + float value = pedalboardItem->isEnabled() ? 1.0f: 0.0f; + + if (pValue == nullptr) + { + pedalboardItem->controlValues().push_back( + pipedal::ControlValue(port->symbol().c_str(), value)); + } else { + pValue->value(value); + } + + + } else { + ControlValue *pValue = pedalboardItem->GetControlValue(port->symbol()); + if (pValue == nullptr) + { + // Missing? Set it to default value. + pedalboardItem->controlValues().push_back( + pipedal::ControlValue(port->symbol().c_str(), port->default_value())); + } } } } diff --git a/src/PluginHost.cpp b/src/PluginHost.cpp index 60ddc35..6973a5b 100644 --- a/src/PluginHost.cpp +++ b/src/PluginHost.cpp @@ -2246,6 +2246,19 @@ bool Lv2PluginInfo::WantsWorkerThread() const { return contains(this->required_features_, LV2_WORKER__schedule) || contains(this->supported_features_, LV2_WORKER__schedule); } + +uint32_t Lv2PluginInfo::getBypassPortIndex() const +{ + for (const auto &port : ports_) + { + if (port->is_bypass()) + { + return port->index(); + } + } + return (uint32_t)-1; +} + // void PiPedalHostLogError(const std::string &error) // { // Lv2Log::error("%s",error.c_str()); diff --git a/src/PluginHost.hpp b/src/PluginHost.hpp index ef9e220..9e0abec 100644 --- a/src/PluginHost.hpp +++ b/src/PluginHost.hpp @@ -527,6 +527,7 @@ namespace pipedal } } bool IsPathProperty(const std::string &uri) const; + uint32_t getBypassPortIndex() const; public: virtual ~Lv2PluginInfo(); diff --git a/src/SplitEffect.cpp b/src/SplitEffect.cpp index 2f2dcc7..4167aa9 100644 --- a/src/SplitEffect.cpp +++ b/src/SplitEffect.cpp @@ -126,7 +126,7 @@ static Lv2PluginInfo makeSplitterPluginInfo() volLControl->index(4); volLControl->min_value(-60); volLControl->max_value(12); - volLControl->default_value(-3); + volLControl->default_value(0); volLControl->scale_points().push_back( Lv2ScalePoint(-60, "-INF")); @@ -152,7 +152,7 @@ static Lv2PluginInfo makeSplitterPluginInfo() volRControl->index(6); volRControl->min_value(-60); volRControl->max_value(12); - volRControl->default_value(-3); + volRControl->default_value(0); volRControl->scale_points().push_back( Lv2ScalePoint(-60, "-INF")); @@ -327,6 +327,28 @@ void SplitEffect::mixTo(float value) this->targetBlendLBottom = this->targetBlendRBottom = blend; mixToTarget(); } +static inline void applyHardPan(float pan, float*left, float*right) { + // linear panning law. + // float panClipped = pan; + // if (panClipped < -1) panClipped = -1; + // if (panClipped > 1) panClipped = 1; + // panClipped = (panClipped + 1) * 0.5f; // 0..1 + // *left = 1.0f - panClipped; + // *right = panClipped; + + // Hard pan law + float panClipped = pan; + if (panClipped < -1) panClipped = -1; + if (panClipped > 1) panClipped = 1; + if (pan <= 0) { + *left = 1.0f; + *right = 1.0f + panClipped; + } else { + *left = 1.0f - panClipped; + *right = 1.0f; + } +} + void SplitEffect::mixTo(float panL, float volL, float panR, float volR) { float aTop = (volL <= SPLIT_DB_MIN) ? 0 : db2a(volL); @@ -339,12 +361,15 @@ void SplitEffect::mixTo(float panL, float volL, float panR, float volR) } else { - float blendTop = (panL + 1) * 0.5; - float blendBottom = (panR + 1) * 0.5; - this->targetBlendLTop = (1 - blendTop) * aTop; - this->targetBlendRTop = (blendTop)*aTop; - this->targetBlendLBottom = (1 - blendBottom) * aBottom; - this->targetBlendRBottom = (blendBottom)*aBottom; + float panTopL, panTopR; + applyHardPan(panL,&panTopL, &panTopR); + float panBottomL, panBottomR; + applyHardPan(panR,&panBottomL, &panBottomR); + + this->targetBlendLTop = panTopL * aTop; + this->targetBlendRTop = panTopR*aTop; + this->targetBlendLBottom = panBottomL * aBottom; + this->targetBlendRBottom = panBottomR * aBottom; } mixToTarget(); } diff --git a/src/Storage.cpp b/src/Storage.cpp index 1a70acd..81e283b 100644 --- a/src/Storage.cpp +++ b/src/Storage.cpp @@ -43,6 +43,7 @@ #include "Utf8Utils.hpp" #include "AtomConverter.hpp" #include "FileBrowserFilesFeature.hpp" +#include using namespace pipedal; namespace fs = std::filesystem; @@ -65,7 +66,7 @@ Storage::Storage() inline bool isSafeCharacter(char c) { - return (c >= '0' && c <= '9') | (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '-'; + return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '-'; } static int fromhexStrict(char c) @@ -2074,15 +2075,29 @@ static bool ensureNoDotDot(const std::filesystem::path &path) return true; } +static bool isInfoFile(const std::string&fileName) +{ + if (strcasecmp(fileName.c_str(),"license.txt") == 0) + { + return true; + } + if (strcasecmp(fileName.c_str(),"license.md") == 0) + { + return true; + } + if (strcasecmp(fileName.c_str(),"readme.txt") == 0) + { + return true; + } + if (strcasecmp(fileName.c_str(),"readme.md") == 0) + { + return true; + } + return false; +} static bool isInfoFile(const FileEntry &l) { - if (l.displayName_.starts_with("LICENSE")) - return true; - if (l.displayName_.starts_with("README")) - return true; - if (l.displayName_.find(".md") == l.displayName_.length() - 3) - return true; - return false; + return isInfoFile(l.displayName_); } static void AddFilesToResult( @@ -2557,6 +2572,11 @@ std::filesystem::path Storage::MakeUserFilePath(const std::string &directory, co return result; } +bool Storage::IsValidReadmeFile(const std::filesystem::path &fullPath) +{ + return isInfoFile(fullPath.filename().string()); +} + bool Storage::IsValidArtworkFile(const std::filesystem::path &fullPath) { if (IsInAudioTracksDirectory(fullPath) && isArtworkFileName(fullPath.filename().string())) @@ -2590,7 +2610,7 @@ std::string Storage::UploadUserFile(const std::string &directory, throw std::logic_error("Permission denied. Path is outside the upload storage directory."); } - if (!(uiFileProperty->IsValidExtension(relativePath) || IsValidArtworkFile(path))) + if (!(uiFileProperty->IsValidExtension(relativePath) || IsValidArtworkFile(path) || IsValidReadmeFile(path))) { throw std::logic_error("Permission denied. Invalid file extension for this directory."); } diff --git a/src/Storage.hpp b/src/Storage.hpp index f6044fa..21ae5ba 100644 --- a/src/Storage.hpp +++ b/src/Storage.hpp @@ -178,6 +178,7 @@ public: bool IsInUploadsDirectory(const std::filesystem::path&path) const; bool IsInAudioTracksDirectory(const std::filesystem::path&path) const; bool IsValidArtworkFile(const std::filesystem::path& fullPath); + bool IsValidReadmeFile(const std::filesystem::path& fullpath); FileRequestResult GetFileList2(const std::string&relativePath,const UiFileProperty&fileProperty); diff --git a/vite/src/pipedal/ControlViewFactory.tsx b/vite/src/pipedal/ControlViewFactory.tsx index 1f00945..0de9746 100644 --- a/vite/src/pipedal/ControlViewFactory.tsx +++ b/vite/src/pipedal/ControlViewFactory.tsx @@ -33,6 +33,7 @@ import ToobMLViewFactory from './ToobMLView'; import ToobPlayerFactory from './ToobPlayerView'; import ToobNamViewFactory from './ToobNamView'; import ToobParametericEqViewFactory from './ToobParametricEqView'; +import {ToobParametricEqViewFactoryStereo} from './ToobParametricEqView'; let pluginFactories: IControlViewFactory[] = [ @@ -42,7 +43,8 @@ let pluginFactories: IControlViewFactory[] = [ new ToobMLViewFactory(), new ToobPlayerFactory(), new ToobNamViewFactory(), - new ToobParametericEqViewFactory() + new ToobParametericEqViewFactory(), + new ToobParametricEqViewFactoryStereo(), ]; diff --git a/vite/src/pipedal/FilePropertyDialog.tsx b/vite/src/pipedal/FilePropertyDialog.tsx index e1d1614..26321ba 100644 --- a/vite/src/pipedal/FilePropertyDialog.tsx +++ b/vite/src/pipedal/FilePropertyDialog.tsx @@ -1775,7 +1775,7 @@ export default withStyles( return true; } let fileNameOnly = pathFileNameOnly(fileName); - if (fileNameOnly === "LICENSE" || fileNameOnly === "README") + if (fileNameOnly.toUpperCase() === "LICENSE" || fileNameOnly.toUpperCase() === "README") { return true; } diff --git a/vite/src/pipedal/Lv2Plugin.tsx b/vite/src/pipedal/Lv2Plugin.tsx index 341425f..ebe4165 100644 --- a/vite/src/pipedal/Lv2Plugin.tsx +++ b/vite/src/pipedal/Lv2Plugin.tsx @@ -1138,18 +1138,20 @@ export function makeSplitUiPlugin(): UiPlugin { has_midi_output: 0, description: "", controls: [ - new UiControl().applyProperties({ + new UiControl().deserialize({ symbol: "splitType", name: "Type", index: 0, is_input: true, min_value: 0.0, max_value: 2.0, + default_value: 0.0, + enumeration_property: true, scale_points: [ new ScalePoint().deserialize({ value: 0, label: "A/B" }), - new ScalePoint().deserialize({ value: 1, label: "mix" }), - new ScalePoint().deserialize({ value: 1, label: "L/R" }), + new ScalePoint().deserialize({ value: 1, label: "Mix" }), + new ScalePoint().deserialize({ value: 2, label: "L/R" }), ], is_bypass: false, is_program_controller: false, @@ -1157,84 +1159,97 @@ export function makeSplitUiPlugin(): UiPlugin { connection_optional: false, }), - new UiControl().applyProperties({ + new UiControl().deserialize({ symbol: "select", name: "Select", index: 1, is_input: true, min_value: 0.0, max_value: 1.0, + default_value: 0.0, + enumeration_property: true, scale_points: [ new ScalePoint().deserialize({ value: 0, label: "A" }), new ScalePoint().deserialize({ value: 1, label: "B" }), ], + controlType: ControlType.ABSwitch, + is_bypass: false, is_program_controller: false, custom_units: "", connection_optional: false, }), - - new UiControl().applyProperties({ + + new UiControl().deserialize({ symbol: "mix", name: "Mix", index: 2, is_input: true, min_value: -1.0, max_value: 1.0, + default_value: 0.0, + controlType: ControlType.Dial, is_bypass: false, is_program_controller: false, custom_units: "", connection_optional: false, }), - new UiControl().applyProperties({ + new UiControl().deserialize({ symbol: "panL", name: "Pan Top", index: 3, is_input: true, min_value: -1.0, max_value: 1.0, + default_value: 0.0, + controlType: ControlType.Dial, is_bypass: false, is_program_controller: false, custom_units: "", connection_optional: false, }), - new UiControl().applyProperties({ + new UiControl().deserialize({ symbol: "volL", - name: "Vol Top", index: 4, is_input: true, min_value: -60.0, max_value: 12.0, + default_value: 0.0, is_bypass: false, + controlType: ControlType.Dial, is_program_controller: false, custom_units: "", connection_optional: false, }), - new UiControl().applyProperties({ + new UiControl().deserialize({ symbol: "panR", name: "Pan Bottom", index: 5, is_input: true, min_value: -1.0, max_value: 1.0, + default_value: 0.0, + controlType: ControlType.Dial, is_bypass: false, is_program_controller: false, custom_units: "", connection_optional: false, }), - new UiControl().applyProperties({ + new UiControl().deserialize({ symbol: "volR", name: "Vol Bottom", index: 6, is_input: true, min_value: -60.0, max_value: 12.0, + default_value: 0.0, + controlType: ControlType.Dial, is_bypass: false, is_program_controller: false, custom_units: "", diff --git a/vite/src/pipedal/Pedalboard.tsx b/vite/src/pipedal/Pedalboard.tsx index 1012687..137f302 100644 --- a/vite/src/pipedal/Pedalboard.tsx +++ b/vite/src/pipedal/Pedalboard.tsx @@ -226,7 +226,7 @@ export class SnapshotValue { this.isEnabled = input.isEnabled; this.instanceId = input.instanceId; this.controlValues = ControlValue.deserializeArray(input.controlValues); - this.lv2State = input.lv2state; + this.lv2State = input.lv2State; this.pathProperties = input.pathProperties; return this; } @@ -514,7 +514,7 @@ export class Pedalboard implements Deserializable { } return null; } - deleteItem_(instanceId: number,items: PedalboardItem[]): number | null + private deleteItem_(instanceId: number,items: PedalboardItem[]): number | null { for (let i = 0; i < items.length; ++i) { @@ -686,9 +686,9 @@ export class Pedalboard implements Deserializable { new ControlValue(PedalboardSplitItem.SELECT_KEY,0), new ControlValue(PedalboardSplitItem.MIX_KEY,0), new ControlValue(PedalboardSplitItem.PANL_KEY,0), - new ControlValue(PedalboardSplitItem.VOLL_KEY,-3), + new ControlValue(PedalboardSplitItem.VOLL_KEY,0), new ControlValue(PedalboardSplitItem.PANR_KEY,0), - new ControlValue(PedalboardSplitItem.VOLR_KEY,-3) + new ControlValue(PedalboardSplitItem.VOLR_KEY,0) ]; diff --git a/vite/src/pipedal/PiPedalModel.tsx b/vite/src/pipedal/PiPedalModel.tsx index 7f4fd54..aaa0152 100644 --- a/vite/src/pipedal/PiPedalModel.tsx +++ b/vite/src/pipedal/PiPedalModel.tsx @@ -1538,15 +1538,44 @@ export class PiPedalModel //implements PiPedalModel selectSnapshot(index: number) { this.webSocket?.send("setSnapshot", index); } + + private pruneSnapshotValues(pedalboard: Pedalboard) + { + let validPluginIds: Set = new Set(); + + let it = pedalboard.itemsGenerator(); + while (true) { + let v = it.next(); + if (v.done) break; + validPluginIds.add(v.value.instanceId); + + } + + for (let snapshot of pedalboard.snapshots) { + if (snapshot) { + let ix = 0; + while (ix < snapshot.values.length) { + let value = snapshot.values[ix]; + if (validPluginIds.has(value.instanceId)) { + ix++; + } else { + snapshot.values.splice(ix, 1); + } + } + } + } + } setSnapshots(snapshots: (Snapshot | null)[], selectedSnapshot: number) { let pedalboard = this.pedalboard.get().clone(); pedalboard.snapshots = snapshots; if (selectedSnapshot !== -1) { pedalboard.selectedSnapshot = selectedSnapshot; } + this.pruneSnapshotValues(pedalboard); + this.setModelPedalboard(pedalboard); - this.webSocket?.send("setSnapshots", { snapshots: snapshots, selectedSnapshot: selectedSnapshot }); + this.webSocket?.send("setSnapshots", { snapshots: pedalboard.snapshots, selectedSnapshot: selectedSnapshot }); } setInputVolume(volume_db: number): void { @@ -1721,11 +1750,19 @@ export class PiPedalModel //implements PiPedalModel if (pedalboard === undefined) throw new PiPedalStateError("Pedalboard not ready."); let newPedalboard = pedalboard.clone(); - let item = newPedalboard.getItem(instanceId); + let item: PedalboardItem = newPedalboard.getItem(instanceId); let changed = value !== item.isEnabled; if (changed) { item.isEnabled = value; + let pluginInfo: UiPlugin | null = this.getUiPlugin(item.uri); + if (pluginInfo !== null) { + for (let uiControl of pluginInfo.controls) { + if (uiControl.is_bypass) { + this._setPedalboardControlValue(instanceId, uiControl.symbol, value ? 1.0 : 0.0, false); + } + } + } this.setModelPedalboard(newPedalboard); if (notifyServer) { let body: PedalboardItemEnableBody = { @@ -1833,6 +1870,7 @@ export class PiPedalModel //implements PiPedalModel let result = newPedalboard.deleteItem(instanceId); if (result !== null) { newPedalboard.selectedPlugin = result; + this.pruneSnapshotValues(newPedalboard); this.setModelPedalboard(newPedalboard); this.updateServerPedalboard(); } diff --git a/vite/src/pipedal/SplitControlView.tsx b/vite/src/pipedal/SplitControlView.tsx index 2ff7930..8635618 100644 --- a/vite/src/pipedal/SplitControlView.tsx +++ b/vite/src/pipedal/SplitControlView.tsx @@ -182,10 +182,10 @@ const SplitControlView = return (
- +
- +
diff --git a/vite/src/pipedal/SplitUiControls.tsx b/vite/src/pipedal/SplitUiControls.tsx index 4e4b7cd..2171980 100644 --- a/vite/src/pipedal/SplitUiControls.tsx +++ b/vite/src/pipedal/SplitUiControls.tsx @@ -27,6 +27,7 @@ export const SplitTypeControl: UiControl = new UiControl().deserialize({ symbol: PedalboardSplitItem.TYPE_KEY, name: "Type", index: 0, + is_input: true, min_value: 0, max_value: 2, default_value: 0, @@ -53,6 +54,8 @@ export const SplitAbControl: UiControl = new UiControl().deserialize({ symbol: PedalboardSplitItem.SELECT_KEY, name: "Select", index: 1, + is_input: true, + min_value: 0, max_value: 1, default_value: 0, @@ -78,6 +81,7 @@ export const SplitMixControl: UiControl = new UiControl().deserialize({ symbol: PedalboardSplitItem.MIX_KEY, name: "Mix", index: 2, + is_input: true, min_value: -1, max_value: 1, default_value: 0, @@ -99,6 +103,7 @@ export const SplitPanLeftControl: UiControl = new UiControl().deserialize({ symbol: PedalboardSplitItem.PANL_KEY, name: "Pan Top", index: 3, + is_input: true, min_value: -1, max_value: 1, default_value: 0, @@ -119,9 +124,10 @@ export const SplitVolLeftControl: UiControl = new UiControl().deserialize({ symbol: PedalboardSplitItem.VOLL_KEY, name: "Vol Top", index: 4, + is_input: true, min_value: -60, max_value: 12, - default_value: -3, + default_value: 0, range_steps: 0, is_logarithmic: false, display_priority: -1, @@ -146,6 +152,7 @@ export const SplitPanRightControl: UiControl = new UiControl().deserialize({ symbol: PedalboardSplitItem.PANR_KEY, name: "Pan Bottom", index: 5, + is_input: true, min_value: -1, max_value: 1, default_value: 0, @@ -166,9 +173,10 @@ export const SplitVolRightControl: UiControl = new UiControl().deserialize({ symbol: PedalboardSplitItem.VOLR_KEY, name: "Vol Bottom", index: 6, + is_input: true, min_value: -60, max_value: 12, - default_value: -3, + default_value: 0, range_steps: 0, is_logarithmic: false, display_priority: -1, diff --git a/vite/src/pipedal/ToobParametricEqView.tsx b/vite/src/pipedal/ToobParametricEqView.tsx index 1bc64cf..7bced53 100644 --- a/vite/src/pipedal/ToobParametricEqView.tsx +++ b/vite/src/pipedal/ToobParametricEqView.tsx @@ -736,5 +736,19 @@ class ToobParametricEqViewFactory implements IControlViewFactory { } -} -export default ToobParametricEqViewFactory; \ No newline at end of file +}; +export default ToobParametricEqViewFactory; + +class ToobParametricEqViewFactoryStereo implements IControlViewFactory { + uri: string = "http://two-play.com/plugins/toob-parametric-eq-stereo"; + + Create(model: PiPedalModel, pedalboardItem: PedalboardItem): React.ReactNode { + return (); + } + + +}; + +export { ToobParametricEqViewFactoryStereo }; + +