diff --git a/um_audio/src/lib.rs b/um_audio/src/lib.rs index 301449a..2e7f3db 100644 --- a/um_audio/src/lib.rs +++ b/um_audio/src/lib.rs @@ -24,6 +24,7 @@ pub enum AudioType { M4B = 5, MP4 = 6, WMA = 7, // While possible, it is rare to find a lossless WMA file. + MKV = 8, // Matroska (mkv, mka, webm etc.; can contain lossy or lossless audio tracks) // Lossless FLAC = MASK_LOSSLESS | 1, @@ -46,6 +47,7 @@ impl AudioType { AudioType::DFF => "dff", AudioType::WAV => "wav", AudioType::APE => "ape", + AudioType::MKV => "ape", _ => "bin", } @@ -77,9 +79,10 @@ fn is_aac(magic: u32) -> bool { const MAGIC_FLAC: [u8; 4] = *b"fLaC"; const MAGIC_OGG: [u8; 4] = *b"OggS"; const MAGIC_DFF: [u8; 4] = *b"FRM8"; -const MAGIC_WMA: [u8; 4] = *b"\x30\x26\xB2\x75"; +const MAGIC_WMA: [u8; 4] = [0x30, 0x26, 0xB2, 0x75]; const MAGIC_WAV: [u8; 4] = *b"RIFF"; const MAGIC_APE: [u8; 4] = *b"MAC "; +const MAGIC_MKV: [u8; 4] = [0x1A, 0x45, 0xDF, 0xA3]; pub fn detect_audio_type(buffer: &[u8]) -> Result { let offset = metadata::get_header_metadata_size(buffer, 0)?; @@ -96,6 +99,7 @@ pub fn detect_audio_type(buffer: &[u8]) -> Result { MAGIC_WMA => return Ok(AudioType::WMA), MAGIC_WAV => return Ok(AudioType::WAV), MAGIC_APE => return Ok(AudioType::APE), + MAGIC_MKV => return Ok(AudioType::MKV), _ => {} } let magic = u32::from_be_bytes(magic);