【问题标题】:Programmatically play the sound of a shape in PowerPoint在 PowerPoint 中以编程方式播放形状的声音
【发布时间】:2011-03-23 12:05:16
【问题描述】:

我正在开发 PowerPoint 2007 VSTO 加载项,但我遇到了一个小问题。该插件使用以下代码向当前幻灯片添加声音:

var shape = slide.Shapes.AddMediaObject(soundFileLocation, 50, 50, 20, 20);

生成的形状确实有声音,并且可以通过 PowerPoint 幻灯片播放。我的问题是,给定一个以这种方式创建的形状的引用,我想以编程方式播放声音,但我找不到这样做的方法。我试过了

var soundEffect = shape.AnimationSettings.SoundEffect;
soundEffect.Play();

但这失败/崩溃,当我检查 soundEffect 时,它的类型是 ppSoundNone。
编辑: 取得了部分成功

var shape = slide.Shapes.AddMediaObject(fileLocation, 50, 50, 20, 20);
shape.AnimationSettings.SoundEffect.ImportFromFile(fileLocation);

这样做可以让我播放声音:

var animationSettings = shape.AnimationSettings;
var soundEffect = shape.AnimationSettings.SoundEffect;
soundEffect.Play();

但是有一个主要问题;这仅适用于添加的最后一个形状。出于某种原因,shape.AnimationSettings.SoundEffect.ImportFromFile(fileLocation) 似乎将 SoundEffect 属性重置为 ppSoundNone 用于先前创建的形状...

如果这不可行,我会感到惊讶,但我似乎无法找到方法 - 任何帮助将不胜感激!

【问题讨论】:

    标签: automation audio vsto powerpoint


    【解决方案1】:

    对 VBA 感到抱歉,但它可以轻松移植到 C#。以下是可行的方法:

    Sub addsound1()
        Dim ap As Presentation : Set ap = ActivePresentation
        Dim sl As Slide : Set sl = ap.Slides(1)
        Dim audioShape As Shape
        soundFileLocation = "C:\droid_scan.wav"
        Set audioShape = sl.Shapes.AddShape(msoShapeActionButtonSound, 100, 100, 50, 50)
        With audioShape.ActionSettings(ppMouseClick)
            .Action = ppActionNone
            .SoundEffect.ImportFromFile soundFileLocation
        End With
    End Sub
    Sub addsound2()
        Dim ap As Presentation : Set ap = ActivePresentation
        Dim sl As Slide : Set sl = ap.Slides(1)
        Dim audioShape As Shape
        soundFileLocation = "C:\droid_scan2.wav"
        Set audioShape = sl.Shapes.AddShape(msoShapeActionButtonSound, 50, 50, 50, 50)
        With audioShape.ActionSettings(ppMouseClick)
            .Action = ppActionNone
            .SoundEffect.ImportFromFile soundFileLocation
        End With
    End Sub
    
    Sub PlaySound1()
        Dim sh As Shape
        Set sh = ActivePresentation.Slides(1).Shapes(1)
        sh.ActionSettings(ppMouseClick).SoundEffect.Play
    End Sub
    
    Sub PlaySound2()
        Dim sh As Shape
        Set sh = ActivePresentation.Slides(1).Shapes(2)
        sh.ActionSettings(ppMouseClick).SoundEffect.Play
    End Sub
    

    【讨论】:

    • 感谢您为我指明 TimeLine 对象的方向。但是,我仍然坚持如何触发声音在代码中播放。我的理解是我需要从某个地方获取一个 SoundEffect 对象,这样我才能调用 SoundEffect.Play()。使用此代码后,shape.AnimationSettings.SoundEffect 仍然没有给我可以 Play() 的东西,而且我不太明白如何使用 TimeLine 来获得可播放的东西。你能提供任何指导吗? Ppt对象对我来说还是很神秘的……
    • @Mathias:除了上面的PlaySettings 设置之外,你还想怎么玩?例如,您是否打算进入 SlideShowView,然后单击字母“P”后它会播放?或者您是否希望单击一个对象,例如一个形状,然后它会播放?或者你想在普通视图中播放它?我正在尝试了解您的期望,然后我可以更新代码。需要注意的一点是,这首先不是真正的“媒体对象”,然后才是“动画”——首先是动画,因此“播放”之类的内容并不是您所期望的。
    • 对不起,如果我的情况不清楚。我想做的是从代码中触发播放,而不是通过演示文稿。粗略地说,我的加载项维护了一个有声音的形状的集合,显示在一个列表框中。当用户选择一个项目时,我可以访问该形状,并且我希望播放声音。这不是幻灯片放映模式,而是普通模式(幻灯片设计)。 AddMediaObject 创建在幻灯片放映模式下播放声音的可点击形状,我正在寻找一种以编程方式在“设计”模式下播放附加到形状的声音的方法。
    • @Mathias:在普通视图中播放 - 我不知道如何做到这一点。对象模型不支持这个。
    • 呃,这是个坏消息。我让它与旁白一起工作,希望同样适用于“声音”形状。
    猜你喜欢
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多