Desktop and Web app to browse and manage guitar amp tones. Control your bluetooth amp, jam to video backing tracks.
Desktop and Web UI which can be used to:
Download from https://soundshed.com or check out the web app version.
Windows, macOS and Linux. 64-bit OS and Bluetooth (BLE) connectivity required.
Supported amps:
Possible future features include:
Input event from keyboard or midi can be mapped to a preset slot (e.g. channels 1-4). The app can currently learn some midi control inputs (note-on and program-change) and assign them to amp channel selections.
Prerequisites: Node 20.x or higher, npm 6.14 or higher. Windows, macOS or Linux
VS Code is the recommended editor
If working on the Lessons portion, you will need to add your youtube-data-api key to the /src/env.ts
file. More information available here. Please do not submit this file in pull requests.
Clone this repository
run npm install
on the repo path
npm run watch-web
in one terminal to continuously rebuild the UI code or npm run build-web
to just build once. Note that there is a build for the app UI and a build for the electron main process, some of which use the same files (types etc).npx http-server build
to start local web server on http://localhost:8080/
npx http-server build --ssl -K C:/Work/Misc/ssl/localhost-key.pem -C C:/Work/Misc/ssl/localhost.pem
npm run watch-electron
in one terminal to continuously rebuild the UI code or npm run build-electron
to just build once. Note that there is a build for the app UI and a build for the electron main process, some of which use the same files (types etc).npm run start-electron
to launch the UIThe final installable app is packaged using electron-forge:
npm run make
The app is built using TypeScript. For the electron version, electron/node is the host process, talking to the electron renderer and back again (the standard electron way of working). Both web and electron versions now use Web Bluetooth (BLE).
The UI is React (TypeScript variant) with bootstrap for UI css. The Pullstate library is use for app state management and a couple of view model classes exist to centralise common points of interaction with APIs, the devices and state.
Original template is loosely based on https://www.sitepen.com/blog/getting-started-with-electron-typescript-react-and-webpack
[BLE Reader Data Received Queue]
[Spark Reader Message Queue]
[App Message Reader Loop]
At the bluetooth level the app registers a listener to consume data changes for a hardware characteristic, this delivers a stream of bytes in chunks. The app continuously queues the data recieved and looks for message terminator bytes (F7). When encountered it queues the current data for message processing higher up the chain.
The app then continuously runs a message processing loop to peek for terminated data chunks from the bluetooth reader, these are picked up from the bluetooth reader queue and parsed/interpreted into messages for our app, then added to our app message queue for later processing.