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//! - **Сервоприводы** — связь автоматов с параметрами узлов
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// =============================================================================
73// Реэкспорты для удобства
74// =============================================================================
75
76// Selective re-exports
77pub use automaton::{
78 EnvelopeAutomaton, EnvelopeStage, EnvelopeType, FunctionAutomaton, LfoAutomaton, LfoWaveform,
79 PlayMode, Range, SequencerAutomaton, StatefulFunctionAutomaton, Step, SyncMode,
80};
81pub use control::{
82 midi_cc, osc_address, AnyServo, Automaton, BoxedServo, ControlEvent, EventPattern, Mapping,
83 NoAction, ParameterCommand, ParameterMapping, PatchbayControl, Servo, Target, Transform,
84};
85pub use manager::PatchbayManager;
86
87// =============================================================================
88// Прелюдия для удобного импорта
89// =============================================================================
90
91/// Прелюдия для удобного импорта основных типов
92pub mod prelude {
93 // Основные типы
94 pub use crate::automaton::*;
95 pub use crate::control::*;
96 pub use crate::manager::*;
97 pub use crate::utils::*;
98
99 // Реэкспорты из rill-core
100 pub use rill_core::prelude::*;
101 pub use rill_core::queues::RtQueue;
102 pub use rill_core::{NodeId, ParameterId, PortId};
103}
104
105// =============================================================================
106// Тесты
107// =============================================================================
108
109#[cfg(test)]
110mod tests {
111 use super::*;
112
113 #[test]
114 fn test_basic_imports() {
115 // Просто проверяем, что всё импортируется
116 let _ = automaton::LfoWaveform::Sine;
117 let _ = control::Transform::Linear;
118 let _ = manager::PatchbayConfig::default();
119 }
120}