diff --git a/CMakeLists.txt b/CMakeLists.txt index b76aa52..b7f2f50 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,13 +1,13 @@ cmake_minimum_required(VERSION 3.16.0) project(pipedal - VERSION 1.4.74 + VERSION 1.4.75 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.4.74-Release") +set (DISPLAY_VERSION "PiPedal v1.4.75-Release") set (PACKAGE_ARCHITECTURE ${DEBIAN_ARCHITECTURE}) set (CMAKE_INSTALL_PREFIX "/usr/") diff --git a/README.md b/README.md index 83afa4d..31f0828 100644 --- a/README.md +++ b/README.md @@ -6,14 +6,14 @@ -Download: v1.4.74 +Download: v1.4.75 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). _Important notice_: [PatchStorage.com](https:///patchstorage.com) has added support for [PiPedal](https://patchstorage.com/platform/pipedal/). We urgently need your support! If you could please upload patches [here](https://patchstorage.com/platform/pipedal/) I would be enormously grateful. Note that media and model files are included in patch files, so you can share patches that include model files or audio samples. If you make use of plugins that are not included in the PiPedal distribution, please include a link to the plugin in the patch description. -#### NEW version 1.4.74 Release, includes new TooB 4Looper, TooB One-Button Looper and TooB Record Input plugins. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details. +#### NEW version 1.4.75 Release, includes new TooB 4Looper, TooB One-Button Looper and TooB Record Input plugins. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details.   diff --git a/docs/Installing.md b/docs/Installing.md index e6718ea..a274baf 100644 --- a/docs/Installing.md +++ b/docs/Installing.md @@ -13,17 +13,17 @@ page_icon: img/Install4.jpg Download the most recent Debian (.deb) package for your platform: -- [Raspberry Pi OS bookworm (aarch64) v1.4.74 Beta](https://github.com/rerdavies/pipedal/releases/download/v1.4.74/pipedal_1.4.74_arm64.deb) -- [Ubuntu 24.x (aarch64) v1.4.74 Alpha](https://github.com/rerdavies/pipedal/releases/download/v1.4.74/pipedal_1.4.74_arm64.deb) -- [Ubuntu 24.x (amd64) v1.4.74 Alpha](https://github.com/rerdavies/pipedal/releases/download/v1.4.74/pipedal_1.4.74_amd64.deb) +- [Raspberry Pi OS bookworm (aarch64) v1.4.75 Beta](https://github.com/rerdavies/pipedal/releases/download/v1.4.75/pipedal_1.4.75_arm64.deb) +- [Ubuntu 24.x (aarch64) v1.4.75 Alpha](https://github.com/rerdavies/pipedal/releases/download/v1.4.75/pipedal_1.4.75_arm64.deb) +- [Ubuntu 24.x (amd64) v1.4.75 Alpha](https://github.com/rerdavies/pipedal/releases/download/v1.4.75/pipedal_1.4.75_amd64.deb) -Version 1.4.74 has been tested on Raspberry Pi OS bookworm, Ubuntu 24.04 (amd64), and Ubuntu 24.10 (aarch64). Download the appropriate package for your platform, and install using the following procedure: +Version 1.4.75 has been tested on Raspberry Pi OS bookworm, Ubuntu 24.04 (amd64), and Ubuntu 24.10 (aarch64). Download the appropriate package for your platform, and install using the following procedure: ``` sudo apt update cd ~/Downloads - sudo apt-get install pipedal_1.4.74_arm64.deb + sudo apt-get install pipedal_1.4.75_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 b405f20..9ff74d0 100644 --- a/docs/ReleaseNotes.md +++ b/docs/ReleaseNotes.md @@ -1,5 +1,18 @@ # Release Notes +## PiPedal 1.4.75 Release + +New pugins: +- **TooB Noise Gate**. A standalone Noise Gate plugin. +- **TooB Volume**. A standalong plugin to adjust signal volume. +- **TooB Mix**. A standalone plugin to remix stereo signals. + +Bug fixes: +- TooB Tuner improved stability, and accuracy. Allow tuning of notes above Bb4. +- Fix TooB Recorder file playback. + + + ## PiPedal 1.4.74 Release New plugins: diff --git a/docs/download.md b/docs/download.md index 61c7fc5..89bb61d 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.4.74 Beta](https://github.com/rerdavies/pipedal/releases/download/v1.4.74/pipedal_1.4.74_arm64.deb) -- [Ubuntu 24.x (aarch64) v1.4.74 Alpha](https://github.com/rerdavies/pipedal/releases/download/v1.4.74/pipedal_1.4.74_arm64.deb) -- [Ubuntu 24.x (amd64) v1.4.74 Alpha](https://github.com/rerdavies/pipedal/releases/download/v1.4.74/pipedal_1.4.74_amd64.deb) +- [Raspberry Pi OS bookworm (aarch64) v1.4.75 Beta](https://github.com/rerdavies/pipedal/releases/download/v1.4.75/pipedal_1.4.75_arm64.deb) +- [Ubuntu 24.x (aarch64) v1.4.75 Alpha](https://github.com/rerdavies/pipedal/releases/download/v1.4.75/pipedal_1.4.75_arm64.deb) +- [Ubuntu 24.x (amd64) v1.4.75 Alpha](https://github.com/rerdavies/pipedal/releases/download/v1.4.75/pipedal_1.4.75_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.4.74_arm64.deb + sudo apt-get install ./pipedal_1.4.75_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/docs/index.md b/docs/index.md index 1d8157d..1f2a286 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,4 +1,4 @@ -v1.4.74 +v1.4.75 _To download PiPedal, click [*here*](download.md). To view PiPedal documentation, click [*here*](Documentation.md)._ @@ -6,7 +6,7 @@ To view PiPedal documentation, click [*here*](Documentation.md)._ _Important notice_: [PatchStorage.com](https:///patchstorage.com) has added support for [PiPedal](https://patchstorage.com/platform/pipedal/). We urgently need your support! If you could please upload patches [here](https://patchstorage.com/platform/pipedal/) I would be enormously grateful. Note that media and model files are included in patch files, so you can share patches that include model files or audio samples. If you make use of plugins that are not included in the PiPedal distribution, please include a link to the plugin in the patch description. -#### NEW version 1.4.74 Release, includes new TooB 4Looper, TooB One-Button Looper and TooB Record Input plugins. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details. +#### NEW version 1.4.75 Release, includes new TooB 4Looper, TooB One-Button Looper and TooB Record Input plugins. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details.   diff --git a/lv2/aarch64/ToobAmp.lv2/CabIR.ttl b/lv2/aarch64/ToobAmp.lv2/CabIR.ttl index 1e3c79a..39dce01 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 59 ; + lv2:microVersion 61 ; 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 ca2d90d..10b4928 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 59 ; + lv2:microVersion 61 ; mod:brand "TooB"; mod:label "TooB CabSim"; diff --git a/lv2/aarch64/ToobAmp.lv2/ConvolutionReverb.ttl b/lv2/aarch64/ToobAmp.lv2/ConvolutionReverb.ttl index 45b7799..40fcd51 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 59 ; + lv2:microVersion 61 ; rdfs:comment """ Convolution reverb is a notoriously compute-intensive effect. If you are having performance issues, use the Max T control to constrain the length of the impulse file to diff --git a/lv2/aarch64/ToobAmp.lv2/ConvolutionReverbStereo.ttl b/lv2/aarch64/ToobAmp.lv2/ConvolutionReverbStereo.ttl index a07f02f..e1569e9 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 59 ; + lv2:microVersion 61 ; rdfs:comment """ diff --git a/lv2/aarch64/ToobAmp.lv2/InputStage.ttl b/lv2/aarch64/ToobAmp.lv2/InputStage.ttl index a67c228..9f5dd36 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 59 ; + lv2:microVersion 61 ; mod:brand "TooB"; mod:label "TooB Input"; diff --git a/lv2/aarch64/ToobAmp.lv2/PowerStage2.ttl b/lv2/aarch64/ToobAmp.lv2/PowerStage2.ttl index 24b4589..6c5b5a8 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 59 ; + lv2:microVersion 61 ; mod:brand "TooB"; mod:label "Power Stage"; diff --git a/lv2/aarch64/ToobAmp.lv2/SpectrumAnalyzer.ttl b/lv2/aarch64/ToobAmp.lv2/SpectrumAnalyzer.ttl index 13e090b..ef1b860 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 59 ; + lv2:microVersion 61 ; 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 e19719b..d99175e 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 59 ; + lv2:microVersion 61 ; uiext:ui ; diff --git a/lv2/aarch64/ToobAmp.lv2/ToobAmp.so b/lv2/aarch64/ToobAmp.lv2/ToobAmp.so index 6babde7..1210dd3 100644 Binary files a/lv2/aarch64/ToobAmp.lv2/ToobAmp.so and b/lv2/aarch64/ToobAmp.lv2/ToobAmp.so differ diff --git a/lv2/aarch64/ToobAmp.lv2/ToobAmpUI.so b/lv2/aarch64/ToobAmp.lv2/ToobAmpUI.so index 90ee581..f440547 100644 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 cdf1476..2aa91ce 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 59 ; + lv2:microVersion 61 ; 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 b5e19ff..ddeed16 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 59 ; + lv2:microVersion 61 ; 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 b2f8851..9de95cc 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 59 ; + lv2:microVersion 61 ; 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 019850c..bb85bc6 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 59 ; + lv2:microVersion 61 ; 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 073898d..2ebddda 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 59 ; + lv2:microVersion 61 ; 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/ToobLooperFour.ttl b/lv2/aarch64/ToobAmp.lv2/ToobLooperFour.ttl index 4b9d1f2..3f30c28 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 1 ; - lv2:microVersion 59 ; + lv2:microVersion 61 ; ui:ui ; diff --git a/lv2/aarch64/ToobAmp.lv2/ToobLooperOne.ttl b/lv2/aarch64/ToobAmp.lv2/ToobLooperOne.ttl index 916d299..3e17a48 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 1 ; - lv2:microVersion 59 ; + lv2:microVersion 61 ; ui:ui ; diff --git a/lv2/aarch64/ToobAmp.lv2/ToobML.ttl b/lv2/aarch64/ToobAmp.lv2/ToobML.ttl index aa8c9f6..cabe8c6 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 59 ; + lv2:microVersion 61 ; 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 new file mode 100644 index 0000000..45905db --- /dev/null +++ b/lv2/aarch64/ToobAmp.lv2/ToobMix.ttl @@ -0,0 +1,159 @@ +@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 toobMix: . + + + + a foaf:Person ; + foaf:name "Robin Davies" ; + foaf:mbox ; + foaf:homepage . + + + a lv2:Plugin , + lv2:UtilityPlugin ; + doap:name "TooB Mix" , + "TooB Mix"@en-gb + ; + uiext:ui ; + doap:license ; + doap:maintainer ; + lv2:minorVersion 0 ; + lv2:microVersion 61 ; + rdfs:comment """ +Remix a stereo input signal. + +""" ; + + mod:brand "TooB"; + mod:label "TooB Mix"; + lv2:optionalFeature lv2:hardRTCapable; + + lv2:port + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 0 ; + lv2:symbol "trimL" ; + lv2:name "Trim L"; + + lv2:default 0.0 ; + lv2:minimum -60.0 ; + lv2:maximum 30.0 ; + units:unit units:db ; + lv2:scalePoint + [ + rdfs:label "-INF" ; + rdf:value -60.0 + ]; + rdfs:comment "Left Volume"; + + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 1; + lv2:symbol "panL" ; + lv2:name "Pan L"; + lv2:default -1.0 ; + lv2:minimum -1.0; + lv2:maximum 1.0; + rdfs:comment "Left Pan"; + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 2 ; + lv2:symbol "trimR" ; + lv2:name "Trim R"; + + lv2:default 0.0 ; + lv2:minimum -60.0 ; + lv2:maximum 30.0 ; + units:unit units:db ; + lv2:scalePoint + [ + rdfs:label "-INF" ; + rdf:value -60.0 + ]; + rdfs:comment "Right Volume"; + + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 3; + lv2:symbol "panR" ; + lv2:name "Pan R"; + lv2:default 1.0 ; + lv2:minimum -1.0; + lv2:maximum 1.0; + rdfs:comment "Right Pan"; + ], + [ + a lv2:AudioPort , + lv2:InputPort ; + lv2:index 4 ; + lv2:symbol "inl" ; + lv2:name "In L" + ], + [ + a lv2:AudioPort , + lv2:InputPort ; + lv2:index 5 ; + lv2:symbol "inr" ; + lv2:name "In R" + ], + [ + a lv2:AudioPort , + lv2:OutputPort ; + lv2:index 6 ; + lv2:symbol "outl" ; + lv2:name "Out L" + ], + [ + a lv2:AudioPort , + lv2:OutputPort ; + lv2:index 7 ; + 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 ; + . + + + diff --git a/lv2/aarch64/ToobAmp.lv2/ToobNeuralAmpModeler.ttl b/lv2/aarch64/ToobAmp.lv2/ToobNeuralAmpModeler.ttl index c0955d9..bde7edc 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobNeuralAmpModeler.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobNeuralAmpModeler.ttl @@ -61,7 +61,7 @@ toobNam:eqGroup doap:license ; doap:maintainer ; lv2:minorVersion 0 ; - lv2:microVersion 59 ; + lv2:microVersion 61 ; rdfs:comment """ A port of Steven Atkinson's Neural Amp Modeler to LV2. diff --git a/lv2/aarch64/ToobAmp.lv2/ToobNoiseGate.ttl b/lv2/aarch64/ToobAmp.lv2/ToobNoiseGate.ttl new file mode 100644 index 0000000..b1ded6d --- /dev/null +++ b/lv2/aarch64/ToobAmp.lv2/ToobNoiseGate.ttl @@ -0,0 +1,238 @@ +@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 noisegate: . + + + a foaf:Person ; + foaf:name "Robin Davies" ; + foaf:mbox ; + foaf:homepage . + + +noisegate:trigger_group + a param:ControlGroup , + pg:InputGroup ; + lv2:name "Trigger" ; + lv2:symbol "trigger_group" . + +noisegate:envelope_group + a param:ControlGroup , + pg:InputGroup ; + lv2:name "Envelope" ; + lv2:symbol "envelope_group" . + + + + + a lv2:Plugin , + lv2:UtilityPlugin ; + doap:name "TooB Noise Gate" , + "TooB Noise Gate"@en-gb + ; + uiext:ui ; + doap:license ; + doap:maintainer ; + lv2:minorVersion 0 ; + lv2:microVersion 61 ; + 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. +Signals below this threshold are muted or significantly reduced, +effectively "gating" unwanted noise, such as background hum, hiss, or crosstalk, +while preserving the desired sound, like vocals or instruments. + +The Hysteresis control sets a secondary threshold, slightly below +the primary threshold, to determine when the gate closes. This creates a "buffer zone" +to prevent the gate from rapidly toggling on and off (chattering) when the audio signal + hovers near the primary threshold. + +For example, if the Threshold contol is set to -30dB and Hysteresis control is set to -5dB, +the gate opens when the signal exceeds -30dB but only closes when it drops below -35 dB. +This smoother transition ensures cleaner gating, especially for signals with fluctuating levels, +like guitar. + +""" ; + + mod:brand "TooB"; + mod:label "TooB Noise Gate"; + lv2:optionalFeature lv2:hardRTCapable; + + + lv2:port + [ + a lv2:InputPort , + lv2:ControlPort ; + + pg:group noisegate:trigger_group ; + + lv2:index 0 ; + lv2:symbol "threshold" ; + lv2:name "Threshold"; + + lv2:default -30.0 ; + lv2:minimum -60.0 ; + lv2:maximum 0.0 ; + units:unit units:db ; + rdfs:comment "The level above which the gate opens."; + + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + pg:group noisegate:trigger_group ; + + lv2:index 1 ; + lv2:symbol "hysteresis" ; + lv2:name "Hysteresis"; + + lv2:default -6.0 ; + lv2:minimum -30.0 ; + lv2:maximum 0.0 ; + units:unit units:db ; + rdfs:comment "Controls the level at which the gate will be held open."; + ], + [ + a lv2:OutputPort , + lv2:ControlPort ; + + pg:group noisegate:trigger_group ; + + lv2:index 2; + lv2:symbol "trigger_led" ; + lv2:name ""; + lv2:portProperty lv2:toggled ; + lv2:minimum 0.0; + lv2:maximum 1.0; + ], + + + [ + a lv2:InputPort , + lv2:ControlPort ; + + pg:group noisegate:envelope_group ; + + lv2:index 3 ; + lv2:symbol "reduction" ; + lv2:name "Range"; + + lv2:default -60.0 ; + lv2:minimum -60.0 ; + lv2:maximum -6.0 ; + units:unit units:db ; + rdfs:comment "The amount of attenuation applied when the gate is closed."; + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + pg:group noisegate:envelope_group ; + + lv2:index 4 ; + lv2:symbol "attack" ; + lv2:name "Attack"; + + lv2:default 1.0 ; + lv2:minimum 1.0 ; + lv2:maximum 500.0 ; + units:unit units:ms ; + rdfs:comment "Envelope Attack"; + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + pg:group noisegate:envelope_group ; + + lv2:index 5 ; + lv2:symbol "hold" ; + lv2:name "Hold"; + + lv2:default 100.0 ; + lv2:minimum 10.0 ; + lv2:maximum 1000.0 ; + units:unit units:ms ; + rdfs:comment "Envelope Hold"; + ], + [ + a lv2:InputPort , + lv2:ControlPort ; + + pg:group noisegate:envelope_group ; + + lv2:index 6 ; + lv2:symbol "release" ; + lv2:name "Release"; + + lv2:default 330.0 ; + lv2:minimum 10.0 ; + lv2:maximum 5000.0 ; + units:unit units:ms ; + rdfs:comment "Envelope Release"; + ], + [ + a lv2:OutputPort , + lv2:ControlPort ; + + pg:group noisegate:envelope_group ; + + lv2:index 7 ; + lv2:symbol "gate_level" ; + lv2:name ""; + rdfs:comment "Gate Level"; + + lv2:default -60 ; + lv2:minimum -60 ; + lv2:maximum 00 ; + ], + + [ + a lv2:AudioPort , + lv2:InputPort ; + lv2:index 8 ; + lv2:symbol "in" ; + lv2:name "In" + ], + [ + a lv2:AudioPort , + lv2:OutputPort ; + lv2:index 9 ; + lv2:symbol "out" ; + lv2:name "Out" + ] + . + + + a uiext:X11UI ; + lv2:binary ; + + lv2:extensionData uiext::idle ; + lv2:extensionData uiext:resize ; + lv2:extensionData uiext:idleInterface; + lv2:requiredFeature uiext:idleInterface ; + . + + + diff --git a/lv2/aarch64/ToobAmp.lv2/ToobRecordMono.ttl b/lv2/aarch64/ToobAmp.lv2/ToobRecordMono.ttl index 5bcabbc..6348438 100644 --- a/lv2/aarch64/ToobAmp.lv2/ToobRecordMono.ttl +++ b/lv2/aarch64/ToobAmp.lv2/ToobRecordMono.ttl @@ -52,7 +52,7 @@ recordPrefix:audioFile doap:license ; doap:maintainer ; lv2:minorVersion 1 ; - lv2:microVersion 59 ; + lv2:microVersion 61 ; ui:ui ; diff --git a/lv2/aarch64/ToobAmp.lv2/ToobRecordStereo.ttl b/lv2/aarch64/ToobAmp.lv2/ToobRecordStereo.ttl index 7286b7c..9a14ff7 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 1 ; - lv2:microVersion 59 ; + lv2:microVersion 61 ; ui:ui ; diff --git a/lv2/aarch64/ToobAmp.lv2/ToobTuner.ttl b/lv2/aarch64/ToobAmp.lv2/ToobTuner.ttl index 764f0fa..bb83452 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 59 ; + lv2:microVersion 61 ; 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 new file mode 100644 index 0000000..d532b92 --- /dev/null +++ b/lv2/aarch64/ToobAmp.lv2/ToobVolume.ttl @@ -0,0 +1,103 @@ +@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: . + + + + a foaf:Person ; + foaf:name "Robin Davies" ; + foaf:mbox ; + foaf:homepage . + + + a lv2:Plugin , + lv2:UtilityPlugin ; + doap:name "TooB Volume" , + "TooB Volume"@en-gb + ; + uiext:ui ; + doap:license ; + doap:maintainer ; + lv2:minorVersion 0 ; + lv2:microVersion 61 ; + rdfs:comment """ +Volume control. + +TooB Volume operates on a monophonic signal. Use the TooB Mix plugin to set volume levels on a +stereophonic signal. + +""" ; + + mod:brand "TooB"; + mod:label "TooB Volume"; + lv2:optionalFeature lv2:hardRTCapable; + + lv2:port + [ + a lv2:InputPort , + lv2:ControlPort ; + + lv2:index 0 ; + lv2:symbol "vol" ; + lv2:name "Volume"; + + lv2:default 0.0 ; + lv2:minimum -60.0 ; + lv2:maximum 30.0 ; + units:unit units:db ; + lv2:scalePoint + [ + rdfs:label "-INF" ; + rdf:value -60.0 + ]; + rdfs:comment "Volume"; + + ], + [ + a lv2:AudioPort , + lv2:InputPort ; + lv2:index 1 ; + lv2:symbol "in" ; + lv2:name "In" + ], + [ + a lv2:AudioPort , + lv2:OutputPort ; + lv2:index 2 ; + lv2:symbol "out" ; + lv2:name "Out" + ] + . + + + a uiext:X11UI ; + lv2:binary ; + + lv2:extensionData uiext::idle ; + lv2:extensionData uiext:resize ; + lv2:extensionData uiext:idleInterface; + lv2:requiredFeature uiext:idleInterface ; + . + + + diff --git a/lv2/aarch64/ToobAmp.lv2/manifest.ttl b/lv2/aarch64/ToobAmp.lv2/manifest.ttl index 16a8335..8840e9b 100644 --- a/lv2/aarch64/ToobAmp.lv2/manifest.ttl +++ b/lv2/aarch64/ToobAmp.lv2/manifest.ttl @@ -88,6 +88,17 @@ 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 . diff --git a/lv2/aarch64/ToobAmp.lv2/resources/ToobMixLogo.svg b/lv2/aarch64/ToobAmp.lv2/resources/ToobMixLogo.svg new file mode 100644 index 0000000..2c45f24 --- /dev/null +++ b/lv2/aarch64/ToobAmp.lv2/resources/ToobMixLogo.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lv2/aarch64/ToobAmp.lv2/resources/ToobNoiseGateLogo.svg b/lv2/aarch64/ToobAmp.lv2/resources/ToobNoiseGateLogo.svg new file mode 100644 index 0000000..2654010 --- /dev/null +++ b/lv2/aarch64/ToobAmp.lv2/resources/ToobNoiseGateLogo.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lv2/aarch64/ToobAmp.lv2/resources/ToobVolumeLogo.svg b/lv2/aarch64/ToobAmp.lv2/resources/ToobVolumeLogo.svg new file mode 100644 index 0000000..5061070 --- /dev/null +++ b/lv2/aarch64/ToobAmp.lv2/resources/ToobVolumeLogo.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lv2/x86_64/toobamp_1.1.59_amd64.deb b/lv2/x86_64/toobamp_1.1.61_amd64.deb similarity index 76% rename from lv2/x86_64/toobamp_1.1.59_amd64.deb rename to lv2/x86_64/toobamp_1.1.61_amd64.deb index 7d7b0bc..aaf4dcf 100644 Binary files a/lv2/x86_64/toobamp_1.1.59_amd64.deb and b/lv2/x86_64/toobamp_1.1.61_amd64.deb differ diff --git a/src/AuxIn.cpp b/src/AuxIn.cpp new file mode 100644 index 0000000..056fcb4 --- /dev/null +++ b/src/AuxIn.cpp @@ -0,0 +1,188 @@ +#include "AuxIn.hpp" +#include +#include + +#include "ss.hpp" +#include "Finally.hpp" +#include +#include +#include +#include +#include + +#include +#include + +namespace fs = std::filesystem; + +namespace pipedal +{ + + class AuxInAlsaDeviceImpl : public AuxInAlsaDevice + { + public: + AuxInAlsaDeviceImpl(const std::filesystem::path &path); + virtual ~AuxInAlsaDeviceImpl() override; + void Open(const fs::path &path); + void Close(); + + private: + fs::path path; + void ThreadProc(); + + std::unique_ptr thread; + int fd = -1; + int cancelWrite = -1; + int cancelRead = -1; + size_t total_read = 0; + }; + + AuxInAlsaDevice::ptr AuxInAlsaDevice::Create(const std::filesystem::path &path) + { + return std::make_shared(path); + } + +} + +using namespace pipedal; + +AuxInAlsaDeviceImpl::AuxInAlsaDeviceImpl(const fs::path &path) +{ + this->path = path; + Open(path); + + this->thread = std::make_unique([this]() + { ThreadProc(); }); +} + +void AuxInAlsaDeviceImpl::Close() +{ + if (thread) + { + char buff[1]; + int nWritten = write(cancelWrite, buff, 1); + (void)nWritten; // ignore return. + thread->join(); + thread = nullptr; + } + if (cancelWrite != -1) + { + close(cancelWrite); + cancelWrite = 1; + } + if (cancelRead != -1) + { + close(cancelRead); + cancelRead = -1; + } + if (fd != -1) + { + close(fd); + fd = -1; + } +} + +AuxInAlsaDeviceImpl::~AuxInAlsaDeviceImpl() +{ + Close(); +} + +AuxInAlsaDevice::AuxInAlsaDevice() +{ +} +AuxInAlsaDevice::~AuxInAlsaDevice() +{ +} + +static void setNonBlocking(int fd) +{ + int flags = fcntl(fd, F_GETFL, 0); + fcntl(fd, F_SETFL, flags | O_NONBLOCK); +} +static void setBlocking(int fd) +{ + int flags = fcntl(fd, F_GETFL, 0); + fcntl(fd, F_SETFL, flags & (~O_NONBLOCK)); +} +void AuxInAlsaDeviceImpl::Open(const fs::path &path) +{ + total_read = 0; + + fd = open(path.c_str(), O_RDONLY | O_NONBLOCK); // non-blocking so we can open it + if (fd == -1) + { + throw std::runtime_error(SS("Can't open file " << path)); + } + setBlocking(fd); // but use blocking semantics when reading. + int cancel_pipe[2]; + // create a socket pair to use when cancelling. + if (pipe(cancel_pipe) == -1) + { + throw std::runtime_error("Can't create pipe."); + } + this->cancelWrite = cancel_pipe[1]; + this->cancelRead = cancel_pipe[0]; + setNonBlocking(cancelRead); +} + +void AuxInAlsaDeviceImpl::ThreadProc() +{ + constexpr size_t BUFFER_SIZE = 65536; + ssize_t bytes_read; + int16_t samples[BUFFER_SIZE]; + + while (1) + { + // Read audio data from the FIFO + struct pollfd poll_fds[2]; + poll_fds[0].fd = fd; + poll_fds[0].events = POLLIN; + poll_fds[1].fd = cancelRead; + poll_fds[1].events = POLLIN; + + int rc = poll(poll_fds, 2, -1); + if (rc < 00) + { + throw std::runtime_error("select failed."); + } + if (poll_fds[1].revents) + { + break; + } + if (poll_fds[0].revents) + { + ssize_t bytes_read = read(fd, &samples, sizeof(samples)); + if (bytes_read < 0) + { + throw std::runtime_error("Auxin read failed."); + } + if (poll_fds[0].revents & POLLHUP) + { + std::cout << " End of stream. " << total_read << std::endl; + close(fd); + fd = -1; + // reopen the fifo. + total_read = 0; + fd = open(path.c_str(), O_RDONLY | O_NONBLOCK); + if (fd == -1) + { + throw std::runtime_error(SS("Can't open file " << path)); + } + setBlocking(fd); + } + else if (bytes_read > 0) + { + total_read += bytes_read; + std::cout << " Read " << bytes_read << std::endl; + sleep(1); + // Process the audio data, mix it with your main input + // Your mixing code here... + + // For example, if main_buffer has your main input: + // for (int i = 0; i < bytes_read/sizeof(int16_t); i++) { + // mixed_buffer[i] = main_buffer[i] + buffer[i]; + // } + } + } + } +} diff --git a/src/AuxIn.hpp b/src/AuxIn.hpp new file mode 100644 index 0000000..3600af6 --- /dev/null +++ b/src/AuxIn.hpp @@ -0,0 +1,38 @@ +// Copyright (c) 2025 Robin Davies +// +// 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. + +#pragma once + +#include +#include + +namespace pipedal { + + class AuxInAlsaDevice { + protected: + AuxInAlsaDevice(); + virtual ~AuxInAlsaDevice(); + public: + using self=AuxInAlsaDevice; + using ptr = std::shared_ptr; + + + static ptr Create(const std::filesystem::path&path); + }; +} diff --git a/src/AuxInTest.cpp b/src/AuxInTest.cpp new file mode 100644 index 0000000..3fbfd76 --- /dev/null +++ b/src/AuxInTest.cpp @@ -0,0 +1,28 @@ +// Copyright (c) 2025 Robin Davies +// +// 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. + + +#include "AuxIn.hpp" +using namespace pipedal; + +int main(int argc, char**argv) { + AuxInAlsaDevice::ptr auxIn = AuxInAlsaDevice::Create("/var/pipedal/pipedal_aux_input_fifo"); + + sleep(10000); +} \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index de7b3ba..30878ff 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -376,6 +376,11 @@ target_link_libraries(hotspotManagerTest PRIVATE ${PIPEDAL_LIBS}) set_target_properties(hotspotManagerTest PROPERTIES EXCLUDE_FROM_ALL true) +add_executable(AuxInTest + AuxIn.hpp + AuxIn.cpp + AuxInTest.cpp +) add_executable(pipedaltest testMain.cpp diff --git a/todo.txt b/todo.txt index 0df47b0..1bf8abf 100644 --- a/todo.txt +++ b/todo.txt @@ -11,4 +11,4 @@ pcm.pipedal_aux_in { } } -Move to /usr/local because...? +Move to /usr/local because...?q diff --git a/vite/src/pipedal/Lv2Plugin.tsx b/vite/src/pipedal/Lv2Plugin.tsx index e9c8ba7..e5cba80 100644 --- a/vite/src/pipedal/Lv2Plugin.tsx +++ b/vite/src/pipedal/Lv2Plugin.tsx @@ -462,8 +462,6 @@ export enum ControlType { } const textUnits : Set = new Set([ - Units.none, - Units.unknown, Units.bar, Units.beat, Units.bpm,