我正在制作VSTO PowerPoint插件,其中包括录制和播放声音。我在最后一分钟被要求允许用户选择将播放声音的设备,就像Skype一样。
一般情况下,我不认为可以指定PowerPoint应该使用哪种设备,除非在控制面板中选择默认设备,我无法以编程方式执行此操作。但是我可以识别我的加载项录制的声音,因为它们在我标记的Shapes中作为SoundEffect嵌入。
我的问题是:是否可以直接访问.wav文件 - 类似于SoundEffect.ImportFromFile,但在另一个方向?如果我能做到这一点,我可以使用加载项代码打开并播放.wav文件,而不是PowerPoint。
[编辑:直接,我的意思是“无需以不同的格式保存演示文稿”]
或者,有没有办法在演示文稿中添加和检索二进制文件作为嵌入内容?
我怀疑这是不可能的,但如果有人知道,我会在StackOverflow上找到那个人!
答案 0 :(得分:4)
两者都有可能。
从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?。