Esempio n. 1
0
 private void ParseData(ref long pos, ref long len, int level, BinaryReader br, DataAtoms dataatom)
 {
     byte [] buffer = new byte[4];
     pos += br.Read(buffer, 0, 4);
     
     long size = BitConverter.ToInt32(new byte [] { buffer[3], buffer[2], buffer[1], buffer[0] }, 0);
     pos += br.Read(buffer, 0, 4);
     pos += br.Read(buffer, 0, 4);
     
     long type = BitConverter.ToInt32(new byte [] { buffer[3], buffer[2], buffer[1], buffer[0] }, 0);
     size -= 16;
     type &= 255;
     pos += br.Read(buffer, 0, 4);
     
     byte [] data = new byte[size];
     pos += br.Read(data, 0, (int)size);
     
     switch(type) {
         case 0:
             int [] intvals = new int[size / 2];
             for(int i = 0; i < size / 2; i++) {
                 intvals[i] = BitConverter.ToInt16(new byte[] { 
                   data[1 + (i * 2)], 
                   data[0 + (i * 2)] 
                 }, 0);
             }
             
             switch(dataatom) {
                 case DataAtoms.GNRE:
                     tag.AddGenre(GENRE_MAP[intvals[0]]);
                     break;
                 case DataAtoms.TRKN:
                     tag.AddTrack(Convert.ToString(intvals[1]));
                     break;
                 default:
                     Console.WriteLine("DataAtom: {0}", dataatom);
                     break;
             }
             
             break;
         case 1:
             CommonField field = 0;
             switch(dataatom) {
                 case DataAtoms.GEN:
                     field = CommonField.Genre;
                     break;
                 case DataAtoms.NAM:
                     field = CommonField.Title;
                     break;
                 case DataAtoms.ART:
                     field = CommonField.Artist;
                     break;
                 case DataAtoms.ALB:
                     field = CommonField.Album;
                     break;
                 case DataAtoms.DAY:
                     field = CommonField.Year;
                     break;
                 case DataAtoms.CMT:
                     field = CommonField.Comment;
                     break;
             }
             
             tag.Add(field, Encoding.Default.GetString(data));
             break;
         case 2:
             // other byte data
             break;
         default:
             // non-standard data
             break;
     }
 }
Esempio n. 2
0
        private void ParseData(ref long pos, ref long len, int level, BinaryReader br, DataAtoms dataatom)
        {
            byte [] buffer = new byte[4];
            pos += br.Read(buffer, 0, 4);

            long size = BitConverter.ToInt32(new byte [] { buffer[3], buffer[2], buffer[1], buffer[0] }, 0);

            pos += br.Read(buffer, 0, 4);
            pos += br.Read(buffer, 0, 4);

            long type = BitConverter.ToInt32(new byte [] { buffer[3], buffer[2], buffer[1], buffer[0] }, 0);

            size -= 16;
            type &= 255;
            pos  += br.Read(buffer, 0, 4);

            byte [] data = new byte[size];
            pos += br.Read(data, 0, (int)size);

            switch (type)
            {
            case 0:
                int [] intvals = new int[size / 2];
                for (int i = 0; i < size / 2; i++)
                {
                    intvals[i] = BitConverter.ToInt16(new byte[] {
                        data[1 + (i * 2)],
                        data[0 + (i * 2)]
                    }, 0);
                }

                switch (dataatom)
                {
                case DataAtoms.GNRE:
                    tag.AddGenre(GENRE_MAP[intvals[0]]);
                    break;

                case DataAtoms.TRKN:
                    tag.AddTrack(Convert.ToString(intvals[1]));
                    break;

                default:
                    Console.WriteLine("DataAtom: {0}", dataatom);
                    break;
                }

                break;

            case 1:
                CommonField field = 0;
                switch (dataatom)
                {
                case DataAtoms.GEN:
                    field = CommonField.Genre;
                    break;

                case DataAtoms.NAM:
                    field = CommonField.Title;
                    break;

                case DataAtoms.ART:
                    field = CommonField.Artist;
                    break;

                case DataAtoms.ALB:
                    field = CommonField.Album;
                    break;

                case DataAtoms.DAY:
                    field = CommonField.Year;
                    break;

                case DataAtoms.CMT:
                    field = CommonField.Comment;
                    break;
                }

                tag.Add(field, Encoding.Default.GetString(data));
                break;

            case 2:
                // other byte data
                break;

            default:
                // non-standard data
                break;
            }
        }