Skip to main content

embedded_audio/
tier.rs

1/// Effect payload type (matches bank directory `kind` byte).
2#[derive(Debug, Clone, Copy, PartialEq, Eq)]
3#[repr(u8)]
4pub enum EffectKind {
5    /// Tier A: tone oscillator (`param0` = Hz, `param1` = duration ms).
6    Tone = 0,
7    /// Tier A: wavetable loop (`param0` = Hz).
8    Wavetable = 1,
9    /// Tier A: two-operator FM (`param0` = carrier Hz, `param1` = mod ratio ×100).
10    Fm = 2,
11    /// Tier B: raw 8-bit PCM.
12    Pcm8 = 3,
13    /// Tier B: IMA ADPCM (4-bit) with 4-byte header predictor/index.
14    Adpcm = 4,
15    /// Tier C: packed 1-bit sigma-delta bitstream (MSB first).
16    SigmaDeltaBits = 5,
17}
18
19impl EffectKind {
20    pub const fn from_u8(v: u8) -> Option<Self> {
21        match v {
22            0 => Some(Self::Tone),
23            1 => Some(Self::Wavetable),
24            2 => Some(Self::Fm),
25            3 => Some(Self::Pcm8),
26            4 => Some(Self::Adpcm),
27            5 => Some(Self::SigmaDeltaBits),
28            _ => None,
29        }
30    }
31}
32
33pub mod flags {
34    pub const LOOP: u8 = 1 << 0;
35    pub const ONE_SHOT: u8 = 1 << 1;
36    pub const SIGNED: u8 = 1 << 2;
37}