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 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 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}