Skip to main content

ot_tools_io/parts/tracks/
recorder.rs

1/*
2SPDX-License-Identifier: GPL-3.0-or-later
3Copyright © 2026 Mike Robeson [dijksterhuis]
4*/
5
6use crate::Defaults;
7use ot_tools_io_derive::{ArrayDefaults, AsMutDerive, AsRefDerive, BoxedArrayDefaults};
8use serde::{Deserialize, Serialize};
9use std::array::from_fn;
10
11/// First page of settings controlling an Audio Track's Recording Buffer configuration.
12#[derive(
13    Copy,
14    Clone,
15    Debug,
16    Eq,
17    Hash,
18    Ord,
19    PartialEq,
20    PartialOrd,
21    Serialize,
22    Deserialize,
23    AsMutDerive,
24    AsRefDerive,
25)]
26pub struct RecorderSetupSources {
27    pub in_ab: u8,
28    pub in_cd: u8,
29    /// `64` is MAX. `63` and lower are actual values.
30    pub rlen: u8,
31    pub trig: u8,
32    /// internal recording source
33    pub src3: u8,
34    pub xloop: u8,
35}
36
37impl Default for RecorderSetupSources {
38    fn default() -> Self {
39        Self {
40            in_ab: 1,
41            in_cd: 1,
42            rlen: 64,
43            trig: 0,
44            src3: 0,
45            xloop: 1,
46        }
47    }
48}
49
50#[cfg(test)]
51mod recorder_setup_src {
52    use crate::parts::test_helper::get_default_test_bank;
53    use crate::parts::tracks::recorder::RecorderSetupSources;
54    use crate::OtToolsIoError;
55
56    #[test]
57    fn default() -> Result<(), OtToolsIoError> {
58        let b = get_default_test_bank()?;
59        for x in b.parts_unsaved[0].recorder_setup.iter() {
60            assert_eq!(x.src, RecorderSetupSources::default());
61        }
62        Ok(())
63    }
64}
65
66/// Second page of settings controlling an Audio Track's Recording Buffer configuration.
67#[derive(
68    Copy,
69    Clone,
70    Debug,
71    Eq,
72    Hash,
73    Ord,
74    PartialEq,
75    PartialOrd,
76    Serialize,
77    Deserialize,
78    AsMutDerive,
79    AsRefDerive,
80)]
81pub struct RecorderSetupProcessing {
82    pub fin: u8,
83    pub fout: u8,
84    pub ab: u8,
85    pub qrec: u8,
86    pub qpl: u8,
87    pub cd: u8,
88}
89
90impl Default for RecorderSetupProcessing {
91    fn default() -> Self {
92        Self {
93            fin: 0,
94            fout: 0,
95            ab: 0,
96            qrec: 255,
97            qpl: 255,
98            cd: 0,
99        }
100    }
101}
102
103#[cfg(test)]
104mod recorder_setup_proc {
105    use crate::parts::test_helper::get_default_test_bank;
106    use crate::parts::tracks::recorder::RecorderSetupProcessing;
107    use crate::OtToolsIoError;
108
109    #[test]
110    fn default() -> Result<(), OtToolsIoError> {
111        let b = get_default_test_bank()?;
112        for x in b.parts_unsaved[0].recorder_setup.iter() {
113            assert_eq!(x.proc, RecorderSetupProcessing::default());
114        }
115        Ok(())
116    }
117}
118
119/// Recorder Setup Pages
120#[derive(
121    Copy,
122    Clone,
123    Debug,
124    Eq,
125    Hash,
126    Ord,
127    PartialEq,
128    PartialOrd,
129    Serialize,
130    Deserialize,
131    AsMutDerive,
132    AsRefDerive,
133    Default,
134    ArrayDefaults,
135    BoxedArrayDefaults,
136)]
137pub struct RecorderSetup {
138    pub src: RecorderSetupSources,
139    pub proc: RecorderSetupProcessing,
140}
141
142#[cfg(test)]
143mod recorder_setup {
144    use crate::parts::test_helper::get_default_test_bank;
145    use crate::parts::tracks::recorder::RecorderSetup;
146    use crate::OtToolsIoError;
147
148    #[test]
149    fn default() -> Result<(), OtToolsIoError> {
150        let b = get_default_test_bank()?;
151        for x in b.parts_unsaved[0].recorder_setup.iter() {
152            assert_eq!(x, &RecorderSetup::default());
153        }
154        Ok(())
155    }
156}