// Read the file.
		private void Read(ReadStyle propertiesStyle)
		{
			// Create a dummie outer box, as perscribed by the specs.
			Mpeg4FileBox file_box = new Mpeg4FileBox(this);

			// Find the movie box and item text. If the movie box doen'type exist, an
			// exception will be thrown on the next call, but if there is no movie 
			// box, the file can'type possibly be valid.
			Mpeg4IsoMovieBox moov_box = (Mpeg4IsoMovieBox)file_box.FindChildDeep("moov");
			Mpeg4AppleItemListBox ilst_box = (Mpeg4AppleItemListBox)moov_box.FindChildDeep("ilst");

			// If we have a ItemListBox, deparent it.
			if (ilst_box != null)
				ilst_box.RemoveFromParent();

			// Create the tag.
			tag = new Mpeg4AppleTag(ilst_box, this);

			// If we're not reading properties, we're done.
			if (propertiesStyle == ReadStyle.None)
				return;

			// Get the movie header box.
			Mpeg4IsoMovieHeaderBox mvhd_box = (Mpeg4IsoMovieHeaderBox)moov_box.FindChildDeep("mvhd");
			Mpeg4IsoAudioSampleEntry sample_entry = null;

			// Find a TrackBox with a sound Handler.
			foreach (Mpeg4Box box in moov_box.Children)
				if (box.BoxType == "trak")
				{
					// If the handler isn'type sound, it could be metadata or video or
					// any number of other things.
					Mpeg4IsoHandlerBox hdlr_box = (Mpeg4IsoHandlerBox)box.FindChildDeep("hdlr");
					if (hdlr_box == null || hdlr_box.HandlerType != "soun")
						continue;

					// This track SHOULD contain at least one sample entry.
					sample_entry = (Mpeg4IsoAudioSampleEntry)box.FindChildDeep(typeof(Mpeg4IsoAudioSampleEntry));
					break;
				}

			// If we have a MovieHeaderBox, deparent it.
			if (mvhd_box != null)
				mvhd_box.RemoveFromParent();

			// If we have a SampleEntry, deparent it.
			if (sample_entry != null)
				sample_entry.RemoveFromParent();

			// Read the properties.
			properties = new Mpeg4Properties(mvhd_box, sample_entry, propertiesStyle);
		}
        // Read the file.
        private void Read(ReadStyle propertiesStyle)
        {
            // Create a dummie outer box, as perscribed by the specs.
            Mpeg4FileBox file_box = new Mpeg4FileBox(this);

            // Find the movie box and item text. If the movie box doen'type exist, an
            // exception will be thrown on the next call, but if there is no movie
            // box, the file can'type possibly be valid.
            Mpeg4IsoMovieBox      moov_box = (Mpeg4IsoMovieBox)file_box.FindChildDeep("moov");
            Mpeg4AppleItemListBox ilst_box = (Mpeg4AppleItemListBox)moov_box.FindChildDeep("ilst");

            // If we have a ItemListBox, deparent it.
            if (ilst_box != null)
            {
                ilst_box.RemoveFromParent();
            }

            // Create the tag.
            tag = new Mpeg4AppleTag(ilst_box, this);

            // If we're not reading properties, we're done.
            if (propertiesStyle == ReadStyle.None)
            {
                return;
            }

            // Get the movie header box.
            Mpeg4IsoMovieHeaderBox   mvhd_box     = (Mpeg4IsoMovieHeaderBox)moov_box.FindChildDeep("mvhd");
            Mpeg4IsoAudioSampleEntry sample_entry = null;

            // Find a TrackBox with a sound Handler.
            foreach (Mpeg4Box box in moov_box.Children)
            {
                if (box.BoxType == "trak")
                {
                    // If the handler isn'type sound, it could be metadata or video or
                    // any number of other things.
                    Mpeg4IsoHandlerBox hdlr_box = (Mpeg4IsoHandlerBox)box.FindChildDeep("hdlr");
                    if (hdlr_box == null || hdlr_box.HandlerType != "soun")
                    {
                        continue;
                    }

                    // This track SHOULD contain at least one sample entry.
                    sample_entry = (Mpeg4IsoAudioSampleEntry)box.FindChildDeep(typeof(Mpeg4IsoAudioSampleEntry));
                    break;
                }
            }

            // If we have a MovieHeaderBox, deparent it.
            if (mvhd_box != null)
            {
                mvhd_box.RemoveFromParent();
            }

            // If we have a SampleEntry, deparent it.
            if (sample_entry != null)
            {
                sample_entry.RemoveFromParent();
            }

            // Read the properties.
            properties = new Mpeg4Properties(mvhd_box, sample_entry, propertiesStyle);
        }