示例#1
0
        public TreeNode GetPreviousSiblingWithManagedAudio()
        {
            if (Parent == null)
            {
                return(null);
            }
            TreeNode previous = this;

            while ((previous = previous.PreviousSibling) != null)
            {
#if ENABLE_SEQ_MEDIA
                Media manMedia = previous.GetManagedAudioMediaOrSequenceMedia();
#else
                Media manMedia = previous.GetManagedAudioMedia();
#endif

                if (manMedia != null)
                {
                    return(previous);
                }

                TreeNode previousIn = previous.GetLastDescendantWithManagedAudio();
                if (previousIn != null)
                {
                    return(previousIn);
                }
            }

            return(Parent.GetPreviousSiblingWithManagedAudio());
        }
示例#2
0
        public TreeNode GetNextSiblingWithManagedAudio()
        {
            if (Parent == null)
            {
                return(null);
            }
            TreeNode next = this;

            while ((next = next.NextSibling) != null)
            {
#if ENABLE_SEQ_MEDIA
                Media manMedia = next.GetManagedAudioMediaOrSequenceMedia();
#else
                Media manMedia = next.GetManagedAudioMedia();
#endif

                if (manMedia != null)
                {
                    return(next);
                }

                TreeNode nextIn = next.GetFirstDescendantWithManagedAudio();
                if (nextIn != null)
                {
                    return(nextIn);
                }
            }

            return(Parent.GetNextSiblingWithManagedAudio());
        }
示例#3
0
        public TreeNode GetLastDescendantWithManagedAudio()
        {
            if (mChildren.Count == 0)
            {
                return(null);
            }

            for (int i = Children.Count - 1; i >= 0; i--)
            {
                TreeNode child = Children.Get(i);

#if ENABLE_SEQ_MEDIA
                Media manMedia = child.GetManagedAudioMediaOrSequenceMedia();
#else
                Media manMedia = child.GetManagedAudioMedia();
#endif

                if (manMedia != null)
                {
                    return(child);
                }

                TreeNode childIn = child.GetLastDescendantWithManagedAudio();
                if (childIn != null)
                {
                    return(childIn);
                }
            }
            return(null);
        }
示例#4
0
        public ManagedAudioMedia ExtractManagedAudioMedia()
        {
#if ENABLE_SEQ_MEDIA
            Media audioMedia = m_TreeNode.GetManagedAudioMediaOrSequenceMedia();
#else
            ManagedAudioMedia audioMedia = m_TreeNode.GetManagedAudioMedia();
#endif
            if (audioMedia == null)
            {
                Debug.Fail("This should never happen !");
                throw new Exception("TreeNode doesn't have managed audio media ?!");
            }

#if ENABLE_SEQ_MEDIA
            else if (audioMedia is SequenceMedia)
            {
                Debug.Fail("SequenceMedia is normally removed at import time...have you tried re-importing the DAISY book ?");
                throw new NotImplementedException("TODO: implement support for SequenceMedia of ManagedAudioMedia in audio delete functionality !");

                //var seqManAudioMedia = (SequenceMedia)audioMedia;

                //double timeOffset = 0;
                //long sumData = 0;
                //long sumDataPrev = 0;
                //foreach (Media media in seqManAudioMedia.ChildMedias.ContentsAs_YieldEnumerable)
                //{
                //    var manangedMediaSeqItem = (ManagedAudioMedia)media;
                //    if (!manangedMediaSeqItem.HasActualAudioMediaData)
                //    {
                //        continue;
                //    }

                //    AudioMediaData audioData = manangedMediaSeqItem.AudioMediaData;
                //    sumData += audioData.PCMFormat.Data.ConvertTimeToBytes(audioData.AudioDuration.AsMilliseconds);
                //    if (SelectionData.m_LocalStreamLeftMark < sumData)
                //    {
                //        timeOffset = audioData.PCMFormat.Data.ConvertBytesToTime(SelectionData.m_LocalStreamLeftMark - sumDataPrev);

                //        break;
                //    }
                //    sumDataPrev = sumData;
                //}
            }

            else if (audioMedia is ManagedAudioMedia)
            {
                AudioMediaData mediaData = ((ManagedAudioMedia)audioMedia).AudioMediaData;
#else
            else
            {
                AudioMediaData mediaData = audioMedia.AudioMediaData;
#endif //ENABLE_SEQ_MEDIA

                if (mediaData == null)
                {
                    Debug.Fail("This should never happen !");
                    throw new Exception("ManagedAudioMedia has empty MediaData ?!");
                }

                Time timeBegin = m_LocalStreamLeftMark == -1
                    ? Time.Zero
                    : new Time(mediaData.PCMFormat.Data.ConvertBytesToTime(m_LocalStreamLeftMark));

                Time timeEnd = m_LocalStreamRightMark == -1
                    ? Time.Zero
                    : new Time(mediaData.PCMFormat.Data.ConvertBytesToTime(m_LocalStreamRightMark));

                if (TimeBeginEndEqualClipDuration(timeBegin, timeEnd, mediaData))
                {
                    return(((ManagedAudioMedia)audioMedia).Copy());
                }
                else
                {
                    ManagedAudioMedia managedAudioMediaBackup = m_TreeNode.Presentation.MediaFactory.CreateManagedAudioMedia();

                    //var mediaDataBackup = (WavAudioMediaData)m_TreeNode.Presentation.MediaDataFactory.CreateAudioMediaData();

                    WavAudioMediaData mediaDataBackup = ((WavAudioMediaData)mediaData).Copy(timeBegin, timeEnd);
                    managedAudioMediaBackup.AudioMediaData = mediaDataBackup;

                    //Stream streamToBackup = timeEnd.IsEqualTo(Time.Zero)
                    //                            ? mediaData.OpenPcmInputStream(timeBegin)
                    //                            : mediaData.OpenPcmInputStream(timeBegin, timeEnd);
                    //try
                    //{
                    //    //Time timeDelta = mediaData.AudioDuration.Substract(new Time(timeBegin.TimeAsMillisecondFloat));
                    //    mediaDataBackup.AppendPcmData(streamToBackup, null);
                    //}
                    //finally
                    //{
                    //    streamToBackup.Close();
                    //}

                    return(managedAudioMediaBackup);
                }
            }

            return(null);
        }