在WPF中播放声音作为资源

时间:2015-04-10 02:32:53

标签: c# wpf audio resources

首先,我搜索了网站并查看了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:可能的重复技术上并没有解决我的问题,但根据接受的答案,这是不可能的。有没有其他方法可以使用不同的方法播放音频?

1 个答案:

答案 0 :(得分:10)

这适用于我使用Visual Studio 2013和命令行应用程序:

  • 将.wav文件作为资源(Resources.resx)嵌入项目中
    • 我使用了从现有文件中添加资源
    • 将文件的持久性设置为'在编译时链接'
  • 使用类似的东西从代码中引用文件。 Timer是这段代码的命名空间,而NotificationSound就是我所说的嵌入式声音:

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

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