private bool isNewDefaultPCMFormatOk(PCMFormatInfo newDefault) { foreach (MediaData md in ManagedObjects.ContentsAs_Enumerable) { WavAudioMediaData amd = md as WavAudioMediaData; if (amd != null && !amd.PCMFormat.Data.IsCompatibleWith(newDefault.Data)) { return(false); } } return(true); }
// Create a new phrase node with the audio from the clipboard // and merge the selected node with this one. protected virtual urakawa.command.Command PasteCommandAudio(ProjectView.ProjectView view) { AudioClipboard c = (AudioClipboard)view.Clipboard; //urakawa.media.data.audio.ManagedAudioMedia media = ((PhraseNode)view.Clipboard.Node).Audio.copy( urakawa.media.data.audio.ManagedAudioMedia media = view.Presentation.MediaFactory.CreateManagedAudioMedia(); WavAudioMediaData wavData = ((WavAudioMediaData)((PhraseNode)view.Clipboard.Node).Audio.AudioMediaData).Copy( new Time(Convert.ToInt64(c.AudioRange.SelectionBeginTime * Time.TIME_UNIT)), new Time(Convert.ToInt64(c.AudioRange.SelectionEndTime * Time.TIME_UNIT)));//sdk2 media.AudioMediaData = wavData; CompositeCommand p = view.Presentation.CreateCompositeCommand(Localizer.Message("paste_audio")); if (Node is EmptyNode) { if (view.TransportBar.CurrentState == Obi.ProjectView.TransportBar.State.Paused) { Command pasteCommand = new Commands.Audio.Paste(view, view.TransportBar.SplitBeginTime); p.ChildCommands.Insert(p.ChildCommands.Count, pasteCommand); } else { PhraseNode phrase = view.Presentation.CreatePhraseNode(media); p.ChildCommands.Insert(p.ChildCommands.Count, new Commands.Node.AddNode(view, phrase, ParentForNewNode(phrase), IndexForNewNode(phrase))); p.ChildCommands.Insert(p.ChildCommands.Count, Commands.Node.MergeAudio.GetMergeCommand(view, (EmptyNode)Node, phrase)); if (Node is PhraseNode) { p.ChildCommands.Insert(p.ChildCommands.Count, new Commands.UpdateSelection(view, new AudioSelection((PhraseNode)Node, Control, new AudioRange(Node.Duration, Node.Duration + phrase.Duration)))); } else if (Node is EmptyNode) { p.ChildCommands.Insert(p.ChildCommands.Count, new Commands.UpdateSelection(view, new NodeSelection(phrase, Control))); } } } else { PhraseNode phrase = view.Presentation.CreatePhraseNode(media); p.ChildCommands.Insert(p.ChildCommands.Count, new Commands.Node.AddNode(view, phrase, ParentForNewNode(phrase), IndexForNewNode(phrase))); } return(p); }
public Paste(ProjectView.ProjectView view) : base(view) { mNode = view.SelectedNodeAs <PhraseNode>(); AudioSelection selection = (AudioSelection)view.Selection; mMediaBefore = mNode.Audio.Copy(); mMediaAfter = mMediaBefore.Copy(); urakawa.media.data.audio.ManagedAudioMedia copy; if (view.Clipboard is AudioClipboard) { AudioClipboard clipboard = (AudioClipboard)view.Clipboard; copy = view.Presentation.MediaFactory.CreateManagedAudioMedia(); WavAudioMediaData mediaData = ((WavAudioMediaData)((PhraseNode)clipboard.Node).Audio.AudioMediaData).Copy( new Time((long)(clipboard.AudioRange.SelectionBeginTime * Time.TIME_UNIT)), new Time((long)(clipboard.AudioRange.SelectionEndTime * Time.TIME_UNIT)) ); copy.AudioMediaData = mediaData; } else { copy = ((PhraseNode)view.Clipboard.Node).Audio.Copy(); } urakawa.media.data.audio.ManagedAudioMedia after; if (selection.AudioRange.HasCursor) { after = mMediaAfter.Split(new Time((long)(selection.AudioRange.CursorTime * Time.TIME_UNIT))); } else { after = mMediaAfter.Split(new Time((long)(selection.AudioRange.SelectionEndTime * Time.TIME_UNIT))); mMediaAfter.Split(new Time((long)(selection.AudioRange.SelectionBeginTime * Time.TIME_UNIT))); } double begin = mMediaAfter.Duration.AsMilliseconds; mSelectionAfter = new AudioSelection(mNode, view.Selection.Control, new AudioRange(begin, begin + copy.Duration.AsMilliseconds)); mMediaAfter.AudioMediaData.MergeWith(copy.AudioMediaData); mMediaAfter.AudioMediaData.MergeWith(after.AudioMediaData); SetDescriptions(Localizer.Message("paste_audio")); }
private bool mHasAudioAfterDeleted; // true if there is audio left after the deleted part // Made private so that GetCommand() is used instead private Delete(ProjectView.ProjectView view) : base(view) { mNode = (PhraseNode)view.Selection.Node; mHasAudioAfterDeleted = ((AudioSelection)view.Selection).AudioRange.SelectionEndTime < mNode.Audio.Duration.AsMilliseconds; mSplitTimeBegin = new Time((long)(((AudioSelection)view.Selection).AudioRange.SelectionBeginTime * Time.TIME_UNIT)); mSplitTimeEnd = new Time((long)(((AudioSelection)view.Selection).AudioRange.SelectionEndTime * Time.TIME_UNIT)); mSelectionAfter = mHasAudioAfterDeleted ? new AudioSelection(mNode, view.Selection.Control, new AudioRange(mSplitTimeBegin.AsMilliseconds)) : new NodeSelection(mNode, view.Selection.Control); ManagedAudioMedia manMedia = view.Presentation.MediaFactory.CreateManagedAudioMedia(); WavAudioMediaData mediaData = ((WavAudioMediaData)mNode.Audio.AudioMediaData).Copy(mSplitTimeBegin, mSplitTimeEnd); manMedia.AudioMediaData = mediaData; mDeleted = view.Presentation.CreatePhraseNode(manMedia); SetDescriptions(Localizer.Message("delete_audio")); }
protected override urakawa.command.Command PasteCommandAudio(Obi.ProjectView.ProjectView view) { AudioClipboard c = (AudioClipboard)view.Clipboard; urakawa.media.data.audio.ManagedAudioMedia media = view.Presentation.MediaFactory.CreateManagedAudioMedia(); WavAudioMediaData wavData = ((WavAudioMediaData)((PhraseNode)view.Clipboard.Node).Audio.AudioMediaData).Copy( new Time(Convert.ToInt64(c.AudioRange.SelectionBeginTime * Time.TIME_UNIT)), new Time(Convert.ToInt64(c.AudioRange.SelectionEndTime * Time.TIME_UNIT)));//sdk2 media.AudioMediaData = wavData; PhraseNode phrase = view.Presentation.CreatePhraseNode(media); CompositeCommand p = view.Presentation.CreateCompositeCommand(Localizer.Message("paste_audio")); p.ChildCommands.Insert(p.ChildCommands.Count, new Commands.Node.AddNode(view, phrase, ParentForNewNode(phrase), IndexForNewNode(phrase))); if (!Node.Used) { view.AppendMakeUnused(p, phrase); } return(p); }
private ManagedAudioMedia addAudioWav(FileDataProvider dataProv, XmlNode audioAttrClipBegin, XmlNode audioAttrClipEnd, TreeNode treeNode) { if (m_autoDetectPcmFormat && m_AudioConversionSession.FirstDiscoveredPCMFormat != null && !m_AudioConversionSession.FirstDiscoveredPCMFormat.IsCompatibleWith(treeNode.Presentation.MediaDataManager.DefaultPCMFormat.Data)) { PCMFormatInfo pcmFormat = treeNode.Presentation.MediaDataManager.DefaultPCMFormat; //.Copy(); pcmFormat.Data.CopyFrom(m_AudioConversionSession.FirstDiscoveredPCMFormat); //pcmFormat.Data.SampleRate = (ushort) m_audioProjectSampleRate; //pcmFormat.Data.NumberOfChannels = m_audioStereo ? (ushort) 2 : (ushort) 1; treeNode.Presentation.MediaDataManager.DefaultPCMFormat = pcmFormat; } if (RequestCancellation) { return(null); } Time clipB = Time.Zero; Time clipE = Time.MaxValue; if (audioAttrClipBegin != null && !string.IsNullOrEmpty(audioAttrClipBegin.Value)) { try { clipB = new Time(audioAttrClipBegin.Value); } catch (Exception ex) { clipB = new Time(); string str = "CLIP BEGIN TIME PARSE FAIL: " + audioAttrClipBegin.Value; Console.WriteLine(str); Debug.Fail(str); } } if (audioAttrClipEnd != null && !string.IsNullOrEmpty(audioAttrClipEnd.Value)) { try { clipE = new Time(audioAttrClipEnd.Value); } catch (Exception ex) { clipE = new Time(); string str = "CLIP END TIME PARSE FAIL: " + audioAttrClipEnd.Value; Console.WriteLine(str); Debug.Fail(str); } } ManagedAudioMedia media = null; Presentation presentation = treeNode.Presentation; // m_Project.Presentations.Get(0); //if (deleteSrcAfterCompletion) //{ WavAudioMediaData mediaData = (WavAudioMediaData) presentation.MediaDataFactory.CreateAudioMediaData(); // mediaData.AudioDuration DOES NOT WORK BECAUSE DEPENDS ON WAVCLIPS LIST!!! WavClip wavClip = new WavClip(dataProv); Time newClipE = clipE.Copy(); if (newClipE.IsGreaterThan(wavClip.MediaDuration)) { clipEndAdjustedToNull(clipB, newClipE, wavClip.MediaDuration, treeNode); //newClipE = wavClip.MediaDuration; newClipE = null; } //FileDataProvider dataProv = m_Src_FileDataProviderMap[fullWavPath]; //System.Windows.Forms.MessageBox.Show ( clipB.ToString () + " : " + clipE.ToString () ) ; //bool isClipEndError = false; try { mediaData.AppendPcmData(dataProv, clipB, newClipE); } catch (Exception ex) { #if DEBUG Debugger.Break(); #endif //DEBUG Console.WriteLine("CLIP TIME ERROR1 (end < begin ?): " + clipB + " (" + (audioAttrClipBegin != null ? audioAttrClipBegin.Value : "N/A") + ") / " + clipE + " (" + (audioAttrClipEnd != null ? audioAttrClipEnd.Value : "N/A") + ") === " + wavClip.MediaDuration); //if (ex is exception.MethodParameterIsOutOfBoundsException && clipB != null && clipE != null && clipB.IsLessThanOrEqualTo(clipE)) //{ // isClipEndError = true; //} //else //{ // Console.WriteLine("CLIP TIME ERROR1 (end < begin ?): " + clipB + " (" + (audioAttrClipBegin != null ? audioAttrClipBegin.Value : "N/A") + ") / " + clipE + " (" + (audioAttrClipEnd != null ? audioAttrClipEnd.Value : "N/A") + ")"); // return null; //} } //if (isClipEndError) //{ // // reduce clip end by 1 millisecond for rounding off tolerance // isClipEndError = addAudioWavWithEndOfFileTolerance(mediaData, dataProv, clipB, clipE, treeNode); // if (isClipEndError) // { // Console.WriteLine("CLIP TIME ERROR2 (end < begin ?): " + clipB + " (" + (audioAttrClipBegin != null ? audioAttrClipBegin.Value : "N/A") + ") / " + clipE + " (" + (audioAttrClipEnd != null ? audioAttrClipEnd.Value : "N/A") + ")"); // return null; // } //} if (RequestCancellation) { return(null); } media = presentation.MediaFactory.CreateManagedAudioMedia(); media.AudioMediaData = mediaData; //} /* else * { * * uint dataLength; * AudioLibPCMFormat pcmInfo = null; * Stream wavStream = null; * try * { * wavStream = File.Open(fullWavPath, FileMode.Open, FileAccess.Read, FileShare.Read); * * pcmInfo = AudioLibPCMFormat.RiffHeaderParse(wavStream, out dataLength); * * //if (m_firstTimePCMFormat) * //{ * // presentation.MediaDataManager.DefaultPCMFormat = new PCMFormatInfo(pcmInfo); * // m_firstTimePCMFormat = false; * //} * * Time clipDuration = new Time(pcmInfo.ConvertBytesToTime(dataLength)); * if (!clipB.IsEqualTo(Time.Zero) || !clipE.IsEqualTo(Time.MaxValue)) * { * clipDuration = clipE.GetTime(clipB); * } * else * { * System.Diagnostics.Debug.Fail("Audio clip with full duration ??"); * } * * long byteOffset = 0; * if (!clipB.IsEqualTo(Time.Zero)) * { * byteOffset = pcmInfo.ConvertTimeToBytes(clipB.TimeAsMillisecondFloat); * } * if (byteOffset > 0) * { * wavStream.Seek(byteOffset, SeekOrigin.Current); * } * * presentation.MediaDataFactory.DefaultAudioMediaDataType = * typeof (WavAudioMediaData); * * WavAudioMediaData mediaData = * (WavAudioMediaData) * presentation.MediaDataFactory.CreateAudioMediaData(); * * * mediaData.InsertPcmData(wavStream, Time.Zero, clipDuration); * * media = presentation.MediaFactory.CreateManagedAudioMedia(); * ((ManagedAudioMedia) media).AudioMediaData = mediaData; * } * finally * { * if (wavStream != null) wavStream.Close(); * } * * } */ return(media); }
private ManagedAudioMedia addAudioWav(FileDataProvider dataProv, XmlNode audioAttrClipBegin, XmlNode audioAttrClipEnd, TreeNode treeNode) { //if (m_autoDetectPcmFormat //&& m_AudioConversionSession.FirstDiscoveredPCMFormat != null //&& !m_AudioConversionSession.FirstDiscoveredPCMFormat.IsCompatibleWith(treeNode.Presentation.MediaDataManager.DefaultPCMFormat.Data)) //{ //PCMFormatInfo pcmFormat = treeNode.Presentation.MediaDataManager.DefaultPCMFormat; //.Copy(); //pcmFormat.Data.CopyFrom(m_AudioConversionSession.FirstDiscoveredPCMFormat); // //treeNode.Presentation.MediaDataManager.DefaultPCMFormat = pcmFormat; //} //if (RequestCancellation) return null; Time clipB = Time.Zero; Time clipE = Time.MaxValue; if (audioAttrClipBegin != null && !string.IsNullOrEmpty(audioAttrClipBegin.Value)) { string strBeginValue = audioAttrClipBegin.Value.Replace("npt=", ""); try { clipB = new Time(strBeginValue); } catch (Exception ex) { clipB = new Time(0); string str = "CLIP BEGIN TIME PARSE FAIL: " + audioAttrClipBegin.Value; Console.WriteLine(str); Debug.Fail(str); } } if (audioAttrClipEnd != null && !string.IsNullOrEmpty(audioAttrClipEnd.Value)) { try { string strEndValue = audioAttrClipEnd.Value.Replace("npt=", ""); clipE = new Time(strEndValue); } catch (Exception ex) { clipE = new Time(0); string str = "CLIP END TIME PARSE FAIL: " + audioAttrClipEnd.Value; Console.WriteLine(str); Debug.Fail(str); } } ManagedAudioMedia media = null; ObiPresentation presentation = m_Presentation; WavAudioMediaData mediaData = (WavAudioMediaData) presentation.MediaDataFactory.CreateAudioMediaData(); // mediaData.AudioDuration DOES NOT WORK BECAUSE DEPENDS ON WAVCLIPS LIST!!! WavClip wavClip = new WavClip(dataProv); Time newClipE = clipE.Copy(); if (Math.Abs(newClipE.AsMilliseconds) > Math.Abs(wavClip.MediaDuration.AsMilliseconds)) { Console.WriteLine("clip adjusted. file size: " + wavClip.MediaDuration.AsMilliseconds + "; clip end: " + newClipE.AsMilliseconds); clipEndAdjustedToNull(clipB, newClipE, wavClip.MediaDuration, treeNode); //newClipE = wavClip.MediaDuration; newClipE = null; } try { mediaData.AppendPcmData(dataProv, clipB, newClipE); } catch (Exception ex) { #if DEBUG Debugger.Break(); #endif //DEBUG Console.WriteLine("CLIP TIME ERROR1 (end < begin ?): " + clipB + " (" + (audioAttrClipBegin != null ? audioAttrClipBegin.Value : "N/A") + ") / " + clipE + " (" + (audioAttrClipEnd != null ? audioAttrClipEnd.Value : "N/A") + ") === " + wavClip.MediaDuration); } //if (RequestCancellation) return null; media = presentation.MediaFactory.CreateManagedAudioMedia(); media.AudioMediaData = mediaData; return(media); }
private void parseSmil(string fullSmilPath) { Presentation presentation = m_Project.GetPresentation(0); string dirPath = Path.GetDirectoryName(m_Book_FilePath); XmlDocument smilXmlDoc = readXmlDocument(fullSmilPath); XmlNodeList listOfAudioNodes = smilXmlDoc.GetElementsByTagName("audio"); if (listOfAudioNodes != null) { foreach (XmlNode audioNode in listOfAudioNodes) { XmlAttributeCollection attributeCol = audioNode.Attributes; if (attributeCol != null) { XmlNode attrAudioSrc = attributeCol.GetNamedItem("src"); if (attrAudioSrc != null && !String.IsNullOrEmpty(attrAudioSrc.Value)) { XmlNode parent = audioNode.ParentNode; if (parent != null && parent.Name == "a") { parent = parent.ParentNode; } if (parent != null) { XmlNodeList listOfAudioPeers = parent.ChildNodes; foreach (XmlNode peerNode in listOfAudioPeers) { if (peerNode.NodeType == XmlNodeType.Element && peerNode.Name == "text") { XmlAttributeCollection peerAttrs = peerNode.Attributes; if (peerAttrs != null) { XmlNode attrTextSrc = peerAttrs.GetNamedItem("src"); if (attrTextSrc != null && !String.IsNullOrEmpty(attrTextSrc.Value)) { int index = attrTextSrc.Value.LastIndexOf('#'); if (index < (attrTextSrc.Value.Length - 1)) { string dtbookFragmentId = attrTextSrc.Value.Substring(index + 1); core.TreeNode tNode = getTreeNodeWithXmlElementId(dtbookFragmentId); if (tNode != null) { AbstractAudioMedia existingAudioMedia = tNode.GetAudioMedia(); if (existingAudioMedia != null) { //Ignore. //System.Diagnostics.Debug.Fail("TreeNode already has media ??"); } XmlNode attrClipBegin = attributeCol.GetNamedItem("clipBegin"); XmlNode attrClipEnd = attributeCol.GetNamedItem("clipEnd"); Media media = null; if (attrAudioSrc.Value.EndsWith("wav")) { string fullWavPath = Path.Combine(dirPath, attrAudioSrc.Value); PCMDataInfo pcmInfo = null; Stream wavStream = null; try { wavStream = File.Open(fullWavPath, FileMode.Open, FileAccess.Read, FileShare.Read); pcmInfo = PCMDataInfo.ParseRiffWaveHeader(wavStream); presentation.MediaDataManager.DefaultPCMFormat = pcmInfo.Copy(); TimeDelta duration = new TimeDelta(pcmInfo.Duration); Time clipB = Time.Zero; Time clipE = Time.MaxValue; if (attrClipBegin != null && !string.IsNullOrEmpty(attrClipBegin.Value)) { clipB = new Time(TimeSpan.Parse(attrClipBegin.Value)); } if (attrClipEnd != null && !string.IsNullOrEmpty(attrClipEnd.Value)) { clipE = new Time(TimeSpan.Parse(attrClipEnd.Value)); } if (!clipB.IsEqualTo(Time.Zero) || !clipE.IsEqualTo(Time.MaxValue)) { duration = clipE.GetTimeDelta(clipB); } long byteOffset = 0; if (!clipB.IsEqualTo(Time.Zero)) { byteOffset = pcmInfo.GetByteForTime(clipB); } if (byteOffset > 0) { wavStream.Seek(byteOffset, SeekOrigin.Current); } presentation.MediaDataFactory.DefaultAudioMediaDataType = typeof(WavAudioMediaData); WavAudioMediaData mediaData = (WavAudioMediaData) presentation.MediaDataFactory.CreateAudioMediaData(); mediaData.InsertAudioData(wavStream, Time.Zero, duration); media = presentation.MediaFactory.CreateManagedAudioMedia(); ((ManagedAudioMedia)media).AudioMediaData = mediaData; } finally { if (wavStream != null) { wavStream.Close(); } } } else { media = presentation.MediaFactory.CreateExternalAudioMedia(); ((ExternalAudioMedia)media).Src = attrAudioSrc.Value; if (attrClipBegin != null && !string.IsNullOrEmpty(attrClipBegin.Value)) { ((ExternalAudioMedia)media).ClipBegin = new Time(TimeSpan.Parse(attrClipBegin.Value)); } if (attrClipEnd != null && !string.IsNullOrEmpty(attrClipEnd.Value)) { ((ExternalAudioMedia)media).ClipEnd = new Time(TimeSpan.Parse(attrClipEnd.Value)); } } ChannelsProperty chProp = tNode.GetProperty <ChannelsProperty>(); if (chProp == null) { chProp = presentation.PropertyFactory.CreateChannelsProperty(); tNode.AddProperty(chProp); } chProp.SetMedia(m_audioChannel, media); break; // scan peers to audio node } else { System.Diagnostics.Debug.Fail("XmlProperty with ID not found ??"); } } } } } } } } } } } }
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); }
private Media addAudioWav(FileDataProvider dataProv, XmlNode audioAttrClipBegin, XmlNode audioAttrClipEnd) { Time clipB = Time.Zero; Time clipE = Time.MaxValue; if (audioAttrClipBegin != null && !string.IsNullOrEmpty(audioAttrClipBegin.Value)) { try { clipB = Time.ParseTimeString(audioAttrClipBegin.Value); } catch (FormatException e) { clipB = new Time(0); string str = "bad time string: " + audioAttrClipBegin.Value; Console.Write(str); Debug.Fail(str); } } if (audioAttrClipEnd != null && !string.IsNullOrEmpty(audioAttrClipEnd.Value)) { try { clipE = Time.ParseTimeString(audioAttrClipEnd.Value); } catch (FormatException e) { clipE = new Time(0); string str = "bad time string: " + audioAttrClipEnd.Value; Console.Write(str); Debug.Fail(str); } } Media media = null; Presentation presentation = m_Project.Presentations.Get(0); //if (deleteSrcAfterCompletion) //{ presentation.MediaDataFactory.DefaultAudioMediaDataType = typeof(WavAudioMediaData); WavAudioMediaData mediaData = (WavAudioMediaData) presentation.MediaDataFactory.CreateAudioMediaData(); //FileDataProvider dataProv = m_Src_FileDataProviderMap[fullWavPath]; //System.Windows.Forms.MessageBox.Show ( clipB.ToString () + " : " + clipE.ToString () ) ; mediaData.AppendPcmData(dataProv, clipB, clipE); media = presentation.MediaFactory.CreateManagedAudioMedia(); ((ManagedAudioMedia)media).AudioMediaData = mediaData; //} /* else * { * * uint dataLength; * AudioLibPCMFormat pcmInfo = null; * Stream wavStream = null; * try * { * wavStream = File.Open(fullWavPath, FileMode.Open, FileAccess.Read, FileShare.Read); * * pcmInfo = AudioLibPCMFormat.RiffHeaderParse(wavStream, out dataLength); * * //if (m_firstTimePCMFormat) * //{ * // presentation.MediaDataManager.DefaultPCMFormat = new PCMFormatInfo(pcmInfo); * // m_firstTimePCMFormat = false; * //} * * TimeDelta clipDuration = new TimeDelta(pcmInfo.ConvertBytesToTime(dataLength)); * if (!clipB.IsEqualTo(Time.Zero) || !clipE.IsEqualTo(Time.MaxValue)) * { * clipDuration = clipE.GetTimeDelta(clipB); * } * else * { * System.Diagnostics.Debug.Fail("Audio clip with full duration ??"); * } * * long byteOffset = 0; * if (!clipB.IsEqualTo(Time.Zero)) * { * byteOffset = pcmInfo.ConvertTimeToBytes(clipB.TimeAsMillisecondFloat); * } * if (byteOffset > 0) * { * wavStream.Seek(byteOffset, SeekOrigin.Current); * } * * presentation.MediaDataFactory.DefaultAudioMediaDataType = * typeof (WavAudioMediaData); * * WavAudioMediaData mediaData = * (WavAudioMediaData) * presentation.MediaDataFactory.CreateAudioMediaData(); * * * mediaData.InsertPcmData(wavStream, Time.Zero, clipDuration); * * media = presentation.MediaFactory.CreateManagedAudioMedia(); * ((ManagedAudioMedia) media).AudioMediaData = mediaData; * } * finally * { * if (wavStream != null) wavStream.Close(); * } * * } */ return(media); }