9

我正在尝试播放位于我项目内的文件夹中的 .Wav 文件。

声音文件位于“Resource/Sounds/slot_roll_on.Wav”

资源文件夹是我自己创建的文件夹,在项目的根目录中。

这是我用来运行 .wav 文件的代码

        Assembly a = Assembly.GetExecutingAssembly();
        Stream s = a.GetManifestResourceStream("kisscam.g.resources.Resources.Sounds.slot_roll_on.wav");
        SoundPlayer snd = new SoundPlayer(s);
        snd.Play();

我无法播放声音,我不断收到 windows 声音,因为没有找到声音。

在堆栈溢出的某个地方,我发现了这段代码来找到正确的汇编路径应该是什么。

            Assembly a = Assembly.GetExecutingAssembly();
            string[] resourceNames = Assembly.GetExecutingAssembly().GetManifestResourceNames();
            int i;
            for (i = 0; i < resourceNames.Length; i++)
            {

                MessageBox.Show(resourceNames[i]);


            }

它输出这两条路径

kisscam.Properties.Resources.resources

kissscam.g.resources

我尝试同时使用它们,但它们都不起作用。

有人知道我在做什么错吗?

4

3 回答 3

15

通过转到您的项目属性-> 资源选择音频并浏览到文件,将您的 Wav 文件添加到资源中。然后,您将能够将其视为 pf 部分Propeties.Resources。它会将其添加到资源文件夹中,您可以在其中将其设置为嵌入或保持原样,将其设置为内容

在此处输入图像描述

像这样访问

private void button1_Click(object sender, EventArgs e)
{
    SoundPlayer snd = new SoundPlayer( Properties.Resources.tada);
    snd.Play();

}
于 2013-01-24T00:37:52.037 回答
7

如果您想通过在项目中播放.wav文件来在程序中添加音乐。然后你必须像这样添加.wav文件。

   using System.Media; //  write down it at the top of the FORM

   SoundPlayer my_wave_file = new SoundPlayer("F:/SOund wave file/airplanefly.wav");
   my_wave_file.PlaySync(); // PlaySync means that once sound start then no other activity if form will occur untill sound goes to finish

请记住,文件的路径必须用正斜杠(/)格式写入,在给文件路径时不要使用反斜杠(),否则会报错

于 2014-03-05T15:42:31.187 回答
2

目前我知道两种方法,见下文:

  1. 使用文件路径
    先把文件放在项目的根目录下,然后无论你在Debug还是Release模式下运行程序,都可以肯定地访问到文件。接下来使用该类SoundPlayer来播放它。

        var basePath = System.AppDomain.CurrentDomain.BaseDirectory;
        SoundPlayer player = new SoundPlayer();
        player.SoundLocation = Path.Combine(basePath, @"./../../Reminder.wav");
        player.Load();
        player.Play();
    
  2. 使用资源
    按照下面的动画,将“现有文件”添加到项目中。

在此处输入图像描述

        SoundPlayer player = new SoundPlayer(Properties.Resources.Reminder);
        player.Play();

这种方式相对于其他方式的优势在于:
运行程序时只需要复制“bin”目录下的“Release”文件夹即可。

于 2019-01-24T02:29:38.470 回答