Мир Автоматов (The World of Automatons)

Rill Patchbay — это не просто система управления. Это мир, в котором живут автоматы — загадочные существа, которые чувствуют окружающую среду и влияют на неё. Они общаются на языке сигналов, через сенсоры и серво воздействуют на Graph, который управляет звуком.

Примеры ниже используют аудио-сенсоры, но паттерн «автомат → сенсор → серво» применим к любой области: IoT-телеметрия, управление роботами, SCADA, визуализация CAN-шины. Единственное, что меняется — тип сенсора на входе.

Архитектура мира

┌─────────────────────────────────────────────────────┐
│                 МИР АВТОМАТОВ                         │
│  (ваше приложение на Rill)                      │
│                                                       │
│  ┌─────────────────────────────────────────────────┐ │
│  │                    PATCHBAY                       │ │
│  │  ┌─────────────────────────────────────────┐    │ │
│  │  │           АВТОМАТЫ (разум)              │    │ │
│  │  │  ┌──────────┐  ┌──────────┐  ┌──────────┐ │ │
│  │  │  │   LFO    │  │   ENV    │  │  RANDOM  │ │ │
│  │  │  └────┬─────┘  └────┬─────┘  └────┬─────┘ │ │
│  │  │       │             │             │       │ │
│  │  └───────┼─────────────┼─────────────┼───────┘ │ │
│  │          │             │             │         │ │
│  │          ▼             ▼             ▼         │ │
│  │  ┌─────────────────────────────────────────┐   │ │
│  │  │           СЕНСОРЫ (чувства)              │   │ │
│  │  │  • Слышат звук (акустические)           │   │ │
│  │  │  • Чувствуют прикосновения (физические) │   │ │
│  │  │  • Видят MIDI/CV                         │   │ │
│  │  └─────────────────────────────────────────┘   │ │
│  │                   │                              │ │
│  │                   │ Сигналы                      │ │
│  │                   ▼                              │ │
│  │  ┌─────────────────────────────────────────┐   │ │
│  │  │           СЕРВО (руки)                   │   │ │
│  │  │    Применяют сигналы к Graph       │   │ │
│  │  └─────────────────────────────────────────┘   │ │
│  └──────────────────────┬──────────────────────────┘ │
│                         │ Неблокирующие очереди      │
│                         ▼ (Command/Telemetry)        │
│  ┌─────────────────────────────────────────────────┐ │
│  │                 AUDIOGRAPH                        │ │
│  │          (внутренняя схема устройства)            │ │
│  │                                                   │ │
│  │  Осцилляторы → Фильтры → Эффекты → Микшер        │ │
│  └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘

Автоматы — разум (Automaton)

Автоматы — это разумные существа, которые принимают решения и генерируют сигналы. Они могут быть простыми (LFO, огибающая) или сложными (логические схемы, математические преобразователи).

АвтоматОписаниеКак выглядит в коде
LFOПульсирует с заданной частотойLfoAutomaton::new("vibrato", 5.0, 0.5, 0.0, LfoWaveform::Sine)
EnvelopeРеагирует на события (нажатия)EnvelopeAutomaton::adsr("amp", 0.01, 0.1, 0.7, 0.2)
Random WalkБлуждает случайным образомRandomAutomaton::walk("chaos", 10.0)
SequencerПроигрывает последовательность шаговSequencerAutomaton::new("seq", steps)
FunctionПроизвольная функция времениFunctionAutomaton::new("math", \|t\| (t * 0.5).sin())
CellularКлеточный автомат (Game of Life, Rule 30)CellularAutomaton::game_of_life("life", 16, 16)

Сенсоры — чувства (Sensors)

Чтобы автоматы могли воспринимать мир, им нужны органы чувств. Сенсоры преобразуют внешние воздействия в сигналы, понятные автоматам.

Акустические сенсоры (слышат звук)

#![allow(unused)]
fn main() {
// Слышит высоту тона
let pitch = AcousticSensor::new("pitch",
    Box::new(PitchDetector::new(44100.0)))
    .listening_to("osc1_out");

// Слышит громкость
let envelope = AcousticSensor::new("envelope",
    Box::new(EnvelopeFollower::new(44100.0)
        .with_attack(0.01)
        .with_release(0.1)))
    .listening_to("vca_out");
}

Физические сенсоры (чувствуют прикосновения)

#![allow(unused)]
fn main() {
// Ручка на передней панели
let cutoff = PhysicalSensor::knob("filter_cutoff")
    .with_range(20.0, 20000.0)
    .with_curve(KnobCurve::Logarithmic);

// Кнопка
let button = PhysicalSensor::button("arpeggio_on");
}

MIDI/CV/OSC сенсоры (видят внешний мир)

MIDI сенсоры (фича midi):

#![allow(unused)]
fn main() {
use rill_patchbay::{spawn_midi_sensor, MidiHub};

// Actor-model: поток опроса в отдельном OS-потоке, события → servo
let sensor_ref = spawn_midi_sensor(
    "keyboard",
    Box::new(MidirBackend::new("rill-midi")?),
    &system,
    servo_ref,
);
}

OSC сенсоры (фича osc):

#![allow(unused)]
fn main() {
use rill_patchbay::{spawn_osc_sensor, OscSensor};
use std::net::SocketAddr;

// Actor-model: UDP-сокет, декодирование OSC → ControlEvent::Osc
let sensor_ref = spawn_osc_sensor(
    "touchosc",
    SocketAddr::from(([0, 0, 0, 0], 9000)),
    &system,
    servo_ref,
);
}

Серво — руки (Servo)

Серво — это исполнительные механизмы автоматов. Подчиняясь законам природы (неблокирующим очередям), они передают сигналы из мира автоматов в Graph, изменяя параметры звука.

#![allow(unused)]
fn main() {
let filter_servo = Servo::new(
    "filter_servo",
    lfo_automaton,
    filter_node_id,
    "cutoff",
    ParameterMapping::Linear,
    20.0, 20000.0,
);
}

Пространство автоматов (Patchbay)

Patchbay — это место, где живут все ваши автоматы, где расположены их чувства и руки.

#![allow(unused)]
fn main() {
use rill_patchbay::prelude::*;
use rill_core::queues::MpscQueue;
use std::sync::Arc;

let cmd_queue = Arc::new(MpscQueue::with_capacity(1024));
let mut control = Engine::new(cmd_queue);

control.add_lfo(
    "vibrato", 5.0, 0.5, 0.0, LfoWaveform::Sine,
    osc_node_id, "frequency", 400.0, 480.0,
);

control.update(1.0 / 60.0);
}

Либо через Manager с отдельным потоком обновления:

#![allow(unused)]
fn main() {
let mut manager = Manager::new(
    Config::default(),
    Arc::new(MpscQueue::with_capacity(1024)),
);

manager.add_lfo_servo(
    "vibrato", 5.0, 0.5, 0.0, LfoWaveform::Sine,
    osc_node_id, "frequency",
    ParameterMapping::Linear, 400.0, 480.0,
)?;

manager.start()?;  // Автоматы начинают жить своей жизнью
}

Философия

Наши создания:

  • Обладают разумом — автоматы принимают решения
  • Имеют чувства — сенсоры воспринимают мир
  • Могут действовать — серво изменяют звук
  • Подчиняются законам природы — неблокирующие очереди связывают миры
  • Живут в своем пространстве — Patchbay объединяет всё

Создавайте своих автоматов, наделяйте их чувствами, давайте им руки и стройте удивительные миры звука.


«В каждом автомате живёт частичка души своего создателя»