azure_speech/recognizer/
audio_format.rs1use std::ffi::OsStr;
2
3#[derive(Debug, Clone, PartialEq, Eq)]
5pub enum AudioFormat {
6 Wav,
10 Flac,
12 Opus,
14 Mp3,
16 WebmOpus,
18 OggOpus,
20 Mpeg,
22}
23
24impl TryFrom<&OsStr> for AudioFormat {
25 type Error = crate::Error;
26 fn try_from(extension: &OsStr) -> Result<Self, crate::Error> {
27 match extension.to_str().unwrap().to_lowercase().as_str() {
28 "wav" | "wave" => Ok(AudioFormat::Wav),
29 "flac" => Ok(AudioFormat::Flac),
30 "opus" => Ok(AudioFormat::Opus),
31 "mp3" => Ok(AudioFormat::Mp3),
32 "webm" => Ok(AudioFormat::WebmOpus),
33 "ogg" | "oga" => Ok(AudioFormat::OggOpus),
34 "mpeg" | "mpg" => Ok(AudioFormat::Mpeg),
35 ext => Err(Self::Error::IOError(format!(
36 "Unsupported audio format. ({})",
37 ext
38 ))),
39 }
40 }
41}
42
43impl AudioFormat {
44 pub(crate) fn as_content_type(&self) -> &str {
45 match self {
46 AudioFormat::Wav => "audio/wav",
47 AudioFormat::Flac => "audio/flac",
48 AudioFormat::Opus => "audio/ogg; codecs=opus",
49 AudioFormat::Mp3 => "audio/mpeg",
50 AudioFormat::WebmOpus => "audio/webm; codecs=opus",
51 AudioFormat::OggOpus => "audio/ogg",
52 AudioFormat::Mpeg => "audio/mpeg",
53 }
54 }
55}