Example #1
0
        // 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);
        }
Example #2
0
        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);
        }
Example #3
0
        // 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;
        }