azure_speech/recognizer/
audio_format.rs

1use std::ffi::OsStr;
2
3/// The Audio Format of the audio data.
4#[derive(Debug, Clone, PartialEq, Eq)]
5pub enum AudioFormat {
6    /// The audio is in WAV format.
7    ///
8    /// Header needs to be present in the beginning of the audio data.
9    Wav,
10    /// The audio is in FLAC format.
11    Flac,
12    /// The audio is in Opus format.
13    Opus,
14    /// The audio is in MP3 format.
15    Mp3,
16    /// The audio is in WebM Opus format.
17    WebmOpus,
18    /// The audio is in Ogg Opus format.
19    OggOpus,
20    /// The audio is in MPEG format.
21    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}