← PROJECTS
Eurorack Synthesizer Module

GOLEM

Generative Oscillator with Language-Embedded Mind — ローカルLLMを完全統合した世界初のAI搭載ユーロラックモジュラーシンセサイザー

Format 28HP / 3U
DSP Granular Synthesis
AI Qwen2.5-0.5B + Silero VAD
License MIT + CERN-OHL-P v2
View on GitHub

Overview

GOLEMは、大規模言語モデル(LLM)をユーロラック規格内に完全統合した革新的なシンセサイザーモジュールです。音声コマンドによるパラメータ制御、対話的な音響生成、そして「考える」モジュラーシンセサイザーという新しいパラダイムを提案します。

外部PC不要で、モジュール単体でLLM推論と音声認識が動作。「もっと暗く」「カオスにして」といった自然言語で、グラニュラーシンセシスのパラメータをリアルタイムに制御できます。

01

完全自己完結

外部PC不要。Raspberry Pi CM4上でTinyLlama 1.1Bがローカル推論。プライバシーを保護しながらリアルタイム応答。

02

音声コマンド

内蔵PDMマイクとfaster-whisperによる音声認識。Silero VADで音声区間を検出し、自然言語で複数パラメータを同時に制御。

03

グラニュラーシンセシス

STM32H750による決定的レイテンシのDSPエンジン。60秒バッファ、最大8同時グレイン、24bit/48kHzステレオ処理。

04

オープンソース

ハードウェア設計(CERN-OHL-P v2)、ファームウェア(MIT)共にオープン。コミュニティによる拡張・改良が可能。

System Architecture

GOLEMはデュアルプロセッサ構成を採用。Linuxはリアルタイム保証ができないため、LLM推論・音声認識をCM4に、オーディオDSP・CV制御をSTM32に分離し、SPI/UARTで通信します。

 GOLEM Module
 ─────────────────────────────────────────────────────────────────

  ┌─────────────────────┐            ┌─────────────────────┐
  │   Raspberry Pi      │   SPI /    │     STM32H750       │
  │   Compute Module 4  │   UART     │                     │
  │                     │◄──────────►│   Real-time DSP     │
  │   TinyLlama 1.1B   │            │                     │
  │   Whisper.cpp       │            │   Granular Engine   │
  │   Command Parser    │            │   CV Interface      │
  │                     │            │   Audio Codec Ctrl  │
  └─────────┬───────────┘            └──────────┬──────────┘
            │                                   │
            │                        ┌──────────┼──────────┐
            ▼                        ▼          ▼          ▼
       ┌─────────┐             ┌────────┐ ┌─────────┐ ┌────────┐
       │ PDM Mic │             │MCP3208 │ │PCM5102A │ │MCP4728 │
       │SPH0645  │             │ CV ADC │ │PCM1863  │ │ CV DAC │
       └─────────┘             └───┬────┘ └────┬────┘ └───┬────┘
                                   │           │          │
                               CV Input    Audio I/O   CV Output
                               4ch ±5V    Stereo 24b   2ch 0-5V

Key Components

SBC Module
Raspberry Pi CM4 8GB
LLM推論、音声認識、高レベル制御
MCU
STM32H750VBT6
リアルタイムDSP、CV/Gate制御
SDRAM
AS4C16M16SA-6BIN
オーディオバッファ (60秒 @ 48kHz)
Audio Codec
PCM5102A + PCM1863
32bit DAC + 24bit ADC ステレオ
CV ADC
MCP3208
12bit 8ch SPI ADC
CV DAC
MCP4728
12bit 4ch I2C DAC
Microphone
SPH0645LM4H
I2S PDMマイク (音声入力)
Display
SSD1306 128x64
OLED パラメータ表示

Voice AI Interface

3段パイプライン: Silero VAD(音声検出) → faster-whisper(音声認識) → Qwen2.5-0.5B(意図解釈)。ルールベースの高速パスとLLMディープ解釈のハイブリッド方式で、低レイテンシと高い表現力を両立。

"もっと暗く"
フィルターカットオフ低下 + 密度減少
"カオスにして"
スプレッド増加 + 密度上昇
"フリーズ"
録音停止、現在のバッファを保持
"リバース"
グレイン再生方向を反転
"ゆっくり"
密度低下 + ピッチ減速
"浮遊感が欲しい"
LLMが文脈解釈 → リバーブ + ピッチ微細変調 + グレインサイズ拡大

Rule-Based Fast Path

頻出コマンドは正規表現パターンマッチで即座に応答。日本語・英語のバイリンガル対応。LLMを経由しないため、ミリ秒単位の高速レスポンス。

patterns = {
  r'(暗く|ダーク|dark)':
    {'pitch': -0.2, 'density': -5},
  r'(カオス|chaos|crazy)':
    {'spread': 0.3, 'density': 10},
  r'(フリーズ|freeze|hold)':
    {'freeze': True},
}

LLM Deep Interpretation

抽象的・詩的なコマンドはTinyLlama 1.1B(Q4_K_M量子化)で解釈。音楽的文脈を理解し、複数パラメータを同時に最適な値へ変更。

prompt = f"""You are GOLEM, an AI
embedded in a Eurorack granular
synthesizer module.

Available parameters:
- position, grain_size, density
- pitch, spread, mix, freeze

User: "{text}"
Output JSON:"""

Technical Details

Physical Specifications

Parameter Value Note
Width 28HP (142mm) Eurorack standard
Height 128.5mm (3U) Eurorack standard
Depth < 50mm Skiff-compatible target
Power +12V 500mA CM4 LLM推論時 peak
Power -12V 50mA Op-amp negative rail
CV Input 4ch ±5V 12bit resolution
CV Output 2ch 0-5V / ±5V 12bit resolution
Audio I/O Stereo, AC-coupled 24bit / 48kHz
Microphone Built-in PDM Voice command input
Display OLED 128×64 SSD1306
Controls 2 encoders + 3 buttons + 2 RGB LEDs

Granular Engine Parameters

Parameter Range CV Input Description
Position 0.0 – 1.0 CV1 バッファ内再生位置
Grain Size 10 – 500ms CV2 グレインの長さ
Density 0.1 – 50Hz CV3 グレイン発生頻度
Pitch 0.25 – 4.0 CV4 再生速度 / ピッチ
Spread 0.0 – 1.0 ランダム幅
Feedback 0.0 – 1.0 フィードバック量
Mix 0.0 – 1.0 Dry/Wet ミックス

Performance Targets

<1
ms
Audio Latency (STM32)
48
kHz
Sample Rate
24
bit
Bit Depth
<2
sec
LLM Response Time
<500
ms
Speech Recognition Delay
60
sec
Audio Buffer Length

Communication Protocol

CM4-STM32間はバイナリプロトコルで通信。SYNC + LENGTH + CMD + PAYLOAD + CRC16の固定フォーマット。パラメータID指定でfloat値を送信。

Message Format (Binary):
┌──────┬────────┬──────────┬──────────┬────────┐
│ SYNC │ LENGTH │ CMD_TYPE │ PAYLOAD  │  CRC16 │
│ 0xAA │ 1 byte │  1 byte  │ N bytes  │ 2 bytes│
└──────┴────────┴──────────┴──────────┴────────┘

SET_PARAM Payload:
┌──────────┬──────────┐
│ PARAM_ID │  VALUE   │
│  1 byte  │ float LE │
└──────────┴──────────┘

Param IDs: 0x00=position  0x01=grain_size
           0x02=density   0x03=pitch
           0x04=spread    0x05=feedback
           0x06=freeze    0x07=reverse

Code Examples

STM32 — Granular DSP Engine

libDaisy + DaisySPベースのリアルタイムグラニュラーシンセシス。Hanning窓によるグレインエンベロープ、ステレオパン、バッファフィードバックを実装。

void AudioCallback(AudioHandle::InputBuffer in,
                   AudioHandle::OutputBuffer out,
                   size_t size) {
  // Record to buffer (unless frozen)
  if (!params.freeze) {
    for (size_t i = 0; i < size; i++) {
      float inputMix = (in[0][i] + in[1][i]) * 0.5f;
      audioBuffer[writePos] =
        inputMix + (audioBuffer[writePos] * params.feedback);
      writePos = (writePos + 1) % BUFFER_SIZE;
    }
  }

  // Process grains
  for (size_t i = 0; i < size; i++) {
    float sumL = 0.0f, sumR = 0.0f;
    for (int g = 0; g < MAX_GRAINS; g++) {
      if (grains[g].active) {
        float phase = grains[g].playhead / grains[g].size;
        if (phase < 1.0f) {
          size_t idx = (size_t)grains[g].position
                       % BUFFER_SIZE;
          float sample =
            audioBuffer[idx] * GrainEnvelope(phase);
          sumL += sample * (1.0f - grains[g].pan);
          sumR += sample * grains[g].pan;
          // advance playhead ...
        }
      }
    }
    out[0][i] = in[0][i] * (1.f - params.mix)
              + sumL * params.mix / 4.f;
    out[1][i] = in[1][i] * (1.f - params.mix)
              + sumR * params.mix / 4.f;
  }
}

CM4 — LLM Command Pipeline

Python製のコマンドインタープリタ。ルールベース高速パス + LLMフォールバックのハイブリッドアーキテクチャ。パラメータ変更はシリアル通信でSTM32に送信。

class GolemBrain:
    def __init__(self):
        self.params = SynthParams()
        self.llm = LLMEngine()
        self.asr = ASREngine()
        self.comm = SerialComm()

    def process_voice_command(self, text):
        changes = self.llm.interpret_command(
            text, self.params
        )
        if changes:
            self.apply_changes(changes)

    def apply_changes(self, changes):
        for key, value in changes.items():
            current = getattr(self.params, key)
            if isinstance(current, bool):
                new_value = value
            else:
                new_value = current + value
                # Clamp to valid range
                lo, hi = LIMITS[key]
                new_value = max(lo, min(hi, new_value))

            setattr(self.params, key, new_value)
            self.comm.send_param(key, new_value)

PCB Design

4層基板構成。アナログ/デジタルGNDの単点接続によるノイズ分離。SDRAM配線長マッチング ±5mm。オーディオ回路とデジタル回路の物理的分離。

Layer Function
L1 (Top) Signal — Analog priority
L2 (Inner) GND Plane (AGND/DGND split)
L3 (Inner) Power Plane (+3.3V / +5V split)
L4 (Bottom) Signal — Digital priority
Net Width Note
Power 0.3mm+
Signal 0.15mm Min clearance 0.15mm
SDRAM 0.15mm Length matched ±5mm
USB Controlled 90Ω differential
  Board Layout (Top View)
 ┌───────────────────────────────┐
 │  [CV1][CV2][CV3][CV4][IN][OUT]│
 ├───────────────────────────────┤
 │                               │
 │  ┌─────────┐   ┌─────────┐   │
 │  │  Audio   │   │  CV I/O │   │
 │  │ WM8731   │   │ MCP3208 │   │
 │  │          │   │ MCP4728 │   │
 │  └─────────┘   └─────────┘   │
 │                               │
 │  ┌──────────┐  ┌──────────┐  │
 │  │ STM32H750│  │   CM4    │  │
 │  │ + SDRAM  │  │  Module  │  │
 │  │ + Flash  │  │          │  │
 │  └──────────┘  └──────────┘  │
 │                               │
 │  ┌───────────────────────────┐│
 │  │      Power Supply         ││
 │  │ TPS54335  AP2112  LM7905  ││
 │  └───────────────────────────┘│
 │  [══════ Euro Power ════════] │
 └───────────────────────────────┘

Development Status

Phase 1
基礎検証
COMPLETE
Phase 2
回路設計
COMPLETE
Phase 3
基板製造・実装
IN PROGRESS
Phase 4
ファームウェア
IN PROGRESS
Phase 5
統合・調整
PENDING

BOM Summary

Category Count Prototype Cost
主要IC 8 $115
電源部品 ~10 $6
アナログ部品 ~8 $4
受動部品 ~100 $8
コネクタ 15 $18
UI部品 10 $11
機構部品 5 $21
PCB (4-layer, 5pcs) 1 $30
Total ~130 parts ~$213