Skip to content

libraz/midi-sketch

Repository files navigation

midi-sketch

Version License C++17 Platform

A C++17 library for auto-generating pop music MIDI sketches. Designed for WebAssembly deployment with zero external dependencies.



Features

  • 8 Track Output: Vocal, Chord, Bass, Motif, Arpeggio, Aux, Drums, SE
  • Rich Presets: Structure (18) × StylePreset (17) × Mood (20) × Chord Progression (22)
  • Advanced Melody: Phrase-based generation, HookIntensity, MelodicComplexity, VocalStyleProfile
  • Music Theory: Voice leading, non-chord tones, chord extensions, dynamic velocity
  • Composition Styles: MelodyLead, BackgroundMotif, SynthDriven
  • Deterministic: Seed-based reproducible generation

Build

make build              # Native build
make test               # Run tests
./build/bin/midisketch_cli  # Generate output.mid

# WASM build (requires Emscripten)
source ~/emsdk/emsdk_env.sh && make wasm

Quick Example

C++ API

#include "midisketch.h"

midisketch::MidiSketch sketch;
midisketch::GeneratorParams params;
params.structure_id = 1;   // BuildUp (0-17)
params.mood_id = 0;        // StraightPop (0-19)
params.chord_id = 0;       // Canon progression (0-21)
params.seed = 12345;

sketch.generate(params);
auto midi = sketch.getMidi();       // SMF binary

JavaScript / TypeScript (WASM)

import { init, MidiSketch } from '@libraz/midi-sketch';

await init();
const sketch = new MidiSketch();

sketch.generate({
  structureId: 1,
  moodId: 0,
  chordId: 0,
  seed: 12345
});

const midiData = sketch.getMidi();  // Uint8Array
sketch.destroy();

Output Tracks

Track Channel Program Purpose
Vocal 0 Piano Melody
Chord 1 E.Piano Chords
Bass 2 E.Bass Bass line
Motif 3 Synth Lead Background
Arpeggio 4 Saw Lead Arpeggio
Aux 5 Warm Pad Sub-melody
Drums 9 - GM Drums
SE 15 - Markers

Documentation

License

This project is dual-licensed:

Which License Do I Need?

Use Case License
Evaluation / Research Apache-2.0 (free)
Non-commercial use Apache-2.0 (free)
Closed-source product Commercial (paid)
Commercial SaaS Commercial (paid)

For commercial licensing inquiries: libraz@libraz.net

Scope Notice

This project provides a core engine, not a complete music generation system.

Sound sources, vocals, and rendering are out of scope.

Author

libraz libraz@libraz.net

About

Rule-based pop MIDI generator with structure-first design

Resources

License

Apache-2.0, Unknown licenses found

Licenses found

Apache-2.0
LICENSE
Unknown
LICENSE-COMMERCIAL

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published