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}