2

在 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 Audio”。我没有收到任何编译器警告或错误,运行程序时也没有引发异常。我只是听不到任何声音。我的扬声器已打开,我可以使用 Windows Media Player 播放文件。

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

4

2 回答 2

1

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

有一个 PlaySync() 方法不会产生新线程,因此将保持控制台应用程序线程处于活动状态,直到它完成播放您的声音。

于 2014-03-02T19:44:09.933 回答
0

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

我将您的代码复制并粘贴到新的“Visual C# 控制台应用程序”的主目录中。我添加了“使用 System.Text;” 文件顶部的行,编译,单步执行,它工作了。当我运行它(没有调试)时,我没有声音。

如果添加该行:

System.Threading.Thread.Sleep(2000);

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

于 2012-08-06T21:45:24.730 回答