在没有目录的wpf中使用.wav文件

时间:2012-05-18 05:40:49

标签: wpf wav

您好我有一个wpf应用程序,可以在按钮点击等事件上播放声音。我现在的代码现在播放声音文件,但我意识到它必须在另一个文件夹中,例如,如果用户删除,使应用程序几乎无法使用。 我想知道,如果不在应用程序发布目录中创建一个全新的文件夹,我怎么能得到一个.wav文件。 有任何想法吗? 感谢。

2 个答案:

答案 0 :(得分:0)

如果.wav文件在根目录中添加到项目中,则标记为内容(右键单击.wav文件并单击属性。然后将构建操作更改为内容)然后将其直接复制到根输出夹

您可以在代码或XAML中引用wav文件作为相对路径(简单的“Myfile.wav”)

我相信这就是你要求的?

答案 1 :(得分:0)

如何将.wav文件作为嵌入式资源放入dll中?

只需将文件添加到项目中,右键单击该文件并将 Build Action 设置为 Embedded Resource

然后您可以将.wav文件作为流加载并将其保存到光盘中,如下所示:

private void WriteEmbeddedResourceToFile(string writePath, string assemblyName)
    {
        Assembly asm = Assembly.GetExecutingAssembly();
        Stream s = asm.GetManifestResourceStream(assemblyName);
        if (s != null)
        {
            var file = new byte[s.Length];
            s.Read(file, 0, (int)s.Length);
            File.WriteAllBytes(writePath, file);
            s.Close();
        }
    }

字符串 assemblyName 必须像这样设置: namespace。(如果你把文件放在一个文件夹中,在这里插入文件夹子路径).filename.wav

或者,您可以将其保存到光盘,然后直接使用该流:

private byte[] GetEmbeddedResource(string assemblyName)
    {
        Assembly asm = Assembly.GetExecutingAssembly();
        Stream s = asm.GetManifestResourceStream(assemblyName);
        if (s != null)
        {
            var file = new byte[s.Length];
            s.Read(file, 0, (int)s.Length);
            s.Close();
            return file;
        }
    }

然后,当你想加载文件时,GetEmbeddedResource将返回字节数组。