在 WPF 中作为资源播放声音

Playing sounds in WPF as a resource

首先,我搜索了该站点并查看了 this,但不幸的是,它对我帮助不大。

每当我单击自己制作的青蛙图像时,我都想播放一个 .wav 文件作为资源。这是我的代码:

void newFrog_MouseUp(object sender, MouseButtonEventArgs e)
{
    System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"G:\COSR3S\FrogsAndLilyPads\FrogsAndLilyPads\Sounds\FrogCroak.wav");
    player.Play();
}

当然这行得通,但我的问题是目录会随着计算机的不同而变化,所以我想我必须将它作为一种资源来播放。我不知道该怎么做。我是一个相当新的程序员,请记住。

我在上述 link 的基础上尝试了一些变体并尝试了一下。示例:

void newFrog_MouseUp(object sender, MouseButtonEventArgs e)
{
    Uri uri = new Uri(@"pack://application:,,,/Sounds/FrogCroak.wav");
    var player = new MediaPlayer();
    player.Open(uri);
    player.Play();
}

我也试过这样做,虽然我觉得这个不行,但我还是试了一下:

void newFrog_MouseUp(object sender, MouseButtonEventArgs e)
{
    Uri uri = new Uri(@"pack://application:,,,/Sounds/FrogCroak.wav");
    System.Media.SoundPlayer player = new System.Media.SoundPlayer(uri);
    player.Play();
}

我不确定“pack://application:,,,”是否指的是正在播放的文件。

我也试着把它做成一张图片,像这样:

void newFrog_MouseUp(object sender, MouseButtonEventArgs e)
{
    System.Media.SoundPlayer player = new System.Media.SoundPlayer(new Uri(@"pack://application:,,,/Sounds/FrogCroak.wav", UriKind.RelativeOrAbsolute));
    player.Play();
}

所以我没有new BitmapImage而是new System.Media.SoundPlayer,结果发现它不会那样工作。

编辑:我忘了说这行得通,但没有播放任何声音。

void newFrog_MouseUp(object sender, MouseButtonEventArgs e)
{
    Uri uri = new Uri(@"pack://application:,,,/Sounds/FrogCroak.wav");
    var player = new MediaPlayer();
    player.Open(uri);
    player.Play();
}

Edit2:技术上可能的重复并没有解决我的问题,但根据接受的答案,这是不可能的。有没有其他方法可以使用不同的方法播放音频?

这对我使用 Visual Studio 2013 和命令行应用程序很有效:

  • 将 .wav 文件作为资源 (Resources.resx) 嵌入到项目中
    • 我使用了从现有文件添加资源
    • 将文件的持久性设置为 'Linked at compile time'
  • 使用类似这样的代码从代码中引用文件。 Timer 是这段代码来自的命名空间,NotificationSound 是我所说的嵌入式声音:

    var notificationSound = new SoundPlayer(Timer.Properties.Resources.NotificationSound);
    notificationSound.PlaySync();
    

这让我可以在移动可执行文件并重命名原始声音文件后播放来自应用程序的声音(只是为了检查它是否实际嵌入)。