Pigiron is a MIDI routing utility with an extensive OSC interface.

Related tags

Audio & Music osc midi
Overview

Pigiron README

(c) 2021 Steven Jones

Pigiron is a fully configurable MIDI routing utility written in Go. It includes a MIDI file player and has a comprehensive OSC interface.

The primary Pigiron object is called an Operator. Each Operator has zero or more MIDI inputs and zero or more MIDI outputs. When an Operator receives a MIDI message, it determines if the message should be forwarded to it's outputs. An Operator may also modify the message prior to re-sending it.

Operator Types

The following Operators are currently available:

  • ChannelFilter - filter events by MIDI channel.
  • Distributor - transmit events over several MIDI channels.
  • MIDIInput - wrapper for MIDI input device.
  • MIDIOutput - wrapper for MIDI output device.
  • MIDIPlayer - MIDI file player.
  • Monitor - print incoming MIDI messages.
  • Transposer - manipulate MIDI data bytes.
  • Delay - Repeat notes with optional key mapping (experimental & unstable).

There are three distinct ways to interact with Pigiron.

  1. Remotely via OSC messages.
  2. Manually enter commands at terminal prompt.
  3. Load a batch file of commands.

The command syntax for these modes are nearly identical. The only real difference is that the command 'foo' at the terminal prompt and in a batch file is entered directly, while as an OSC message it is prefixed with the application OSC id (by default /pig/).

foo        command at terminal or in batch file.
/pig/foo   as OSC message.

Getting help

On startup Pigiron displays a command prompt (by default /pig: ). For a list of help topics enter

/pig:  help topics

For a list of commands enter

/pig: q-commands

For details on how OSC messages are handled, enter

/pig: help OSC

In general commands which begin with 'q-' (for query) returns some information.

The resources/batch directory contains the batch file 'example' which illustrates several commands to set up a basic MIDI process. It is heavily annotated.

Dependencies

go 1.16
github.com/pelletier/go-toml
github.com/rakyll/portmidi
github.com/hypebeast/go-osc

Installation

Build Pigiron

In a terminal navigate into the pigiron directory and enter

[pigiron]$ go build .

Install

Either copy the pigiron executable to a location included on $HOME/$PATH, typical locations would be ~/.local/bin or ~.bin

Alternately you may install with the go command.

[pigiron]$ go install 

Configuration Directory

  • Linux : ~/.config/pigiron/
  • Windows : To be determined.
  • OSX : To be determined.

The structure within the .config/pigiron/ directory is:

 ~/.config/
     |
     +--pigiron/
          |
          +-- config.toml
          +-- log
          |
          +-- batch/
          |
          +-- resources/
                |
                +-- help/
                +-- testFiles/

Within .config/pigiron/ create the batch directory and either simlink or copy the resources directory from the Pigiron project. Pigiron can operate without the resources directory but help will not be available and some unit test will fail.

Command Line Options

Pigiron has the following command line options:

--config filename    # Use alternate configuration file.
--batch filename     # Load named batch file.

In general filenames within Pigiron may be prefixed with one of two special characters.

'~/foo' names the file foo relative to the user's home directory.
'!/foo' names a file relative to the configuration directory.

GUI?

Pigiron is strictly a terminal based, however due to it's OSC interface it should be relatively easy to write a GUI client app.

You might also like...
Open Sound Control (OSC) library for Golang. Implemented in pure Go.

GoOSC Open Sound Control (OSC) library for Golang. Implemented in pure Go. This repository is a heavily modified fork of the original go-osc. Please c

🥦 Simple OSC command executor

brOSColi - simple OSC command executor Broscoli is a simple executor of local commands, triggered by OSC messages. It can be used to run local scripts

EasyMidi is a simple and reliable library for working with standard midi file (SMF)

EasyMidi EasyMidi is a simple and reliable library for working with standard midi file (SMF). Installing A step by step series of examples that tell y

Software modular synthesizer with Midi support

go-modular A software modular synthesizer with Midi support. !! Warning: High amplitude sounds can cause serious ear damage. Lower your headphone volu

Tracker-style microtonal MIDI sequencer

Faunatone A tracker-style microtonal MIDI sequencer. Since MIDI does not have any widely-implemented native support for microtonality, Faunatone uses

HIDI - flexible HID to MIDI translation layer
HIDI - flexible HID to MIDI translation layer

This application is a translation layer between HID devices like keyboards or gamepads and MIDI interface

MIDI tunneling through BGP, for times when you want to broadcast your music instead of your IP packets.

BGPiano MIDI tunneling through BGP, for times when you want to broadcast your music instead of your IP packets. Usage bgpiano-send and bgpiano-recv Po

HARAQA - High Availability Routing And Queueing Application
HARAQA - High Availability Routing And Queueing Application

haraqa is designed to be a developer friendly, scalable message queue for data persistence and real-time data streaming between microservices. Haraqa provides high-throughput, low-latency, fault-tolerant pipelines for architectures of any size.

SplitVPN - Split Internet and VPN routing

SplitVPN - Split Internet and VPN routing

simulate linkstate algorithm for routing

for final project of computer-network course in SBU university (spring 2021) we implemented a Link-state simulation in go.

Blue is a lightweight cloud-native gateway solution to handle millions of routing endpoints with a large number of connections.
Blue is a lightweight cloud-native gateway solution to handle millions of routing endpoints with a large number of connections.

Blue is a lightweight cloud-native gateway solution to handle millions of routing endpoints with a large number of connections.

Envoy file based dynamic routing using kubernetes config map

Envoy File Based Dynamic Routing Config mapを使用してEnvoy File Based Dynamic Routingを実現します。 概要 アーキテクチャとしては、 +----------+ +--------------+ +-----------

LNC is a lightning network capital management tool built for routing nodes.

LNC is a lightning network capital management tool built for routing nodes.

Vehicle Routing Problem Solver in Go

VehicleRoutingProblem Vehicle routing problem heuristic in Go Tests To run the test simply go with go test -v ./... Compile go build Run without compi

Auth Middleware for session & white-listed routing

Auth Middleware for session & white-listed routing

An HTTP request routing benchmark suite for Go.

Go HTTP Request Routing Benchmark An HTTP request routing benchmark suite for Go. Results goos: linux goarch: amd64 pkg: github.com/aofei/go-http-requ

The Consul API Gateway is a dedicated ingress solution for intelligently routing traffic to applications running on a Consul Service Mesh.

The Consul API Gateway is a dedicated ingress solution for intelligently routing traffic to applications running on a Consul Service Mesh.

A minimalist HTTP request routing helper for Go.

R2 A minimalist HTTP request routing helper for Go. The name "R2" stands for "Request Routing". That's all, R2 is just a capable little helper for HTT

A minimalist HTTP request routing helper for Go.

A minimalist HTTP request routing helper for Go.

Owner
Steven Jones
Steven Jones
🥦 Simple OSC command executor

brOSColi - simple OSC command executor Broscoli is a simple executor of local commands, triggered by OSC messages. It can be used to run local scripts

Holoplot GmbH 13 May 2, 2022
EasyMidi is a simple and reliable library for working with standard midi file (SMF)

EasyMidi EasyMidi is a simple and reliable library for working with standard midi file (SMF). Installing A step by step series of examples that tell y

null 38 Sep 21, 2022
Tracker-style microtonal MIDI sequencer

Faunatone A tracker-style microtonal MIDI sequencer. Since MIDI does not have any widely-implemented native support for microtonality, Faunatone uses

null 21 Oct 25, 2022
HIDI - flexible HID to MIDI translation layer

This application is a translation layer between HID devices like keyboards or gamepads and MIDI interface

Sławomir Kur 12 Nov 18, 2022
MIDI tunneling through BGP, for times when you want to broadcast your music instead of your IP packets.

BGPiano MIDI tunneling through BGP, for times when you want to broadcast your music instead of your IP packets. Usage bgpiano-send and bgpiano-recv Po

James Swineson 16 Jun 9, 2022
Simple cli utility to show bitrate/samples of flac files in a directory

flac-specs Simple cli utility to show bitrate/samples of flac files in a directory I needed a quick little utility that would look at the flac files i

Kevin Foss 0 Dec 14, 2021
Self-hosted music streaming server 🎶 with RESTful API and Web interface

Self-hosted music streaming server ?? with RESTful API and Web interface. Think of it as your very own Spotify!

Doychin Atanasov 448 Nov 11, 2022
A utility for sending and listening for OSC messages.

A simple utility to send and listen for OSC messages. It can also be used to send MIDI messages.

Tim Thompson 3 Mar 5, 2022
An extensive Philips Hue client library for Go with an emphasis on simplicity

Huego An extensive Philips Hue client library for Go with an emphasis on simplicity. It is designed to be clean, unbloated and extensible. With Huego

Amir Mofasser 223 Nov 17, 2022
An extensive, fast, and accurate command-line image dithering tool.

didder is an extensive, fast, and accurate command-line image dithering tool. It is designed to work well for both power users as well as pipeline scripting. It is backed by my dithering library, and is unique in its correctness and variety of dithering algorithms.

makeworld 162 Nov 21, 2022