Merge pull request #438 from rerdavies/dev

Dev merge, v1.5.97
This commit is contained in:
Robin Davies
2026-01-21 17:02:22 -05:00
committed by GitHub
57 changed files with 1017 additions and 126 deletions
+16
View File
@@ -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"
}
]
}
+2 -2
View File
@@ -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/")
+2 -2
View File
@@ -9,11 +9,11 @@
<img src="https://img.shields.io/github/downloads/rerdavies/pipedal/total?color=%23808080&link=https%3A%2F%2Frerdavies.github.io%2Fpipedal%2Fdownload.html"/>
Download:&nbsp;<a href='https://rerdavies.github.io/pipedal/download.html'>v1.5.95</a>
Download:&nbsp;<a href='https://rerdavies.github.io/pipedal/download.html'>v1.5.97</a>
Website:&nbsp;[https://rerdavies.github.io/pipedal](https://rerdavies.github.io/pipedal).
Documentation:&nbsp;[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!
&nbsp;
+5 -5
View File
@@ -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.
+20
View File
@@ -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.
+4 -4
View File
@@ -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.
+1 -1
View File
@@ -93,7 +93,7 @@ cabir:impulseFile3
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
rdfs:comment """
TooB Cab IR is a convolution-based guitar cabinet impulse response simulator.
+1 -1
View File
@@ -50,7 +50,7 @@ toob:frequencyResponseVector
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
mod:brand "TooB";
mod:label "TooB CabSim";
+31 -11
View File
@@ -53,7 +53,7 @@ toobimpulse:impulseFile
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
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" ;
@@ -51,7 +51,7 @@ toobimpulse:impulseFile
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
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" ;
+1 -1
View File
@@ -66,7 +66,7 @@ inputStage:filterGroup
doap:license <https://two-play.com/TooB/licenses/isc> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
mod:brand "TooB";
mod:label "TooB Input";
+1 -1
View File
@@ -68,7 +68,7 @@ pstage:stage3
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
mod:brand "TooB";
mod:label "Power Stage";
+1 -1
View File
@@ -57,7 +57,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
rdfs:comment "TooB spectrum analyzer" ;
mod:brand "TooB";
+1 -1
View File
@@ -57,7 +57,7 @@ tonestack:eqGroup
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
uiext:ui <http://two-play.com/plugins/toob-tone-stack-ui>;
+3 -3
View File
@@ -45,14 +45,14 @@ toob:frequencyResponseVector
<http://two-play.com/plugins/toob-three-band-eq>
a lv2:Plugin ,
lv2:EQPlugin ;
doap:name "TooB 3 Band EQ" ,
"TooB 3 Band EQ"@en-gb-gb
doap:name "TooB 3 Band EQ (mono)" ,
"TooB 3 Band EQ (mono)"@en-gb-gb
;
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
uiext:ui <http://two-play.com/plugins/toob-three-band-eq-ui>;
@@ -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 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 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 pipedal_ui: <http://github.com/rerdavies/pipedal/ui#> .
@prefix pipedal_patch: <http://github.com/rerdavies/pipedal/patch#> .
@prefix toob: <http://two-play.com/plugins/toob#> .
@prefix tonestack: <two-play.com/plugins/toob-three-band-eq-stereo#> .
toob:frequencyResponseVector
a lv2:Parameter;
rdfs:label "Frequency Response";
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 <https://github.com/sponsors/rerdavies> .
<http://two-play.com/plugins/toob-three-band-eq-stereo>
a lv2:Plugin ,
lv2:EQPlugin ;
doap:name "TooB 3 Band EQ (Stereo)" ,
"TooB 3 Band EQ (Stereo)"@en-gb-gb
;
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 73 ;
uiext:ui <http://two-play.com/plugins/toob-three-band-eq-stereo-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"
]
.
<http://two-play.com/plugins/toob-three-band-eq-stereo-ui>
a uiext:X11UI ;
lv2:binary <ToobAmpUI.so>;
lv2:extensionData uiext::idle ;
lv2:extensionData uiext:resize ;
lv2:extensionData uiext:idleInterface;
lv2:requiredFeature uiext:idleInterface ;
.
<http://two-play.com/plugins/toob-three-band-eq-stereo>
pipedal_ui:ui <http://two-play.com/plugins/toob-three-band-eq-stereo#piPedalUI>.
<http://two-play.com/plugins/toob-three-band-eq-stereo#piPedalUI>
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 ;
]
.
Binary file not shown.
+1 -1
View File
@@ -40,7 +40,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
rdfs:comment """
Emulation of a Boss CE-2 Chorus.
+1 -1
View File
@@ -41,7 +41,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
rdfs:comment """
A straightforward no-frills digital delay.
+1 -1
View File
@@ -41,7 +41,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
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.
@@ -41,7 +41,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
rdfs:comment """
Digital emulation of a Boss BF-2 Flanger.
+1 -1
View File
@@ -41,7 +41,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
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.
+1 -1
View File
@@ -41,7 +41,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
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.
""" ;
+1 -1
View File
@@ -92,7 +92,7 @@ myprefix:output_group
doap:license <https://opensource.org/license/mit/> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 2 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
ui:ui <http://two-play.com/plugins/toob-looper-four-ui>;
+1 -1
View File
@@ -78,7 +78,7 @@ myprefix:output_group
doap:license <https://opensource.org/license/mit/> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 2 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
ui:ui <http://two-play.com/plugins/toob-looper-one-ui>;
+1 -1
View File
@@ -67,7 +67,7 @@ toobml:sagGroup
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
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.
+1 -1
View File
@@ -40,7 +40,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
rdfs:comment """
Remix a stereo input signal.
@@ -72,7 +72,7 @@ toobNam:calibrationGroup
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
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
+1 -1
View File
@@ -54,7 +54,7 @@ noisegate:envelope_group
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
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.
+3 -3
View File
@@ -80,14 +80,14 @@ parametric_eq:hfGroup
<http://two-play.com/plugins/toob-parametric-eq>
a lv2:Plugin ,
lv2:ParaEQPlugin ;
doap:name "TooB Parametric EQ" ,
"TooB Parametric EQ"@en-gb-gb
doap:name "TooB Parametric EQ (Mono)" ,
"TooB Parametric EQ (Mono)"@en-gb-gb
;
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
uiext:ui <http://two-play.com/plugins/toob-parametric-eq-ui>;
@@ -0,0 +1,395 @@
@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 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 pipedal_ui: <http://github.com/rerdavies/pipedal/ui#> .
@prefix pipedal_patch: <http://github.com/rerdavies/pipedal/patch#> .
@prefix toob: <http://two-play.com/plugins/toob#> .
@prefix toob-parametric-eq-stereo: <two-play.com/plugins/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" .
<http://two-play.com/rerdavies#me>
a foaf:Person ;
foaf:name "Robin Davies" ;
foaf:mbox <mailto:rerdavies@gmail.com> ;
foaf:homepage <https://github.com/sponsors/rerdavies> .
<http://two-play.com/plugins/toob-parametric-eq-stereo>
a lv2:Plugin ,
lv2:ParaEQPlugin ;
doap:name "TooB Parametric EQ (Stereo)" ,
"TooB Parametric EQ (Stereo)"@en-gb-gb
;
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 73 ;
uiext:ui <http://two-play.com/plugins/toob-parametric-eq-stereo-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"
]
.
<http://two-play.com/plugins/toob-parametric-eq-stereo-ui>
a uiext:X11UI ;
lv2:binary <ToobAmpUI.so>;
lv2:extensionData uiext::idle ;
lv2:extensionData uiext:resize ;
lv2:extensionData uiext:idleInterface;
lv2:requiredFeature uiext:idleInterface ;
.
<http://two-play.com/plugins/toob-parametric-eq-stereo>
pipedal_ui:ui <http://two-play.com/plugins/toob-parametric-eq-stereo#piPedalUI>.
<http://two-play.com/plugins/toob-parametric-eq-stereo#piPedalUI>
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 ;
]
.
+1 -1
View File
@@ -40,7 +40,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
rdfs:comment """
A loose emulation of an MXR® Phase 90 Phaser.
+1 -1
View File
@@ -60,7 +60,7 @@ toobPlayer:seek
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
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.
+1 -1
View File
@@ -51,7 +51,7 @@ recordPrefix:audioFile
doap:license <https://opensource.org/license/mit/> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 2 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
ui:ui <http://two-play.com/plugins/toob-record-mono-ui>;
+1 -1
View File
@@ -88,7 +88,7 @@ myprefix:loop3_group
doap:license <https://opensource.org/license/mit/> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 2 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
ui:ui <http://two-play.com/plugins/toob-record-stereo-ui>;
+1 -1
View File
@@ -41,7 +41,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
rdfs:comment """
A tremolo effect, equivalent to "vibrato" on vintage Fender tube amps.
+1 -1
View File
@@ -41,7 +41,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
rdfs:comment """
A tremolo effect, equivalent to "vibrato" on vintage Fender tube amps.
+1 -1
View File
@@ -40,7 +40,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
rdfs:comment """
TooB Tuner is a chromatic guitar tuner.
""" ;
+1 -1
View File
@@ -39,7 +39,7 @@
doap:license <https://rerdavies.github.io/pipedal/LicenseToobAmp> ;
doap:maintainer <http://two-play.com/rerdavies#me> ;
lv2:minorVersion 0 ;
lv2:microVersion 72 ;
lv2:microVersion 73 ;
rdfs:comment """
Volume control.
Binary file not shown.
Binary file not shown.
+8
View File
@@ -12,10 +12,18 @@
lv2:binary <ToobAmp.so> ;
rdfs:seeAlso <Toob3BandEq.ttl> .
<http://two-play.com/plugins/toob-three-band-eq-stereo> a lv2:Plugin ;
lv2:binary <ToobAmp.so> ;
rdfs:seeAlso <Toob3BandEqStereo.ttl> .
<http://two-play.com/plugins/toob-parametric-eq> a lv2:Plugin ;
lv2:binary <ToobAmp.so> ;
rdfs:seeAlso <ToobParametricEq.ttl> .
<http://two-play.com/plugins/toob-parametric-eq-stereo> a lv2:Plugin ;
lv2:binary <ToobAmp.so> ;
rdfs:seeAlso <ToobParametricEqStereo.ttl> .
<http://two-play.com/plugins/toob-convolution-reverb> a lv2:Plugin ;
lv2:binary <ToobAmp.so> ;
+11 -10
View File
@@ -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;
+53 -5
View File
@@ -671,6 +671,17 @@ void PiPedalModel::SetPedalboardItemEnable(int64_t clientId, int64_t pedalItemId
std::lock_guard<std::recursive_mutex> 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<IPiPedalModelSubscriber::ptr> 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()));
}
}
}
}
+13
View File
@@ -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());
+1
View File
@@ -527,6 +527,7 @@ namespace pipedal
}
}
bool IsPathProperty(const std::string &uri) const;
uint32_t getBypassPortIndex() const;
public:
virtual ~Lv2PluginInfo();
+33 -8
View File
@@ -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();
}
+29 -9
View File
@@ -43,6 +43,7 @@
#include "Utf8Utils.hpp"
#include "AtomConverter.hpp"
#include "FileBrowserFilesFeature.hpp"
#include <string.h>
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.");
}
+1
View File
@@ -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);
+3 -1
View File
@@ -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(),
];
+1 -1
View File
@@ -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;
}
+25 -10
View File
@@ -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,18 +1159,22 @@ 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: "",
@@ -1176,65 +1182,74 @@ export function makeSplitUiPlugin(): UiPlugin {
}),
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: "",
+4 -4
View File
@@ -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<Pedalboard> {
}
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<Pedalboard> {
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)
];
+40 -2
View File
@@ -1538,15 +1538,44 @@ export class PiPedalModel //implements PiPedalModel
selectSnapshot(index: number) {
this.webSocket?.send("setSnapshot", index);
}
private pruneSnapshotValues(pedalboard: Pedalboard)
{
let validPluginIds: Set<number> = new Set<number>();
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();
}
+2 -2
View File
@@ -182,10 +182,10 @@ const SplitControlView =
return (
<div className={classes.frame}>
<div className={classes.vuMeterL}>
<VuMeter display="input" instanceId={pedalboardItem.instanceId} />
<VuMeter displayText={true} display="input" instanceId={pedalboardItem.instanceId} />
</div>
<div className={vuMeterRClass}>
<VuMeter display="output" instanceId={pedalboardItem.instanceId} />
<VuMeter displayText={true} display="output" instanceId={pedalboardItem.instanceId} />
</div>
<div className={gridClass} >
<div style={{ flex: "0 0 auto" }}>
+10 -2
View File
@@ -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,
+15 -1
View File
@@ -736,5 +736,19 @@ class ToobParametricEqViewFactory implements IControlViewFactory {
}
}
};
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 (<ToobParametricEqView instanceId={pedalboardItem.instanceId} item={pedalboardItem} />);
}
};
export { ToobParametricEqViewFactoryStereo };