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()); }
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()); }
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); }
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); }