rill_patchbay/lib.rs
1//! # Rill Patchbay — Маршрутизация событий и автоматизация
2//!
3//! `rill-patchbay` является эволюцией `rill-automation` из версии 0.2.0,
4//! объединённой с функциональностью маппинга из `rill-control`.
5//!
6//! ## Основные компоненты
7//!
8//! - **Автоматы** — генеративные источники сигналов (LFO, огибающие, секвенсоры)
9//! - **Сервоприводы** (в модуле `control`) — связь автоматов с параметрами узлов
10//! - **Маппинги** — связь внешних событий (MIDI/OSC) с параметрами
11//! - **Сенсоры** — источники событий из внешнего мира
12//! - **Менеджер** — центральный координатор для двухпоточной архитектуры
13//!
14//! ## Архитектура
15//!
16//! ```text
17//! ┌─────────────────────────────────────────────────────────────┐
18//! │ ПОТОК УПРАВЛЕНИЯ │
19//! │ │
20//! │ ┌─────────────────────────────────────────────────────┐ │
21//! │ │ PatchbayManager │ │
22//! │ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
23//! │ │ │ Automata │ │ Servos │ │ Mappings │ │ │
24//! │ │ └────────────┘ └────────────┘ └────────────┘ │ │
25//! │ │ │ │ │ │
26//! │ │ ▼ ▼ │ │
27//! │ │ ┌──────────────────────────┐ │ │
28//! │ │ │ RtQueue<ParameterCommand>│ │ │
29//! │ │ └──────────────────────────┘ │ │
30//! │ └─────────────────────────────────────────────────────┘ │
31//! │ │ │
32//! │ │ неблокирующая очередь │
33//! │ ▼ │
34//! │ ┌─────────────────────────────────────────────────────┐ │
35//! │ │ АУДИОПОТОК │ │
36//! │ │ (rill-graph / rill-io) │ │
37//! │ └─────────────────────────────────────────────────────┘ │
38//! └─────────────────────────────────────────────────────────────┘
39//! ```
40
41#![warn(missing_docs)]
42#![deny(unsafe_code)]
43
44// =============================================================================
45// Внешние зависимости
46// =============================================================================
47
48// Реэкспорты из rill-core
49pub use rill_core::prelude::*;
50pub use rill_core::queues::RtQueue;
51pub use rill_core::{NodeId, ParamValue, ParameterId, PortId};
52
53// =============================================================================
54// Публичные модули
55// =============================================================================
56
57/// Автоматы — генеративные источники управления
58pub mod automaton;
59
60/// Управление и маппинг событий
61pub mod control;
62
63/// Менеджер патчбэя — центральный координатор
64pub mod manager;
65
66/// Сенсоры — источники событий из внешнего мира
67pub mod sensor;
68
69/// Утилиты и вспомогательные функции
70pub mod utils;
71
72/// Реестр именованных функций для сериализации
73pub mod function_registry;
74
75/// Стратегии управления автоматами
76pub mod strategy;
77
78/// PortCombiner — комбинирование автомата и UI на порт
79pub mod port_combiner;
80
81/// Обёртка Automaton в green thread (tokio task)
82pub mod automaton_task;
83
84/// Референсный оркестратор — high-level API над green threads
85pub mod engine;
86
87/// Parameter-lock step sequencer
88pub mod sequencer;
89
90/// DOT patchbay visualization (Graphviz)
91#[cfg(feature = "serde")]
92pub mod dot;
93
94/// Сериализация конфигурации управления
95#[cfg(feature = "serde")]
96pub mod document;
97
98#[cfg(feature = "serde")]
99pub use document::PatchbayDocument;
100
101// =============================================================================
102// Реэкспорты для удобства
103// =============================================================================
104
105// Selective re-exports
106pub use automaton::{
107 EnvelopeAutomaton, EnvelopeStage, EnvelopeType, FunctionAutomaton, LfoAutomaton, LfoWaveform,
108 PlayMode, Range, SequencerAutomaton, StatefulFunctionAutomaton, Step, SyncMode,
109};
110pub use control::{
111 midi_cc, osc_address, AnyServo, Automaton, BoxedServo, ControlEvent, EventPattern, Mapping,
112 NoAction, OscSurface, OscSurfaceEntry, ParameterCommand, ParameterMapping, PatchbayControl,
113 Servo, Target, Transform,
114};
115pub use manager::PatchbayManager;
116pub use strategy::{ConflictStrategy, ControlStrategy, UiCommand};
117pub use port_combiner::{PortCombinerHandle, spawn_combiner};
118pub use automaton_task::spawn_automaton_task;
119pub use engine::PatchbayEngine;
120
121// Sequencer re-exports
122pub use sequencer::{
123 ParameterTarget, Pattern, SequenceStep, SequencerHandle, Snapshot, SnapshotSequencer,
124 StepPlayMode,
125};
126#[cfg(feature = "serde")]
127pub use sequencer::SequencerDocument;
128
129// =============================================================================
130// Прелюдия для удобного импорта
131// =============================================================================
132
133/// Прелюдия для удобного импорта основных типов
134pub mod prelude {
135 // Основные типы
136 pub use crate::automaton::*;
137 pub use crate::control::*;
138 pub use crate::manager::*;
139 pub use crate::strategy::*;
140 pub use crate::port_combiner::*;
141 pub use crate::automaton_task::*;
142 pub use crate::engine::*;
143 pub use crate::sequencer::*;
144 pub use crate::utils::*;
145
146 // Реэкспорты из rill-core
147 pub use rill_core::prelude::*;
148 pub use rill_core::queues::RtQueue;
149 pub use rill_core::{NodeId, ParameterId, PortId};
150}
151
152// =============================================================================
153// Тесты
154// =============================================================================
155
156#[cfg(test)]
157mod tests {
158 use super::*;
159
160 #[test]
161 fn test_basic_imports() {
162 // Просто проверяем, что всё импортируется
163 let _ = automaton::LfoWaveform::Sine;
164 let _ = control::Transform::Linear;
165 let _ = manager::PatchbayConfig::default();
166 }
167}