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