1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
extern crate alloc;
pub
pub
pub
pub
pub
pub
pub
pub
pub
/// Generational arena of `Voice`s, indexed by opaque `VoiceId`
/// handles. Owns every live and ghost voice the player has in
/// flight; channels carry only handles. Capacity is configurable
/// at construction (default 256, mirroring schism's `MAX_VOICES`)
/// and the pool falls back to lowest-audible-volume eviction when
/// full — see [`voice_pool::VoicePool::allocate_live`] /
/// [`voice_pool::VoicePool::allocate_ghost`].
pub
// --- Post-refactor modules (0.10) ---
/// Song cursor and tick clock. Consumes navigation-side global effects
/// (`Fxx`, `Bxx`, `Dxx`, `E6y`, `EEy`, `BPM`, `BPMSlide`) directly from
/// pattern cells, without going through channels.
/// Audio engine: per-channel state, mixer gain, and sample generation.
/// Consumes volume-side global effects (`Volume`, `VolumeSlide`).
/// Subscription API — `PlayerObserver` trait and event context structs.
/// Audio-side subscription API — `MixObserver` and `ChannelsObserver`
/// traits for consumers of the produced audio stream (VU-meters,
/// oscilloscopes, recorders, analyzers).
/// MIDI-side subscription API — `MidiObserver` trait for consumers
/// of MIDI events emitted by the IT macro interpreter (`Zxx` macros
/// that encode Note On/Off, CC, Program Change, SysEx, etc.).
/// Built-in observer that prints pattern/row changes. Requires `std`.
/// Built-in MIDI observer that prints MIDI events to stdout. Requires
/// `std`. Mirrors `debug_observer` but for the `MidiObserver` trait.
/// Toggle and policy for humanisation of
/// `InstrumentType::Euclidean` pulses at playback.
/// Per-channel state for Euclidean humanisation, coordinated by
/// the player.
pub