Программно воспроизводить звук фигуры в PowerPoint - PullRequest
5 голосов
/ 31 июля 2010

Я работаю над надстройкой 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 для ранее созданных фигур ...

Я был бы удивлен, если бы это было неосуществимо, но я не могу найти, как - любая помощь будет высоко ценится!

1 Ответ

4 голосов
/ 31 июля 2010

Извините за 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
...