ianhomer / odin

Sequencer to enhance live musical performances, jamming and compositions
Other
5 stars 0 forks source link
midi music sequencer

odin

The Odin sequencer enhances a live musical performance by musicians. This includes the following use cases :

Performances can be written in a DSL that describes the semantics and specificsof a performance describing chord progressions and musical hints, along with specific sound delivery.

The system will also support experiments involving how machines can enhance live musical performances and how musicians can act as conductor to the machine, perhaps letting go of the reigns entirely.

Over time the system will drive other aspects of a performance beyond sound and will take direction from machine learning.

Release Notes

The first release of this system will focus on driving live music performance via MIDI and will be installable on a Raspberry Pi to encourage portability and reduced costs.

Build

mvn package
java -jar odin-server/target/odin-server-1.0-SNAPSHOT.jar

or run with developer benefits, e.g. web template reloading

(cd odin-server && mvn spring-boot:run)

Docker

docker-compose up -d

or with rebuild

docker-compose up -d --build
docker-compose build --no-cache odin-frontend

Interact with volumes

To run interact container

docker run --rm -it --name admin -v=odin_web-volume:/var/lib/web alpine

The copy the files into the volume

docker cp src/main/resources/static/. admin:/var/lib/web/

Or in one go

docker run --name admin -v=odin_web-volume:/var/lib/web alpine true   && \
docker cp src/main/resources/static/. admin:/var/lib/web/             && \
docker rm admin

Android Application

See also the Odin Android App.

Raspberry PI

Installation

Add "my.pi" domain name to /etc/hosts

On my.pi create .ssh directory

ssh pi@my.pi
cd ~ && install -d -m 700 ~/.ssh

From local machine deploy SSH Key

cat ~/.ssh/id_rsa.pub | ssh pi@my.pi 'cat >> .ssh/authorized_keys'

On my.pi

sudo mkdir /opt/odin
sudo chown pi /opt/odin

From local machine deploy jar

scp odin-server/target/odin-server-1.0-SNAPSHOT.jar pi@my.pi:/opt/odin

On my.pi

( cd /opt/odin ; java -jar odin-server-1.0-SNAPSHOT.jar )

Access Server

Root

http://localhost:8080/

Health check

http://localhost:8080/health

Manual Testing

Run the MIDI playground script

mvn exec:java

Lots of combinations and choice exist to generate and receive MIDI signals, for basics I use :

For performance I use a Nord Electro 5 and Nord Lead 4.

Static Code Analysis

Sonar

Install sonar and start sonar locally

sonar console

And analyse with sonar

mvn clean verify sonar:sonar

And view sonar report at http://localhost:9000/

JavaScript

Karma

cd odin-server
./node_modules/karma/bin/karma start karma.conf.ci.js

ESlint

./node_modules/eslint/bin/eslint.js src/main/js/*.js

Server Development with Hot Deployment

Start spring boot server

(cd odin-api && mvn spring-boot:run&)

Then open odin-frontend/public/index.html in browser

Java code changes can be applied by rebuilding in IDEA with ⌘ fn-F9. The server will restart with new classes. Front end changes can be made direct will take immediate effect.

Stop spring boot server

fg

And ctrl-c.

Testing

To test a single test from command line

mvn test -Dtest=LogCaptureTest -pl log-capture/

Site

Generate site, including javadocs with

mvn site

Debug

cd odin-server