// http://dvd.sourceforge.net/dvdinfo/ifo.html#audatt public static AudioValues ReadAudioSpecs(byte b0, byte b1, byte b5) { int byte0_high = (b0 & 0xF0) >> 4; int byte0_low = (b0 & 0x0F); int byte1_high = (b1 & 0xF0) >> 4; int byte1_low = (b1 & 0x0F); AudioValues result = new AudioValues(); switch (b5) { case 0: result.Extension = AudioExtension.Unspecified; break; case 1: result.Extension = AudioExtension.Normal; break; case 2: result.Extension = AudioExtension.For_visually_impaired; break; case 3: result.Extension = AudioExtension.Director_s_comments; break; case 4: result.Extension = AudioExtension.Alternate_director_s_comments; break; } result.LanguageTypePresent = (byte0_low & 0x04) == 0x04; result.Channels = (byte1_low & 0x07) + 1; if ((byte1_high & 0x03) == 0) { result.SampleRate = 0x30; } switch (byte0_high >> 1) { case 0: result.Encoding = AudioEncoding.AC3; break; case 1: result.Encoding = AudioEncoding.Undefined; break; case 2: result.Encoding = AudioEncoding.MPEG1; break; case 3: result.Encoding = AudioEncoding.MPEG2; break; case 4: result.Encoding = AudioEncoding.LPCM; break; case 5: result.Encoding = AudioEncoding.Undefined; break; case 6: result.Encoding = AudioEncoding.DTS; break; case 7: result.Encoding = AudioEncoding.Undefined; break; } return(result); }
internal static List <DVDAudioTrack> AudioTracks(string ifoFile) { List <DVDAudioTrack> ret = new List <DVDAudioTrack>(); int audioStreams = IFOUtilities.GetFileBlock(ifoFile, 0x203, 1)[0]; for (int currentAudioStream = 1; currentAudioStream <= audioStreams; currentAudioStream++) { byte[] bytes = IFOUtilities.GetFileBlock(ifoFile, (long)(0x204 + (8 * (currentAudioStream - 1))), 8); AudioValues audioValues = AudioValues.ReadAudioSpecs(bytes[0], bytes[1], bytes[5]); string languageCode = ""; if (audioValues.LanguageTypePresent) { languageCode = "" + (char)bytes[2] + (char)bytes[3]; } // audio channel // - MPEG: 0-31 // - VOB(AC3): 128-159 // - VOB(LPCM): 160-191 int id = currentAudioStream - 1; if (audioValues.Encoding == AudioEncoding.AC3) { id = 127 + currentAudioStream; } else if (audioValues.Encoding == AudioEncoding.DTS) { id = 135 + currentAudioStream; } else if (audioValues.Encoding == AudioEncoding.LPCM) { id = 159 + currentAudioStream; } ret.Add(new DVDAudioTrack() { Frequency = audioValues.SampleRate * 1000, LanguageID = languageCode, TrackNumber = currentAudioStream, ID = id, Channels = audioValues.Channels, Format = audioValues.Encoding, Extension = audioValues.Extension, // Bitrate = , }); } return(ret); }
// http://dvd.sourceforge.net/dvdinfo/ifo.html#audatt public static AudioValues ReadAudioSpecs(byte b0, byte b1, byte b5) { int byte0_high = (b0 & 0xF0) >> 4; int byte0_low = (b0 & 0x0F); int byte1_high = (b1 & 0xF0) >> 4; int byte1_low = (b1 & 0x0F); AudioValues result = new AudioValues(); switch (b5) { case 0: result.Extension = AudioExtension.Unspecified; break; case 1: result.Extension = AudioExtension.Normal; break; case 2: result.Extension = AudioExtension.For_visually_impaired; break; case 3: result.Extension = AudioExtension.Director_s_comments; break; case 4: result.Extension = AudioExtension.Alternate_director_s_comments; break; } result.LanguageTypePresent = (byte0_low & 0x04) == 0x04; result.Channels = (byte1_low & 0x07) + 1; if ((byte1_high & 0x03) == 0) result.SampleRate = 0x30; switch (byte0_high >> 1) { case 0: result.Encoding = AudioEncoding.AC3; break; case 1: result.Encoding = AudioEncoding.Undefined; break; case 2: result.Encoding = AudioEncoding.MPEG1; break; case 3: result.Encoding = AudioEncoding.MPEG2; break; case 4: result.Encoding = AudioEncoding.LPCM; break; case 5: result.Encoding = AudioEncoding.Undefined; break; case 6: result.Encoding = AudioEncoding.DTS; break; case 7: result.Encoding = AudioEncoding.Undefined; break; } return result; }