BeatBlocks Documentation

Create and experience generative music on Bitcoin

Introduction

BeatBlocks is a protocol for creating and experiencing generative music directly on the Bitcoin blockchain. It enables musicians, producers, and developers to create dynamic, interactive musical compositions that can be inscribed as NFTs and played directly from the blockchain.

The protocol uses a deterministic generation algorithm with a seed-based random number generator to create unique but reproducible musical arrangements from a set of audio stems and template rules.

Key Features

Generative Audio

Create dynamic compositions with deterministic generation using seed values for reproducible arrangements.

Layer System

Organize audio stems with groups and mutex categories to control how layers interact and combine.

Audio Processing

Built-in audio processing with compressors, limiters, and stereo panning for professional sound quality.

Getting Started

Create JSON

Define stems, generation parameters, and playback settings in JSON format.

{
  "details": {
    "title": "Midnight Voyage",
    "author": "RareScrilla",
    "bpm": 128,
    "imgId": "<INSCRIPTION_ID>"
  },
  "generationConfig": {
    "seed": "0x3f7a912e",
    "groups": ["drums", "bass", "melody", "fx"],
    "mutexes": ["percussion", "basslines", "leads"]
  },
  "layers": [
    {
      "id": "kick_drum",
      "name": "Kick Drum",
      "loopLength": 2,
      "path": "/content/<INSCRIPTION_ID>",
      "volume": 1,
      "loop": true,
      "alignment": "start",
      "groups": ["drums"],
      "mutex": ["percussion"]
    }
  ]
}

Protocol Steps

1

Create BeatBlock JSON

Structure your audio stems with properties like loop settings, groups, and mutex categories in the BeatBlock JSON format.

{
  "details": {
    "title": "Midnight Voyage",
    "author": "RareScrilla",
    "bpm": 128
  },
  "layers": [
    {
      "id": "kick_drum",
      "name": "Kick Drum",
      "loopLength": 2,
      "path": "/content/<INSCRIPTION_ID>",
      "volume": 1,
      "loop": true,
      "groups": ["drums"],
      "mutex": ["percussion"]
    }
  ]
}
2

Design Generation Rules

Define generation parameters with seed values and constraints for group and mutex categories.

{
  "generationConfig": {
    "seed": "0x3f7a912e",
    "groups": ["drums", "bass", "melody", "fx"],
    "mutexes": ["percussion", "basslines", "leads"]
  }
}
3

Set Audio Properties

Configure audio properties including volume, looping, and alignment for each stem.

{
  "layers": [
    {
      "id": "synth_pad",
      "name": "Synth Pad",
      "loopLength": 8,
      "path": "/content/<INSCRIPTION_ID>",
      "volume": 0.7,
      "loop": true,
      "alignment": "end",
      "groups": ["melody"],
      "mutex": ["leads"]
    }
  ]
}
4

Inscribe Your Composition

Inscribe your BeatBlock JSON to the blockchain to create a permanent, playable musical composition.

# Command to inscribe to Bitcoin
ord wallet inscribe beatblock.json \
  --fee-rate 10 \
  --content-type application/json