diff --git a/CMakeLists.txt b/CMakeLists.txt index f5e223d..7c637f8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ project(pipedal EXECUTE_PROCESS( COMMAND dpkg --print-architecture COMMAND tr -d '\n' OUTPUT_VARIABLE DEBIAN_ARCHITECTURE ) -set (DISPLAY_VERSION "PiPedal v1.4.70-Release") +set (DISPLAY_VERSION "PiPedal v1.4.70-Beta") set (PACKAGE_ARCHITECTURE ${DEBIAN_ARCHITECTURE}) set (CMAKE_INSTALL_PREFIX "/usr/") diff --git a/PiPedalCommon/src/include/util.hpp b/PiPedalCommon/src/include/util.hpp index b4168cb..793e187 100644 --- a/PiPedalCommon/src/include/util.hpp +++ b/PiPedalCommon/src/include/util.hpp @@ -118,4 +118,7 @@ namespace pipedal std::string ToLower(const std::string&value); std::filesystem::path MakeRelativePath(const std::filesystem::path &path, const std::filesystem::path&parentPath); + + bool IsSubdirectory(const std::filesystem::path &path, const std::filesystem::path &basePath); + } diff --git a/PiPedalCommon/src/util.cpp b/PiPedalCommon/src/util.cpp index 47cd458..08de1f2 100644 --- a/PiPedalCommon/src/util.cpp +++ b/PiPedalCommon/src/util.cpp @@ -189,3 +189,30 @@ std::filesystem::path pipedal::MakeRelativePath(const std::filesystem::path &pat return remander; } + +bool pipedal::IsSubdirectory(const std::filesystem::path &path, const std::filesystem::path &basePath) +{ + auto iPath = path.begin(); + for (auto i = basePath.begin(); i != basePath.end(); ++i) + { + if (iPath == path.end()) + { + return false; + } + + if ((*i) != (*iPath)) + { + return false; + } + ++iPath; + } + while (iPath != path.end()) + { + if (iPath->string() == "..") + { + return false; + } + ++iPath; + } + return true; +} diff --git a/README.md b/README.md index d94e784..85d33da 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Documentation: [https://rerdavies.github.io/pipedal/Documentation.html](htt #### Important notice: PiPedal has a submitted a request to support sharing of Pipedal presets at [PatchStorage.com](https:///patchstorage.com). We need your support! Please vote for PiPedal [here](https://patchstorage.com/requests/pipedal/). -#### NEW version 1.4.70 Release, providing [snapshots](https://rerdavies.github.io/pipedal/Snaphots.html), and a new Performance View. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details. +#### NEW version 1.4.70 Beta. See the [release notes](https://rerdavies.github.io/pipedal/ReleaseNotes) for details.   diff --git a/a.out b/a.out deleted file mode 100644 index dd7982f..0000000 Binary files a/a.out and /dev/null differ diff --git a/docs/BuildingPiPedalFromSource.md b/docs/BuildingPiPedalFromSource.md index 5188c4f..07f9b7d 100644 --- a/docs/BuildingPiPedalFromSource.md +++ b/docs/BuildingPiPedalFromSource.md @@ -5,7 +5,7 @@ page_icon: img/Compiling.jpg {% include pageIcon.html %} -PiPedal has only been tested on Raspberry Pi OS, and Ubuntu, but should run with some modifications on most Linux distributions. Pull requests to correct problems with building PiPedal on other versions of Linux are welcome. However, getting build pre-requisites installed on non-Debian-derived Linux distrubutions (distros that don't use `apt`) will be challenging. +PiPedal has only been tested on Raspberry Pi OS, and Ubuntu 24.x, but should run with some modifications on most Linux distributions. Pull requests to correct problems with building PiPedal on other versions of Linux are welcome. However, getting build pre-requisites installed on non-Debian-derived Linux distrubutions (distros that don't use `apt`) will be challenging. To build and debug PiPedal using Visual Studio Code, you need 8GB of memory. You can build PiPedal with 2GB of memory. diff --git a/docs/Configuring.md b/docs/Configuring.md index 3ca6a49..2580a1a 100644 --- a/docs/Configuring.md +++ b/docs/Configuring.md @@ -3,6 +3,22 @@ page_icon: img/Setup.jpg icon_width: 320px icon_float: left --- +## Selecting a real-time kernel on Ubuntu. + +This step is unneccesary on Raspberry Pi OS, which installs an RT_PREEMPT kernel by default. + +By default, Ubuntu installs a PREEMT_DYNAMIC kernel, configured to run with volutary preemption. You will need to change this. You can do this by running the following command after you have installed PiPedal: + +``` + pipedal_kconfig +``` + +In order to support real-time audio processing, select Preempt=full. + +An RT_PREEMPT kernel provides slightly better realtime audio than a PREEMPT_DYNAMIC/preempt=full kernel, but the PREEMPT_DYNAMIC should be perfectly adequate. If you are having problems with audio dropouts, you may want to try an RT_PREEMPT kernel instead. Ubuntu provides a pre-built RT_PREEMPT kernel; but on our test systems, you can acheive stable low-latency audio using only the PREEMPT_DYNAMIC/preempt=full kernel. The pre-build Ubuntu RT_PREEMPT +kernel is only available if yo have an Ubuntu Pro subscription. But it is relatively easy to build the Ubuntu RT_PREEMPT kernel from source. That is, however, outside the scope of this document. We recommend using the PREEMPT_DYNAMIC/preempt=full Ubuntu kernel. + + ## Configuring PiPedal After Installation diff --git a/docs/Debugging.md b/docs/Debugging.md index e694d33..1786a5f 100644 --- a/docs/Debugging.md +++ b/docs/Debugging.md @@ -2,7 +2,7 @@ PipPedal consists of the following components: -* A web application build in React, found in the react subdirectory. +* A web application built using vite/React, found in the `vite` subdirectory. * `pipedald` @@ -40,7 +40,7 @@ same /etc/pipedal and /var/pipedal directories as an instance of `pipedal` runn under systemd. Note that when running under systemd, `pipedald` runs under an unprivileged `piedal_d` service account, and relies it's group (also 'pipedal_d`) in order to access its data files, and to communicate with the `pipedaladmin` service, which does run with root -priveleges when `pipedald` needs to perform operations that do required root privileges. +privileges when `pipedald` needs to perform operations that do required root privileges (e.g. shutdown/reboot and starting and stopping WiFi services). For what it's worth, `pipedaldmin` is virtually undebuggable, becuase it does require root privileges to run. If you really _must_ debug pipedaladmin, you can fire up a sudo isntance of Visual Studio Code @@ -53,8 +53,8 @@ audio and Wi-Fi configuration changes) may fail if the pipedaladmind service is with pipedaladmin via Unix docket that can only be opened by members of the pipedal_d group. So if you have added your own account to the `pipedal_d` group, debug instances of `pipedald` will in fact work properly. -In production, the pipedald web server serves the PiPedal web socket, as well as static HTML from the built -react components. But while debugging, it is much more convenient to use the React debug server for +In production, the pipedald web server serves the PiPedal web socket, as well as static HTML from the built +vite/React components. But while debugging, it is much more convenient to use the Vite debug server for React sources, and configure pipedald to serve only the websocket. Note that a debug instance of `pipedald` cannot bind to port 80, since that requires either root privileges or @@ -72,23 +72,26 @@ make the systemd instance of `pipedald` bind to port 8080 instead of port 80: (which will also restart the `pipedald` service). -To start the React debug server, from a shell, `cd` to the react directory, and run `./start`. The react debug -server will detect any changes to React sources, and rebuild them automatically (no build step required). -Actual debugging is performed using the Chrome debugger (which is remarkably well integrated with React). +To start the web app debug server, from a shell, `cd` to the `./vite` directory, and run `npm run dev`. The +Vite debug server will automatically detect any changes to web app sources, and rebuild them automatically (no build step required). Note that the `pipedald` service must be running in order for the web app to function properly, either +as a the `pipedald` service, or by running `pipedald` in a debugger. +Actual debugging is performed using the Chrome debugger (which is remarkably well integrated with Vite/React). You won't actually see changes to the version of the systemd version of the static web app until you do a full _Release_ or _RelWithDebInfo_ build of PiPedal, followed by running `./install.sh` which pushes the built react app in the location where the systemd version of `pipedald` serves static web content. By default, the debug React app will attempt to contact the pipedald server on ws:*:8080 -- the address on which the debug version of pipedald listens on. This can be reconfigured -in the file `react/src/public/var/config.json` if desired. If you connect to the the pipedald server port (port 80), pipedald intercepts requests for this file and points the react app at itself, so the file has no effect when running in production. +in the file `react/src/public/var/config.json` if desired. If you connect to the the pipedald server port (port 80), pipedald intercepts requests for `http://./var/config.json` and points the react app at itself, so the file has no effect when running in production. The React app will display the message "Error: Failed to connect to the server", until you start the pipedald websocket server in the VSCode debugger. However, it's quite reasonable to point the react debug app at a systemd instance of the pipedald server instead, if you don't intend to debug C++ code. react/public/var/config.json: { ... - "socket_server_port": 8080, # (PiPedald's port number) + # (PiPedald's port number. 80 for the production service, 8080 (by default) for + # pipedal running under a debugger. + "socket_server_port": 8080, "socket_server_address": "*", ... } diff --git a/docs/Installing.md b/docs/Installing.md index a84f6a3..dfbd312 100644 --- a/docs/Installing.md +++ b/docs/Installing.md @@ -13,24 +13,25 @@ page_icon: img/Install4.jpg Download the most recent Debian (.deb) package for your platform: -- [Raspberry Pi OS bookworm (64-bit) v1.4.70](https://github.com/rerdavies/pipedal/releases/download/) -- [Ubuntu/Raspberry Pi OS bullseyeye (64-bit) v1.2.31](https://github.com/rerdavies/pipedal/releases/download/v1.1.31/pipedal_1.1.31_arm64.deb) +- [Raspberry Pi OS bookworm (aarch64) v1.4.70 Beta](https://github.com/rerdavies/pipedal/releases/download/) +- [Ubuntu 24.x (aarch64) v1.4.70 Alpha](https://github.com/rerdavies/pipedal/releases/download/) +- [Ubuntu 24.x (amd64) v1.4.70 Alpha](https://github.com/rerdavies/pipedal/releases/download/) -Version 1.4.70 has not yet been tested on Ubuntu or Raspberry Pi OS bullseye. On these platforms, we recommend that you use version 1.1.31. -Install the package by running +Version 1.4.70 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 proceduer: ``` sudo apt update cd ~/Downloads sudo apt-get install pipedal_1.4.70_arm64.deb ``` -Adjust accordingly if you have downloaded v1.1.31. +Adjust accordingly depending which package you downloaded. On Raspberry Pi OS, if you have a graphical desktop installed, you can also install the package by double-clicking on the downloaded package in the File Manager. -After installing, follow the instructions in [Configuring PiPedal after Installation](Configuring.md). +After installing, follow the instructions in [Configuring PiPedal after Installation](Configuring.md). If +you are using Ubuntu, you will need to reconfigure Ubuntu to use a real-time kernel. -------- diff --git a/docs/ReleaseNotes.md b/docs/ReleaseNotes.md index 07b78a4..620e52c 100644 --- a/docs/ReleaseNotes.md +++ b/docs/ReleaseNotes.md @@ -2,15 +2,16 @@ ## PiPedal 1.4.70 Beta -- Support for Ubuntu 24.04 (arm64 and amd64) -- Ubunto CPU Freq/governor/thermal status display. +- Ubuntu 24.x compatibility (arm64 and amd64) +- Ubuntu CPU Freq/governor/thermal status display. - Support for WiFi on on Ubuntu -- TooB Plugin compatibility issues on x64/amd64. +- TooB Plugin compatibility issues on x64/amd64 (handling of NaNs) - Restart audio automatically after ALSA stalls. -- Improvements to File Upload UI for plugins that have complex file types (e.g. Ratatoille) +- Improvements to File Upload UI for plugins that have complex file types (e.g. Ratatouille) - Support for LV2 Trigger controls, and MIDI bindings to LV2 trigger controls (common in looper and recording/playback plugsin). - MIDI bindings for LV2 trigger controls. - Port Web app from CRA to Vite framework to avoid deprecated dependencies. +- ToobAmp 1.1.57: Correctly set file path of the default file property for Toob Convolution Reverb. ## PiPedal 1.3.69 diff --git a/docs/_includes/footer.html b/docs/_includes/footer.html index ee348ba..090570e 100644 --- a/docs/_includes/footer.html +++ b/docs/_includes/footer.html @@ -21,6 +21,10 @@ display: block; height: 24px; } + img-icon { + width: 24px; + height: + }