SoundPlayer未播放任何捆绑的windows声音PCM wav文件

本文关键字:声音 PCM wav 文件 windows 播放 任何捆 SoundPlayer | 更新日期: 2024-10-19 20:00:08

在C#中,我无法使用以下代码从System.Media获得SoundPlayer类来播放C:''Windows''Media文件夹中的任何wav。我得到的只是没有声音:

String filename = "C:''Windows''Media''tada.wav";
SoundPlayer sp = new SoundPlayer(filename);
sp.Load();
sp.Play();

我用一个名为"Gspot"的程序检查了波形文件"tada.wav",该程序告诉我音频编解码器是"PCM音频"。我没有收到任何编译器警告或错误,运行程序时也没有出现异常。我就是听不到任何声音。我的扬声器打开了,我可以用Windows Media Player播放文件。

将wav添加为项目资源没有任何区别。有人能帮我弄清楚为什么我听不到声音吗?

SoundPlayer未播放任何捆绑的windows声音PCM wav文件

Play()方法在单独的线程中播放声音。也就是说,控制台应用程序会旋转一个新的线程来播放声音。这对于Windows应用程序来说非常棒,这样声音播放就不会停止Windows主线程。在控制台应用程序中,当父线程结束时,子线程也会全部死亡。——因此没有声音。

有一个PlaySync()方法不会产生新的线程,因此会保持控制台应用程序线程的活力,直到它播放完你的声音。

您是否将其用作控制台应用程序中main()方法的主体?应用程序可能正在结束,从而关闭播放音频的线程。

我将您的代码复制并粘贴到一个新的"Visual C#控制台应用程序"的主体中。我在文件的顶部添加了"using System.Text;"一行,对其进行了编译、逐步遍历,结果就成功了。当我运行它(没有调试)时,我没有声音。

如果添加行:

System.Threading.Thread.Sleep(2000);

调用Play()后,应用程序将停留足够长的时间来播放音频。

对我来说(VS 2022,.net 6,C#10)它起作用了:

  1. 导入";tada.wav";文件保存到主目录中。

  2. 更改:属性(tada.wav)-复制到输出目录到:始终复制。后来,它足以:

     SoundPlayer player = new SoundPlayer("tada.wav");
     player.Load ();
     player.Play ();