我正在开发一个 VSTO PowerPoint 插件,其中涉及录制和播放声音。我在最后一刻被要求允许用户选择播放声音的设备,就像 Skype 那样。
一般来说,我认为不可能指定 PowerPoint 应使用的设备,除非在控制面板中选择默认设备,而我无法以编程方式执行此操作。不过,我可以识别我的外接程序录制的声音,因为它们作为 SoundEffect 嵌入到我标记的形状中。
我的问题是:是否可以直接访问 .wav 文件 - 类似于SoundEffect.ImportFromFile ,但在另一个方向呢?如果我能做到这一点,我就可以使用加载项代码而不是 PowerPoint 打开并播放 .wav 文件。
[编辑:直接,我的意思是“无需以不同的格式保存演示文稿”]
或者,有没有办法在演示文稿中添加和检索二进制文件作为嵌入内容?
我怀疑这是不可能的,但如果有人知道,我会在 StackOverflow 上找到那个人!
最佳答案
两者都有可能。
从 PPTX 中提取 WAV:所有嵌入媒体都位于 .pptx\ppt\media 文件夹中(将 .pptx 重命名为 .zip,解压缩并导航到\ppt\media)。它们通常按照添加和/或处理的顺序依次编号。 AFAIK,叙述总是嵌入的并且从不链接。问题将是确定要提取的确切内容 - 这可以通过在添加到 pptx 时添加标签或其他唯一标识符来解决。提取它的方法是使用 Open XML SDK(或直接使用 System.IO.Packaging)并打开当前演示文稿的内存中副本,在文件夹中找到 .wav(我使用 Linq-to-XML 来找到我需要的内容)并将其读入内存流,以便写入磁盘进行播放,或者如果您的加载项可以从内存流播放,那就更好了。
PPTX 中的二进制类型:任何内容都可以进入 Open XML 文档,但关键是让它保留在那里。有关详细信息,请参阅此答案 - Is it possible to add some data to a Word document? .
关于vba - 以编程方式从 PowerPoint 演示文稿中提取嵌入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3550417/