JavaScript library for parsing Dirtywave M8 files, complete with a CLI for interacting with M8 files.

Overview

m8-js

This repository contains a JavaScript library for parsing Dirtywave M8 files, as well as a CLI for interacting with M8 files. The hopes are not to provide yet another UI for M8 files, or to create any sort of competing product, but to provide programmatic access to the M8 resources stored in the M8 files for things like third-party features (things that maybe M8 doesn't support itself, but you find useful) and utilities.

Current Status

As of the time of writing this, parsing M8 project/song files is supported programmatically and via the CLI. The CLI has a command that should allow rendering ever M8 screen which is really for easily inspecting your files, and to validate the API since there are no formal tests (yet). Also, this is being written as the initial code dump is being created so the code needs some cleanup, and there are a plethora of TODO items.

The plan is to update the API and CLI to work with all M8 Files (instrument files, scale files, theme files, etc.) and to create M8 resources for writing tests. I could also see there being some useful features around finding/listing M8 objects using filters of sorts. Lastly, this work started with the 2.5.1 firmware and was tested using 2.6.0. Immediate work will begin on adding support for all changes since 2.6.0.

Installation

Global

Installation is performed by issuing the following command:

npm install m8-js --global

Once you do this, m8 should be available.

Development/Local

Or you can use a local development installation by cloning this repository and installing its dependencies via npm install.

Once you do this, ./bin/m8 should be available.

CLI Usage

m8 --help or m8 help should give you enough of a starting point for now. Just know that all commands support the --help flag for command-specific help.

Thanks

When I initially started this effort, the only resource I could find to start this journey was this: https://gist.github.com/ftsf/223b0fc761339b3c23dda7dd891514d9 Using this, a hex editor and some time on the Dirtywave M8 Discord, this project came to life. Thanks @impbox!

You might also like...

Type safe library for interacting with Mindbody's Public API (v6) and Webhooks

Mindbody API Type safe library for interacting with Mindbody's Public API (v6) and Webhooks ⚠️ Read before installing This library is typed according

Dec 9, 2022

JavaScript API based capstone project using TVmaze API for displaying and interacting with items from the data base.

JavaScript API based capstone project using TVmaze API for displaying and interacting with items from the data base.

Yuriy Chamkoriyski & Bonke Gcobo Javascript capstone project API-based webapp from Module 2 at Microverse Wireframe requirements The Home Page low fid

May 30, 2022

Runtime object parsing and validation with static TypeScript typing.

TypeParse Runtime object transformation, parsing and validation with inferred static TypeScript typing. Install Using npm npm install typeparse Using

May 5, 2022

A TOML parsing tool written in Rust for Node.js

@daydog/toml A TOML parsing tool written in Rust for Node.js Installation @daydog/toml is available via npm. npm install @daydog/toml Usage parse You

Jul 20, 2022

Command-line toolkit for parsing, compiling, transpiling, optimizing, linking, dataizing, and running EOLANG programs

First, you install npm and Java SE. Then, you install eolang package: $ npm install eolang Then, you write a simple EO program in hello.eo file in th

Nov 17, 2022

Utilities for parsing and manipulating LaTeX ASTs with the Unified.js framework

unified-latex Monorepo for @unified-latex packages. These packages provide a JS/TypeScript interface for creating, manipulating, and printing LaTeX Ab

Dec 27, 2022

Enhanced interval features for Node.js, such as promisified interval and human readable time parsing.

Interval-next Interval-next is a package that extends Javascript's built-in setInterval() capabilities. You have a plain and promisified interval meth

Jul 28, 2022

⚔️ Peripheral contracts for interacting with Saber.

⚔️ Peripheral contracts for interacting with Saber.

saber-periphery Peripheral contracts for interacting with Saber. Programs Package Description Version Docs add-decimals Wraps another token to give it

Dec 12, 2022

💻 ssher.vim is interacting remote machines(only linux) through ssh connection

💻 ssher.vim is interacting remote machines(only linux) through ssh connection

Feb 21, 2022
Comments
  • Add support for writing M8 files

    Add support for writing M8 files

    Without the ability to write M8 files, this library isn't very useful. While this isn't technically hard, there are places in the M8 files (specifically the Song file) where data is unknown (but not empty) and where data is unused. Updating the parsers to record this data so we can write the data back exactly as we found it will be required. So improvements to the parser and parser debugging (#1) will be required.

    opened by whitlockjc 1
  • Import/output songs/instruments to JSON via CLI

    Import/output songs/instruments to JSON via CLI

    Hello, thanks for the great work! One feature that would be useful for people who are not good JS programmers like me is to export songs (.m8s) and instruments (.m8i) to JSON from the command line. That way it would be possible to say, export a song to JSON, manipulate the JSON data in some other language, and then convert that back into .m8s.

    I'm imagining something like m8 song export foo.m8s foo.json and m8 song import foo.json foo.m8s, and analogous commands for .m8i.

    opened by dimatura 1
  • Investigate M8-style

    Investigate M8-style "amount" bars

    There are a number of places in the M8 UI where a "bar" is used to show the amount of something. For example, in the MIDI OUT instrument, these bars are to the right of most of the CC:VAL values. The initial thought was to use Unicode Block Elements to achieve this but upon implementation, the UX was pretty poor. We may need to leave these our or deviate from the M8 UI and have some sort of percentage UI element that doesn't look 100% like M8's UI.

    opened by whitlockjc 1
  • Add

    Add "debug" support

    It would be nice to know exactly where data is read from the M8 files to help other tooling authors to know the structure of these M8 files. The easiest way to do this would be to use the debug module to debug these details. Another thing we should do is to add a skip method to the M8 file reader to help in identifying where data is skipped because it's unknown or unused.

    opened by whitlockjc 0
Owner
Jeremy Whitlock
Jeremy Whitlock
Framework agnostic CLI tool for routes parsing and generation of a type-safe helper for safe route usage. 🗺️ Remix driver included. 🤟

About routes-gen is a framework agnostic CLI tool for routes parsing and generation of a type-safe helper for safe route usage. Think of it as Prisma,

Stratulat Alexandru 192 Jan 2, 2023
A parsing library for CircleCI configuration files, powered by the CircleCI Config SDK

CircleCI Config Parser A parsing library for CircleCI configuration files, powered by the CircleCI Config SDK Used by the CircleCI Visual Config Edito

CircleCI Public 16 Dec 4, 2022
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023
This is a Google Apps Script library for parsing the form object from HTML form and appending the submitted values to the Spreadsheet.

HtmlFormApp Overview This is a Google Apps Script library for parsing the form object from HTML form and appending the submitted values to the Spreads

Kanshi TANAIKE 18 Oct 23, 2022
Library for interacting with RMM protocol through ethers.js.

?? rmm-ethers Easily connect and transact with RMM protocol. ?? Features ?? Deploy RMM protocol ⚡️ Easily connect to an RMM deployment ?? Create RMM p

Primitive 14 Nov 13, 2022
📡Usagi-http-interaction: A library for interacting with Http Interaction API

?? - A library for interacting with Http Interaction API (API for receiving interactions.)

Rabbit House Corp 3 Oct 24, 2022
Compact library for interacting with Ankr Scan Multichain API.

ankrscan.js Compact SDK for interacting with Ankr Scan MultiChain JSON-RPC API. SDK supports following MultiChain methods: getLogs - logs matching the

Ankr 23 Jan 3, 2023
A Deno library for interacting with the mouse 🖱️ keyboard ⌨️ and screen 💻

A Deno library for interacting with the mouse ??️ keyboard ⌨️ and screen ?? . Litebot provides a simple API for creating kbm events, macros, & working with displays. Litebot leverages Deno's FFI to allow speedy low level control in C & C++ while having a typescript API exposed to the user.

Tyler Laceby 10 Aug 30, 2022