A scriptable MIDI event processor.

Related tags

Game development mep
Overview

mep

Introduction

mep is a scriptable midi event processor.

It uses koto scripts to process incoming midi events.

I/O

Every instance of mep introduces a new virtual midi-in and a virtual midi-out port for the incoming messages to be processed and the processed messages to be sent out.

The default naming for these virtual ports are mep_in and mep_out.

If multiple instances of mep are running, every additional instance's virtual ports are suffixed with an increasing number such as mep_in #2,mep_out #2,mep_in #3,mep_out #3 and so on..

One can name an instance's port by using the --port <port name> option when running mep.

For example, mep --port wakkanai would create wakkanai_in and wakkanai_out virtual ports.

Scripts

mep would check for .mep folder in your home directory and shows you an enumerated list of all files (scripts) in the folder with the extension of .koto.

If no .mep folder is found on startup, it will create one and fill it with bunch of example scripts.

If .mep folder exists but empty, mep will notify you about this, ask you to add some scripts and exit.

As soon as you select a script from the enumerated list by entering the index number and pressing enter, the virtual ports will be created and the event processing will begin.

Editing

When an instance of mep is running. .mep folder is being watched for changes. Editing your scripts will be reflected immediately.

Look for info in the koto main repository to see if there is syntax highlighting available for your editor.

Some answers to possible questions

  • What are koto scripts?

    Koto is a simple, expressive, embeddable programming language, made with Rust.

    Please visit the main repository for more information.

  • How to process midi with koto?

    I've written a midi library (toolkit) for koto. Koto scripts which are run by mep have access to this library.

    In the example scripts you will notice import midi statement in the begining.

  • Are there any examples?

    Please check the example_scripts in the repository to see some working examples.

  • How may I see what is available in koto_midi library to use?

    Currently if you visit the repository and follow the instructions to run tests, a complete API will be printed to stdout. You can take this as a reference. For sure in the future a more ergonomic way will be introduced.

  • How may I debug my scripts?

    Errors in your scripts would navigate you to a new screen and show you the koto error. mep will let you know which script caused the error and wait for changes.

    After you fixed your erroring script in ~/.mep folder, it will move to the screen where you can choose your scripts again.

    Please check todo section for some exceptions to this behavior.

Building

Building mep is as simple as running cargo build or cargo build --release if you have rust in your system installed.

mep uses the nightly channel or rust.

Running

To run mep after building you may run cargo run if you have rust in your system installed. You may add command line options by running cargo run -- <your-command-line-options>. To see the list of available command line options you may run cargo run -- --help.

Alternatively if you run cargo build and then navigate to <repository-root>/target/debug you may find the mep binary and run it or if you run cargo build --release then the binary will be in <repository-root>/target/release.

Extra

mep also exposes random library from koto. You may visit koto main repository to understand how to use it.

You may bring it in scope by writing import random in koto scripts.

Last words

Currently mep is in early development stage and not stable. A release will be made when required stability is achieved.

Todo

  • Do not panic in runtime_error! macros. Fall back to watcher and notify user to fix the script.
  • Improve code quality.
  • Add tests where possible.
You might also like...
A Supra + Pandoc post-processor for footnote cross-references.

AutoCref AutoCref is a Supra and Pandoc post-processor that turns footnote cross-references in a Word document into automatically updated fields. Abou

A modular command line digital signal processor built in rust

Ever wanted to pipe raw audio samples around in the terminal to impress your friends at a party? Well then, you've come to the right place.

tpp (Tera Pre-Processor) is a versatile CLI (Command Line Interface) tool crafted for preprocessing files using the Tera templating engine.

tpp (Tera Pre-Processor) is a versatile CLI (Command Line Interface) tool crafted for preprocessing files using the Tera templating engine. Drawing inspiration from pre-processors like cpp and gpp, tpp is the next evolution with its powerful expressive toolset.

Functional command-line JSON processor
Functional command-line JSON processor

rq rq is a tiny functional language with which you can manipulate JSON. Basically, it is (an insignificant subset of!) jq, written in Rust. NOTE: This

Utilities for interacting with the Behringer X-Touch Mini MIDI controller

xtouchmini Collection of utilities for interacting with the Behringer X-Touch Mini MIDI controller, including reading button/knob/fader inputs and sen

Midnote is a terminal application that reads a MIDI file and displays you its notes bar-by-bar, while playing it.

MIDNOTE Midnote is a terminal application that reads a MIDI file and displays you its notes bar-by-bar, while playing it. Goals As a blind musician my

Cross-platform realtime MIDI processing in Rust.

midir Cross-platform, realtime MIDI processing in Rust. Features midir is inspired by RtMidi and supports the same features*, including virtual ports

Small music theory library with MIDI capabilities written in Rust
Small music theory library with MIDI capabilities written in Rust

mumuse Small music theory library with MIDI capabilities written in Rust (wip). Examples Creating notes and transpositions // Declare Note from &str l

MIDI-controlled stereo-preserving granular-synthesizer LV2 plugin

Stereog "Stereog" rhymes with "hairy dog." Stereog is a MIDI-controlled stereo-preserving granular synthesizer LV2 plugin. It is experimental software

Tools for working with MIDI files - written by All the Music LLC for musicians.

Tools for Generating and Working with MIDI Files NOTICE: This repo is under construction and is not ready for use. Once it is ready, and the other rep

Map the Teenage Engineering OP-1 MIDI output to keyboard commands

OP1NPUT Maps the Teenage Engineering OP-1's MIDI output to keyboard keypresses so it may be used as a game controller. This exists because many of the

Encrypt and decrypt files by playing melodies on your MIDI keyboard.

midicrypt Encrypt and decrypt files by playing melodies on your MIDI keyboard. Written in Rust. ❯ ./midicrypt -h midicrypt 0.1.0 NINNiT Encrypts and D

🎹 Simple MIDI note repeater plugin (VST3/CLAP).

⏱️ Clockwork A simple MIDI note repeater plugin, written in Rust. 🎬 Showcase: (turn on audio) clockwork-showcase.mp4 📖 Manual: The user manual can b

Grid-based drum sequencer plugin as MIDI FX in CLAP/VST3 format
Grid-based drum sequencer plugin as MIDI FX in CLAP/VST3 format

dr-seq Grid-based drum sequencer plugin as MIDI FX in CLAP/VST3 format. WARNING: This project is in a very early state. So there is no guarantee for a

Drumsthesia is a simple software that helps you to learn how to play the drums (or midi controllers).
Drumsthesia is a simple software that helps you to learn how to play the drums (or midi controllers).

Drumsthesia A shameless copy of Neothesia adapted for e-Drums. Youtube Video Binaries for MacOS, Linux (untested) and Windows (untested). Download Scr

A small program that converts midi files to RPE (Re: Phigros Edit) Charts

Midi to RPE(Re: Phigros Edit) chart converter $ mid2json --help Usage: mid2json [OPTIONS] MIDI_PATH Arguments: MIDI_PATH Name of the input fil

Polyrhythmically-inclinded Midi Drum generator
Polyrhythmically-inclinded Midi Drum generator

Polyrhythmix Polyrhythmix (Poly) is a command-line assistant designed to generate MIDI files from the description of drum parts. It provides a conveni

Build custom songs for Pokémon Mystery Dungeon: Explorers of Sky from Soundfonts and MIDI files

skysongbuilder A tool to build custom songs for Pokémon Mystery Dungeon: Explorers of Sky from Soundfonts and MIDI files Features: Optimizations down

Minimalist multi-track audio recorder which may be controlled via OSC or MIDI.
Minimalist multi-track audio recorder which may be controlled via OSC or MIDI.

smrec Minimalist multi-track audio recorder which may be controlled via OSC or MIDI. I did this because I needed a simple multi-track audio recorder w

Owner
Ali Somay
Musician / Software Engineer / Hardware Electronics Enthusiast
Ali Somay
Very simple, efficient, task oriented, low cognitive, Midi player and jukebox for midi instruments

Midi and Virtual Book jukebox Player A cross-platform MIDI and virtual book jukebox player. It only includes the necessary functionalities to play MID

Barrel Organ Discovery 4 Jun 29, 2023
A toy event store and event messaging system.

RDeeBee Follow this blog series for more details on this project. This system is inspired by Martin Kleppman's arguments that Event Sourcing system an

null 4 Nov 6, 2022
Scriptable network authentication cracker

badtouch badtouch is a scriptable network authentication cracker. While the space for common service bruteforce is already very well saturated, you ma

null 343 Dec 31, 2022
A scriptable discord bot (WIP)

Status This project is currently a VERY EARLY WORK IN PROGRESS. Contact me on discord for more details: Jonas747#0001 (105487308693757952) BotLoader (

null 26 Dec 21, 2022
Authoscope is a scriptable network authentication cracker.

authoscope authoscope is a scriptable network authentication cracker. While the space for common service bruteforce is already very well saturated, yo

null 342 Dec 10, 2022
Scriptable tool to read and write UEFI variables from EFI shell. View, save, edit and restore hidden UEFI (BIOS) Setup settings faster than with the OEM menu forms.

UEFI Variable Tool (UVT) UEFI Variable Tool (UVT) is a command-line application that runs from the UEFI shell. It can be launched in seconds from any

null 4 Dec 11, 2023
DO processor

do-core1 The do-core1 is a simple processor architecture, mostly for educational purposes. It aims at being a support for system programming and compu

null 10 Feb 6, 2022
SpringQL: Open-source stream processor for IoT devices and in-vehicle computers

What is SpringQL? SpringQL is an open-source stream processor specialized in memory efficiency. It is supposed to run on embedded systems like IoT dev

SpringQL 25 Dec 26, 2022
RustSBI support on SiFive FU740 board; FU740 is a five-core heterogeneous processor with four SiFive U74 cores, and one SiFive S7 core

RustSBI 在 HiFive Unmatched 主板的支持软件 这个项目的目的是在SiFive HiFive Unmatched主板上支持RustSBI。 RustSBI是一个引导程序环境;主板上电时,RustSBI将会先行启动,而后,它将会找到一个可引导的操作系统,引导启动这个操作系统。 在

RustSBI 15 Dec 1, 2022
Jq - Command-line JSON processor

jq jq is a lightweight and flexible command-line JSON processor. , Unix: , Windows: If you want to learn to use jq, read the documentation at https://

Stephen Dolan 23.9k Jan 4, 2023