c# 在构建中有声音文件

Posted

技术标签:

【中文标题】c# 在构建中有声音文件【英文标题】:c# have sound files in build 【发布时间】:2017-10-11 14:27:21 【问题描述】:

我需要为学校制作游戏。

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

我在类中有指向 .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()

显示为假。

在文件上我将属性设置为:

构建操作:资源

复制到输出目录:总是复制

我希望有人可以帮助我。

【问题讨论】:

你用s做什么? 我需要这样做才能使用“pack://.....” 发现在互联网上其他人也有同样的问题。 除了基本的 winforms 应用程序之外,您还在做其他事情吗?是 UWP 还是类似的东西? 您是否尝试将“构建操作”设置为资源 - 您不需要复制文件,因为它将包含在应用程序中(至少在 WPF 中)。 它是一个 Windows Forms 应用程序(visual studio -> 新项目 -> 'Windows Forms App (.NET Framework)) 【参考方案1】:

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

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

您需要Content 而不是Resource 的原因在于Remarks section of the MediaPlayer class documentation:

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

【讨论】:

这是奇怪的部分。它不会将其复制到该文件夹​​。如果是这样就足够了。 它现在复制它。但仍然不是正确的道路。我是否需要在路径的其余部分前面放置“组件” 我现在希望 URI 只是您的 wav 文件的路径。请参阅:***.com/questions/22745278/how-to-play-a-sound-file

以上是关于c# 在构建中有声音文件的主要内容,如果未能解决你的问题,请参考以下文章

C# WINFROM怎么播放声音文件? 我把声音文件放在BIN目录下 结果报错说啥找不到文件

C#中的声音,将音频文件放在哪里?

在 C# 中播放声音 (WMA) 文件的一部分

使用 c# wpf 从资源文件播放声音

从数组播放声音会返回错误 C# - Visual Studio

如何在 WPF 中播放声音