在WPF中播放声音作为资源

Typ*_*GC7 0 c# audio wpf resources

首先,我搜索了网站并查看了这个,但遗憾的是它对我没什么帮助.

每当我点击我制作的青蛙图像时,我想播放.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();
}
Run Code Online (Sandbox Code Playgroud)

当然这有效但我的问题是目录从计算机变为计算机,所以我认为我必须将其作为资源来播放.我不知道该怎么做.我是一个相当新的程序员,只是为了记住.

我尝试了一些基于前面提到的链接的变化,并玩了它.例子:

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();
}
Run Code Online (Sandbox Code Playgroud)

我也试过这样做,虽然我认为这个不行,但我还是尝试过:

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();
}
Run Code Online (Sandbox Code Playgroud)

我不确定" 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();
}
Run Code Online (Sandbox Code Playgroud)

所以,而不是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();
}
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*dle 10

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

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

    var notificationSound = new SoundPlayer(Timer.Properties.Resources.NotificationSound);
    notificationSound.PlaySync();
    
    Run Code Online (Sandbox Code Playgroud)

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