swf_types/
sound.rs

1#[cfg(feature = "serde")]
2use ::serde::{Deserialize, Serialize};
3
4#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(rename_all = "PascalCase"))]
5#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
6pub enum AudioCodingFormat {
7  UncompressedNativeEndian,
8  Adpcm,
9  Mp3,
10  UncompressedLittleEndian,
11  Nellymoser16,
12  Nellymoser8,
13  Nellymoser,
14  Speex,
15}
16
17#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
18pub enum SoundRate {
19  SoundRate5500,
20  SoundRate11000,
21  SoundRate22000,
22  SoundRate44000,
23}
24
25#[cfg(feature = "serde")]
26impl ::serde::Serialize for SoundRate {
27  fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
28  where
29    S: ::serde::Serializer,
30  {
31    let sound_rate: u64 = match self {
32      SoundRate::SoundRate5500 => 5500,
33      SoundRate::SoundRate11000 => 11000,
34      SoundRate::SoundRate22000 => 22000,
35      SoundRate::SoundRate44000 => 44000,
36    };
37    serializer.serialize_u64(sound_rate)
38  }
39}
40
41#[cfg(feature = "serde")]
42impl<'de> ::serde::Deserialize<'de> for SoundRate {
43  fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
44  where
45    D: ::serde::Deserializer<'de>,
46  {
47    struct Visitor;
48
49    impl<'de> ::serde::de::Visitor<'de> for Visitor {
50      type Value = SoundRate;
51
52      fn expecting(&self, formatter: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
53        formatter.write_str("5500, 11000, 22000 or 44000")
54      }
55
56      fn visit_u64<E>(self, value: u64) -> Result<SoundRate, E>
57      where
58        E: ::serde::de::Error,
59      {
60        match value {
61          5500 => Ok(SoundRate::SoundRate5500),
62          11000 => Ok(SoundRate::SoundRate11000),
63          22000 => Ok(SoundRate::SoundRate22000),
64          44000 => Ok(SoundRate::SoundRate44000),
65          _ => Err(E::custom(format!("unknown SoundRate value: {}", value))),
66        }
67      }
68    }
69
70    // Deserialize the enum from a u64.
71    deserializer.deserialize_u64(Visitor)
72  }
73}
74
75#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
76pub enum SoundSize {
77  SoundSize8,
78  SoundSize16,
79}
80
81#[cfg(feature = "serde")]
82impl ::serde::Serialize for SoundSize {
83  fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
84  where
85    S: ::serde::Serializer,
86  {
87    let sound_size: u64 = match self {
88      SoundSize::SoundSize8 => 8,
89      SoundSize::SoundSize16 => 16,
90    };
91    serializer.serialize_u64(sound_size)
92  }
93}
94
95#[cfg(feature = "serde")]
96impl<'de> ::serde::Deserialize<'de> for SoundSize {
97  fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
98  where
99    D: ::serde::Deserializer<'de>,
100  {
101    struct Visitor;
102
103    impl<'de> ::serde::de::Visitor<'de> for Visitor {
104      type Value = SoundSize;
105
106      fn expecting(&self, formatter: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
107        formatter.write_str("8 or 16")
108      }
109
110      fn visit_u64<E>(self, value: u64) -> Result<SoundSize, E>
111      where
112        E: ::serde::de::Error,
113      {
114        match value {
115          8 => Ok(SoundSize::SoundSize8),
116          16 => Ok(SoundSize::SoundSize16),
117          _ => Err(E::custom(format!("unknown SoundSize value: {}", value))),
118        }
119      }
120    }
121
122    // Deserialize the enum from a u64.
123    deserializer.deserialize_u64(Visitor)
124  }
125}
126
127#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(rename_all = "PascalCase"))]
128#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
129pub enum SoundType {
130  Mono,
131  Stereo,
132}
133
134#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
135#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
136pub struct SoundInfo {
137  pub sync_stop: bool,
138  pub sync_no_multiple: bool,
139  #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
140  pub in_point: Option<u32>,
141  #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
142  pub out_point: Option<u32>,
143  #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
144  pub loop_count: Option<u16>,
145  #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
146  pub envelope_records: Option<Vec<SoundEnvelope>>,
147}
148
149#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
150#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
151pub struct SoundEnvelope {
152  pub pos44: u32,
153  pub left_level: u16,
154  pub right_level: u16,
155}