c#在构建中有声音文件

时间:2017-10-11 14:27:22

标签: c# build uri pack-uri

我需要为学校制作游戏。

我正在添加一些音效和音乐。

我在课堂上有.wav的路径,它会播放它们,但只有当我从项目中的bin地图开始游戏时。我发现文件不包含在构建内部。我开始寻找它,但找不到正确的方法。

我有:

MediaPlayer _musicPlayer = new MediaPlayer();
string s = System.IO.Packaging.PackUriHelper.UriSchemePack;
Uri uri = new Uri(@"pack://application:,,,/{Assembly name};component/Resources/Sounds/Music/Main_theme_-_Thiago_Adamo.wav")
_musicPlayer.Open(uri);
_musicPlayer.Play();

然而,这不起作用。如果我添加一个消息框:

uri.IsFile.ToString()

显示错误。

在文件中我设置了以下内容:

构建操作:资源

复制到输出目录:始终复制

我希望有人可以帮助我。

1 个答案:

答案 0 :(得分:2)

将文件添加到Visual Studio中的解决方案中的项目中,以便它们显示在解决方案资源管理器中(默认情况下停靠在VS窗口的右侧)。单击一个文件,以便您看到该文件的属性窗口(默认情况下,在VS中的解决方案资源管理器下方显示)。确保Copy to Output Directory属性设置为Copy AlwaysCopy if newerBuild Action设置为Content。为您需要的每个声音文件执行此操作。

此时,文件将在构建时复制到与应用程序相同的文件夹中。 它们不会打包。它们只是在您的程序旁边的文件系统中。如果在调试模式下构建应用程序,则它位于项目的/ bin / Debug文件夹中(默认情况下)。如果是发布模式,则它是/ bin / Release文件夹,但只要您的工作目录与您的应用程序匹配,您就可以仅通过文件名在Uri中引用它们(否则您需要到check the application path并构建文件的完整路径)。

您需要Content代替Resource的原因在于Remarks section of the MediaPlayer class documentation

  

在使用应用程序分发媒体时,不能将媒体文件用作项目资源。在项目文件中,您必须将媒体类型设置为Content,并将CopyToOutputDirectory设置为PreserveNewest或Always。