// before we embed we need to check if we have any old shape on the slide. If // we have, we need to delete it AFTER the new shape is inserted to preserve // the original timeline. public void EmbedOnSlide(PowerPointSlide slide, int clickNumber) { var isOnClick = clickNumber > 0; var shapeName = Name; if (slide != null) { // embed new shape using two-turn method. In the first turn, embed the shape, name it to // something special to distinguish from the old shape; in the second turn, delete the // old shape using timeline invariant deletion, and rename the new shape to the correct // name. try { var audioShape = AudioHelper.InsertAudioFileOnSlide(slide, SaveName); audioShape.Name = "#"; slide.RemoveAnimationsForShape(audioShape); if (isOnClick) { slide.SetShapeAsClickTriggered(audioShape, clickNumber, MsoAnimEffect.msoAnimEffectMediaPlay); } else { slide.SetAudioAsAutoplay(audioShape); } // delete old shape slide.DeleteShapesWithPrefixTimelineInvariant(Name); audioShape.Name = shapeName; } catch (COMException) { // Adding the file failed for one reason or another - probably cancelled by the user. } } else { MessageBox.Show("Slide selection error"); } }
/// <summary> /// Initialize Audio from a sound shape /// </summary> public Audio(Shape shape, string saveName) { // detect audio type from shape tag AudioType audioType = GetShapeAudioType(shape); this.Type = audioType; // derive matched id from shape name string[] temp = shape.Name.Split(new[] { ' ' }); if (temp.Length < 3) { throw new FormatException(NarrationsLabText.RecorderUnrecognizeAudio); } this.MatchScriptID = Int32.Parse(temp[2]); // get corresponding audio this.Name = shape.Name; this.SaveName = saveName; this.Length = AudioHelper.GetAudioLengthString(saveName); this.LengthMillis = AudioHelper.GetAudioLength(saveName); }