Skip to main content

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}