From 4e26c2da9839c5ddf37eeb69dec626c089f14924 Mon Sep 17 00:00:00 2001 From: Justin Cichra <1342149+jrcichra@users.noreply.github.com> Date: Wed, 27 Jul 2022 21:47:38 -0400 Subject: [PATCH] more contexts, update readme and remove warnings --- README.md | 64 ++++++++++++++++---- fluidsynth.sh | 1 + gui/src/Home.tsx | 20 ++++--- internal/client/client.go | 21 ++----- internal/player/player.go | 107 ++++++++++++++++------------------ internal/serial/serial.go | 7 ++- internal/server/api.go | 38 ++++++------ internal/server/server.go | 1 + main.go | 9 +-- profiles/default/channels.csv | 17 ++++++ profiles/default/stops.yaml | 87 +++++++++++++++++++++++++++ screenshots/gui01.png | Bin 0 -> 98867 bytes wfh-organist.service | 13 +++++ 13 files changed, 264 insertions(+), 121 deletions(-) create mode 100755 fluidsynth.sh create mode 100644 profiles/default/channels.csv create mode 100644 profiles/default/stops.yaml create mode 100644 screenshots/gui01.png create mode 100644 wfh-organist.service diff --git a/README.md b/README.md index 2983b1f..89fa0bd 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,6 @@ Be a Work-From-Home Organist. Written in Go. Send MIDI over regular TCP/IP to your local church. -# Disclaimer - -This is a work-in-progress that is constantly evolving on the `main` branch. For known working versions, see the [releases](https://github.com/jrcichra/wfh-organist/releases) page. There will be breaking changes between releases. - # Introduction This program listens to MIDI input and sends the notes over TCP. The program used in server or client mode, or both at the same time. This leads to some interesting use cases: @@ -23,38 +19,82 @@ This program listens to MIDI input and sends the notes over TCP. The program use # Build notes -I used Go 1.17 for this project, but older versions will probably work. There are external cgo dependencies so you'll need a few packages from your distro's package manager. This also means I can't easily provide cross-architecture targets +I used Go 1.17 for this project, but older versions will probably work. There are external cgo dependencies so you'll need a few packages from your distro's package manager. This also means I can't easily provide cross-architecture targets. -# Usage +# Server Install -- Download a recent version of [Go](https://go.dev/dl/) for your operating system +- Download a recent version of [Go](https://go.dev/dl/), [node](https://nodejs.org/en/), and [yarn](https://yarnpkg.com/) for your operating system. Replace `VITE_VIDEO_URL` with the URL of an mjpeg stream at the church (if configured). - `git clone https://github.com/jrcichra/wfh-organist.git` - `go build` +- `cd gui` +- `yarn install && VITE_VIDEO_URL=http://localhost:8080/video yarn build` - `./wfh-organist -help` +I've included a sample systemd service for the server. + +WFHO will serve static HTTP content under `gui/dist`, where it should have compiled the Vite app. + +Organs are configurable through the `profiles` directory. `channels.csv` is a CSV file which translates messages on the client-side before sending them over the network. This allows your home organ's MIDI channels to be mapped to a church's MIDI channels or transposed. When remotely playing at different churches, different profiles can be selected client-side with the `-profile` flag. + +`stops.yaml` defines the stop groups shown on the website and byte sequences for each stop. By sniffing the MIDI output of the organ, you can build a list of virtual stops. The example set of stops is for an [Allen Organ MDS-1](https://www.allenorgan.com/support/ownersmanuals/033-0050.pdf). + +The `default` profile makes no modification to the MIDI notes. + +# Client Install + +- Same steps as above, except node and yarn are not required. Only `go build` and run the binary. +- The client does support listening to an expression pedal sending messages over a serial port. Currently this is not configurable. + +An expression pedal can be used over serial. Just specify the TTY and baud rate. Currently the intensity is non-configurable, but you can modify `expressionPercentage` in `internal/serial.go`. + ``` Usage of ./wfh-organist: + -delay int + artificial delay in ms -list list available ports -midi int - midi port (default 0) + midi port (default 1) -mode string client, server, or local (runs both) (default "local") + -norecord + continuously record midi + -novolume + have WFHO control client volume -port int server port (default 3131) + -profile string + profiles path (default "profiles/wosp/") + -protocol string + tcp only (udp not implemented yet) (default "tcp") + -serialBaud int + serial port baud rate (default 115200) + -serialPath string + serial port path -server string server IP (default "localhost") + -stdin + read from stdin ``` +# Web GUI + +The web server is accessible on port `8080`. Through the GUI, stops from `stops.yaml` will appear. General pistons are currently hard-coded for the MDS-1. MIDI files located in `./midi` on the server will be available to play. The red PANIC button will stop any stuck notes. The on-screen keyboard will send notes to the channel in the drop-down. ![GUI example](screenshots/gui01.png) + +# Recording + +WFHO is set to always record on the MIDI-IN port from your USB to MIDI adapter. It will separate recordings based on a small timeout. It saves the midi files with as `$EPOCH.mid` + # Design choices -- ~~Simplicity - It should be easy to understand what the code is doing~~ <-- the code needs refactored -- TCP - This program was implimented with TCP but could also use UDP. I chose TCP to avoid 'stuck notes' in the event a NoteOff packet was dropped. TCP has the downside of effectively 'losing notes'. When a lag spike hits, the TCP stream will catch up and all the MIDI events will happen as fast as possible. This leads to gaps because the NoteOn and NoteOff happen almost instantaneously. +- TCP - This program was implimented with TCP but could also use UDP. I chose TCP to avoid 'stuck notes' in the event a NoteOff packet was dropped. TCP has the downside of effectively 'losing notes'. When a lag spike hits, the TCP stream will catch up and all the MIDI events will happen as fast as possible. This leads to gaps because the NoteOn and NoteOff happen almost instantaneously. TCP over the Internet in 2022 has been stable enough where real-time MIDI protocols haven't been a priority for the project. - Single Binary - Instead of managing two binaries, "server/client", I combined them into a single binary. I felt the space increase was worth the flexability and simplicity of managing one binary. The mode is controlled with a single flag. There was also a lot of shared code between the server and client, so making it a single binary was easy. -# Disclaimer +# Recommended Applications -This program is not intended for production use. I do not claim that this will work flawlessly for remote performances. Please anaylze the code and determine if your connection stability and latency will work with the way I have implimented this program. +- I'm using Tailscale to simplify the connection process. Both the server and client can be behind NATs and moved between churches without having to configure anything. +- I'm also using [trx](http://www.pogo.org.uk/~mark/trx/) over the Tailscale connection for two-way audio. Since it's sending unencrypted audio streams it's a little easier to deal with inside a VPN. +- For video, I'm using [motion](https://motion-project.github.io/) with a low framerate on a Raspberry Pi. # Testing diff --git a/fluidsynth.sh b/fluidsynth.sh new file mode 100755 index 0000000..0fb4c33 --- /dev/null +++ b/fluidsynth.sh @@ -0,0 +1 @@ +fluidsynth -a pulseaudio -g 5 /usr/share/soundfonts/FluidR3_GM.sf2 \ No newline at end of file diff --git a/gui/src/Home.tsx b/gui/src/Home.tsx index 39238f8..5a6f549 100644 --- a/gui/src/Home.tsx +++ b/gui/src/Home.tsx @@ -115,12 +115,14 @@ function Home() { // set up the websocket if (!websocket.current) { let wsProtoco = ""; - if (location.protocol === 'https:') { - wsProtoco = "wss" + if (location.protocol === "https:") { + wsProtoco = "wss"; } else { - wsProtoco = "ws" + wsProtoco = "ws"; } - websocket.current = new WebSocket(`${wsProtoco}://${document.location.host}/ws`); + websocket.current = new WebSocket( + `${wsProtoco}://${document.location.host}/ws` + ); websocket.current.onopen = () => { console.log("Successfully Connected"); }; @@ -132,7 +134,7 @@ function Home() { }; websocket.current.onmessage = (event) => { console.log("Socket Message: ", event.data); - setMidiLog(midiLog + "\n" + event.data) + setMidiLog(`${midiLog}\n${event.data}\nbob`); }; } @@ -220,7 +222,9 @@ function Home() {
wfho-video @@ -268,9 +272,7 @@ function Home() { width={1000} keyboardShortcuts={keyboardShortcuts} /> - +
); diff --git a/internal/client/client.go b/internal/client/client.go index 646c05e..b227f2e 100644 --- a/internal/client/client.go +++ b/internal/client/client.go @@ -16,7 +16,6 @@ import ( "github.com/fatih/color" "github.com/jrcichra/wfh-organist/internal/common" "github.com/jrcichra/wfh-organist/internal/parser/channels" - "github.com/jrcichra/wfh-organist/internal/player" "github.com/jrcichra/wfh-organist/internal/serial" "github.com/jrcichra/wfh-organist/internal/types" "github.com/jrcichra/wfh-organist/internal/volume" @@ -44,15 +43,14 @@ func dial(serverIP string, serverPort int, protocol string) net.Conn { } } -func Client(midiPort int, serverIP string, serverPort int, protocol string, stdinMode bool, delay int, file string, midiTuxChan chan types.MidiTuxMessage, profile string, dontControlVolume bool) { - +// TODO: this function could be cleaner with a struct +func Client(midiPort int, serverIP string, serverPort int, protocol string, stdinMode bool, delay int, midiTuxChan chan types.MidiTuxMessage, profile string, dontControlVolume bool, serialPath string, serialBaud int) { ctx, cancel := context.WithCancel(context.Background()) // read the csv csvRecords := channels.ReadFile(profile + "channels.csv") notesChan := make(chan interface{}) - stopChan := make(chan bool) drv, err := driver.New() common.Must(err) @@ -80,17 +78,13 @@ func Client(midiPort int, serverIP string, serverPort int, protocol string, stdi go http.ListenAndServe(":8081", nil) // in either mode read the serial for now - go serial.ReadSerial(notesChan) + go serial.ReadSerial(serialPath, serialBaud, notesChan) if stdinMode { go stdinClient(notesChan) } - if file == "" { - go midiClient(midiPort, delay, notesChan, in) - } else { - go player.PlayMidiFile(notesChan, file, stopChan, false) - } + go midiClient(midiPort, delay, notesChan, in) // things that would need a new connection if the connection was lost for { @@ -106,9 +100,7 @@ func Client(midiPort int, serverIP string, serverPort int, protocol string, stdi } func stdinClient(notesChan chan interface{}) { - channel := make(chan types.Raw) - //get stdin in a goroutine go func() { scanner := bufio.NewScanner(os.Stdin) @@ -160,7 +152,6 @@ func stdinClient(notesChan chan interface{}) { } func sendNotesClient(ctx context.Context, conn net.Conn, delay int, notesChan chan interface{}, csvRecords []types.MidiCSVRecord, dontControlVolume bool) { - t := timer.NewTimer(5 * time.Second) if !dontControlVolume { t.Start() @@ -268,7 +259,6 @@ func sendNotesClient(ctx context.Context, conn net.Conn, delay int, notesChan ch reconnect = true } } - case channel.ControlChange: channel := channels.CheckChannel(v.Channel(), csvRecords) if channel != 255 { @@ -349,7 +339,6 @@ func sendNotesClient(ctx context.Context, conn net.Conn, delay int, notesChan ch } func midiClient(midiPort int, delay int, notesChan chan interface{}, in midi.In) { - // listen for MIDI messages rd := reader.New( reader.NoLogger(), @@ -366,10 +355,8 @@ func midiClient(midiPort int, delay int, notesChan chan interface{}, in midi.In) // Listen for midi notes coming back so they can be printed func midiClientFeedback(cancel context.CancelFunc, conn net.Conn, writers []*writer.Writer, out midi.Out, midiTuxChan chan types.MidiTuxMessage) { - var t types.TCPMessage dec := gob.NewDecoder(conn) - for { err := dec.Decode(&t) if err == io.EOF { diff --git a/internal/player/player.go b/internal/player/player.go index 4bad6be..eed428d 100644 --- a/internal/player/player.go +++ b/internal/player/player.go @@ -3,6 +3,7 @@ package player import ( + "context" "log" "time" @@ -13,76 +14,66 @@ import ( ) // https://pkg.go.dev/gitlab.com/gomidi/midi/player#Player -func PlayMidiFile(notesChan chan interface{}, file string, stopPlayingChan chan bool, wrap bool) { - +func PlayMidiFile(ctx context.Context, notesChan chan interface{}, file string, wrap bool) { log.Println("Playing midi file:", file) - stopRoutine := make(chan struct{}) - stopBool := false player, err := player.SMF(file) if err != nil { log.Println(err) return } - go func() { - // wait for when we should stop - <-stopPlayingChan - // these GetMessages might still be around so we need to update a bool to not sound them and finish the file - stopBool = true - stopRoutine <- struct{}{} // this frees up the player resources - }() - player.GetMessages(func(wait time.Duration, m midi.Message, track int16) { - - if !stopBool { - // sleep for the wait amount - time.Sleep(wait) - // send the message to the channel if it's a noteon or noteoff - switch v := m.(type) { - case channel.NoteOn: - if wrap { - notesChan <- types.NoteOn{ - Channel: v.Channel(), - Key: v.Key(), - Velocity: v.Velocity(), - Time: time.Now(), - } - } else { - notesChan <- v + select { + case <-ctx.Done(): + return + default: + } + // sleep for the wait amount + time.Sleep(wait) + // send the message to the channel if it's a noteon or noteoff + switch v := m.(type) { + case channel.NoteOn: + if wrap { + notesChan <- types.NoteOn{ + Channel: v.Channel(), + Key: v.Key(), + Velocity: v.Velocity(), + Time: time.Now(), } - case channel.NoteOff: - if wrap { - notesChan <- types.NoteOff{ - Channel: v.Channel(), - Key: v.Key(), - Time: time.Now(), - } - } else { - notesChan <- v + } else { + notesChan <- v + } + case channel.NoteOff: + if wrap { + notesChan <- types.NoteOff{ + Channel: v.Channel(), + Key: v.Key(), + Time: time.Now(), } - case channel.ProgramChange: - if wrap { - notesChan <- types.ProgramChange{ - Channel: v.Channel(), - Program: v.Program(), - Time: time.Now(), - } - } else { - notesChan <- v + } else { + notesChan <- v + } + case channel.ProgramChange: + if wrap { + notesChan <- types.ProgramChange{ + Channel: v.Channel(), + Program: v.Program(), + Time: time.Now(), } - case channel.ControlChange: - if wrap { - notesChan <- types.ControlChange{ - Channel: v.Channel(), - Controller: v.Controller(), - Value: v.Value(), - Time: time.Now(), - } - } else { - notesChan <- v + } else { + notesChan <- v + } + case channel.ControlChange: + if wrap { + notesChan <- types.ControlChange{ + Channel: v.Channel(), + Controller: v.Controller(), + Value: v.Value(), + Time: time.Now(), } + } else { + notesChan <- v } } }) - // sleep until asked to stop - <-stopRoutine + <-ctx.Done() } diff --git a/internal/serial/serial.go b/internal/serial/serial.go index 4a29059..f64bfe4 100644 --- a/internal/serial/serial.go +++ b/internal/serial/serial.go @@ -22,8 +22,11 @@ looks like 42 decimal is the lowest value. Seeing numbers separated by about 4. */ // read the serial port assuming it's the expression pedal -func ReadSerial(notesChan chan interface{}) { - c := &serial.Config{Name: "/dev/ttyACM0", Baud: 115200} +func ReadSerial(path string, baud int, notesChan chan interface{}) { + if path == "" { + return + } + c := &serial.Config{Name: path, Baud: baud} s, err := serial.OpenPort(c) if err != nil { common.Cont(err) diff --git a/internal/server/api.go b/internal/server/api.go index 4921108..3c5515b 100644 --- a/internal/server/api.go +++ b/internal/server/api.go @@ -2,6 +2,7 @@ package server import ( "bufio" + "context" "encoding/json" "log" "net/http" @@ -42,8 +43,6 @@ func (s *Server) handleAPI() http.Handler { }) } -var stopPlayingChan = make(chan bool) - func (s *Server) apiHandlePiston(w http.ResponseWriter, r *http.Request) { // make sure it's a post if r.Method != "POST" { @@ -129,20 +128,17 @@ func (s *Server) apiStops(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusBadRequest) return } - var program int if piston == 0 { program = 7 } else { program = piston - 1 } - s.notesChan <- types.ProgramChange{ Time: time.Now(), Channel: 0, Program: uint8(program), } - s.state.SetPiston(piston, stops) } else { // otherwise if there's no piston this must be the cancel @@ -191,14 +187,15 @@ func (s *Server) handlePanicButton() { } func (s *Server) apiHandleStopButton(w http.ResponseWriter, r *http.Request) { - select { - case stopPlayingChan <- true: - time.Sleep(time.Millisecond * 500) - s.handlePanicButton() - w.WriteHeader(http.StatusOK) - default: - w.WriteHeader(http.StatusInternalServerError) + if s.stopPlaying == nil { + w.WriteHeader(http.StatusBadRequest) + return } + s.stopPlaying() + s.stopPlaying = nil + time.Sleep(time.Millisecond * 500) + s.handlePanicButton() + w.WriteHeader(http.StatusOK) } func (s *Server) apiHandlePanic(w http.ResponseWriter, r *http.Request) { @@ -213,12 +210,6 @@ func (s *Server) apiHandlePlay(w http.ResponseWriter, r *http.Request) { return } - // stop anything in progress - select { - case stopPlayingChan <- true: - default: - } - // get the filename from the body scanner := bufio.NewScanner(r.Body) if !scanner.Scan() { @@ -227,7 +218,16 @@ func (s *Server) apiHandlePlay(w http.ResponseWriter, r *http.Request) { } filename := scanner.Text() // start a player that opens the filename specified - go player.PlayMidiFile(s.notesChan, "midi/"+filename, stopPlayingChan, true) + var ctx context.Context + // stop the current player before starting a new one + if s.stopPlaying != nil { + s.stopPlaying() + time.Sleep(time.Millisecond * 500) + s.handlePanicButton() + time.Sleep(time.Second * 3) + } + ctx, s.stopPlaying = context.WithCancel(context.Background()) + go player.PlayMidiFile(ctx, s.notesChan, "midi/"+filename, true) // send a success message w.WriteHeader(http.StatusOK) } diff --git a/internal/server/server.go b/internal/server/server.go index 83796a8..3a194fa 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -36,6 +36,7 @@ type Server struct { MidiTuxChan chan types.MidiTuxMessage out midi.Out in midi.In + stopPlaying context.CancelFunc } func (s *Server) startHTTP() { diff --git a/main.go b/main.go index 8396252..f95aab8 100644 --- a/main.go +++ b/main.go @@ -24,12 +24,13 @@ func main() { list := flag.Bool("list", false, "list available ports") mode := flag.String("mode", "local", "client, server, or local (runs both)") protocol := flag.String("protocol", "tcp", "tcp only (udp not implemented yet)") - profile := flag.String("profile", "profiles/wosp/", "profiles path") + profile := flag.String("profile", "profiles/default/", "profiles path") stdinMode := flag.Bool("stdin", false, "read from stdin") delay := flag.Int("delay", 0, "artificial delay in ms") - file := flag.String("file", "", "midi file to play") dontControlVolume := flag.Bool("novolume", false, "have WFHO control client volume") dontRecord := flag.Bool("norecord", false, "continuously record midi") + serialPath := flag.String("serialPath", "", "serial port path") + serialBaud := flag.Int("serialBaud", 115200, "serial port baud rate") flag.Parse() @@ -79,13 +80,13 @@ func main() { case "server": go server.Run() case "client": - go client.Client(*midiPort, *serverIP, *serverPort, *protocol, *stdinMode, *delay, *file, midiTuxChan, *profile, *dontControlVolume) + go client.Client(*midiPort, *serverIP, *serverPort, *protocol, *stdinMode, *delay, midiTuxChan, *profile, *dontControlVolume, *serialPath, *serialBaud) case "local": // run both (unless serverIP is set, and sleep forever if *serverIP == "localhost" { go server.Run() } - go client.Client(*midiPort, *serverIP, *serverPort, *protocol, *stdinMode, *delay, *file, midiTuxChan, *profile, *dontControlVolume) + go client.Client(*midiPort, *serverIP, *serverPort, *protocol, *stdinMode, *delay, midiTuxChan, *profile, *dontControlVolume, *serialPath, *serialBaud) default: log.Fatalf("Unknown mode: %s. Must be 'server' or 'client'\n", *mode) } diff --git a/profiles/default/channels.csv b/profiles/default/channels.csv new file mode 100644 index 0000000..adb8d67 --- /dev/null +++ b/profiles/default/channels.csv @@ -0,0 +1,17 @@ +# input, output, offset +1,1,0 +2,2,0 +3,3,0 +4,4,0 +5,5,0 +6,6,0 +7,7,0 +8,8,0 +9,9,0 +10,10,0 +11,11,0 +12,12,0 +13,13,0 +14,14,0 +15,15,0 +16,16,0 diff --git a/profiles/default/stops.yaml b/profiles/default/stops.yaml new file mode 100644 index 0000000..c6c80c6 --- /dev/null +++ b/profiles/default/stops.yaml @@ -0,0 +1,87 @@ +# last bit on code is assumed to be 00 for off and 7f for on +stops: + - Swell: + - name: "Bourdon 16'" + code: "b0 63 00 b0 62 0b b0 06" + - name: "Gedackt 8'" + code: "b0 63 00 b0 62 28 b0 06" + - name: "Viola 8'" + code: "b0 63 00 b0 62 22 b0 06" + - name: "Viola Celeste 8'" + code: "b0 63 00 b0 62 23 b0 06" + - name: "Spitz prinzipal 4'" + code: "b0 63 00 b0 62 38 b0 06" + - name: "Koppel flote 4'" + code: "b0 63 00 b0 62 3f b0 06" + - name: "Nasat 2-2/3'" + code: "b0 63 00 b0 62 4c b0 06" + - name: "Blockflote 2'" + code: "b0 63 00 b0 62 54 b0 06" + - name: "Basson 16'" + code: "b0 63 00 b0 62 72 b0 06" + - name: "Trompette 8'" + code: "b0 63 01 b0 62 00 b0 06" + - name: "Tremulant" + code: "b0 63 01 b0 62 30 b0 06" + - name: "MIDI to Swell" + code: "b0 63 01 b0 62 5e b0 06" + - Great: + - name: "Principal 8'" + code: "b1 63 00 b1 62 1f b1 06" + - name: "Gedackt 8'" + code: "b1 63 00 b1 62 28 b1 06" + - name: "Octave 4'" + code: "b1 63 00 b1 62 38 b1 06" + - name: "Koppel flote 4'" + code: "b1 63 00 b1 62 3f b1 06" + - name: "Super Octave 2'" + code: "b1 63 00 b1 62 50 b1 06" + - name: "Mixture IV" + code: "b1 63 00 b1 62 64 b1 06" + - name: "Chimes" + code: "b1 63 01 b1 62 21 b1 06" + - name: "Tremulant" + code: "b1 63 01 b1 62 30 b1 06" + - name: "Swell to Great" + code: "b1 63 01 b1 62 77 b1 06" + - name: "MIDI to Great" + code: "b1 63 01 b1 62 5f b1 06" + - Pedal: + - name: "Bourdon 16'" + code: "b2 63 00 b2 62 0c b2 06" + - name: "Lieb lich gedackt 16'" + code: "b2 63 00 b2 62 0f b2 06" + - name: "Octave 8'" + code: "b2 63 00 b2 62 1f b2 06" + - name: "Gedackt 8'" + code: "b2 63 00 b2 62 28 b2 06" + - name: "Choral bass 4'" + code: "b2 63 00 b2 62 38 b2 06" + - name: "Mixture II" + code: "b2 63 00 b2 62 64 b2 06" + - name: "Basson 16'" + code: "b2 63 00 b2 62 72 b2 06" + - name: "Trompette 8'" + code: "b2 63 01 b2 62 00 b2 06" + - name: "Great to Pedal" + code: "b2 63 01 b2 62 78 b2 06" + - name: "Swell to Pedal" + code: "b2 63 01 b2 62 77 b2 06" + - name: "MIDI to Pedal" + code: "b2 63 01 b2 62 60 b2 06" + - General: + - name: "Memory B" + - name: "Add Stops" + - name: "Bass Coupler" + code: "b7 63 01 b7 62 44 b7 06" + - name: "Melody Coupler" + code: "b7 63 01 b7 62 45 b7 06" + - name: "Romantic Tuning Off" + code: "b7 63 01 b7 62 65 b7 06" + - name: "Reverb" + - name: "." + code: "b7 63 01 b7 62 31 b7 06" + - name: "Console Speakers Off" + code: "b7 63 01 b7 62 69 b7 06" + - name: "External Speakers Off" + code: "b7 63 01 b7 62 74 b7 06" diff --git a/screenshots/gui01.png b/screenshots/gui01.png new file mode 100644 index 0000000000000000000000000000000000000000..8d6efc74873e81cd6083da3dd69a1d3f8c588b7a GIT binary patch literal 98867 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 literal 0 HcmV?d00001 diff --git a/wfh-organist.service b/wfh-organist.service new file mode 100644 index 0000000..554d35f --- /dev/null +++ b/wfh-organist.service @@ -0,0 +1,13 @@ +[Unit] +Description=wfh-organist +After=network.target + +[Service] +User=pi +WorkingDirectory=/home/pi/wfh-organist +ExecStart=/home/pi/wfh-organist/wfh-organist -mode server +Restart=on-failure +RestartSec=5s + +[Install] +WantedBy=multi-user.target