2

我有一个 Visual C++/CLI 应用程序,它使用哔哔声来表示好的和坏的结果(当用户看不到屏幕时使用)。

目前,我使用低音哔哔声来获得不好的结果,使用高音哔声来获得良好的结果:

if( goodResult == true )
{
    Beep(1000, 40);
}
else
{
    Beep(2000, 20);
}

这在我的 Vista 笔记本电脑上运行良好,但我已经在其他笔记本电脑上尝试过,有些似乎播放声音的时间更短(它们听起来更像是咔哒声而不是哔哔声)或者声音根本不播放。

所以我在这里有两个问题:

  1. 有更可靠的蜂鸣功能吗?
  2. 有没有一种(简单的)方法可以播放一个简短的 .wav 文件或类似的文件(首选解决方案)。
4

5 回答 5

3

Beep功能传统上使用 PC 扬声器,我想它现在或多或少已经过时了。我猜该功能是由笔记本电脑的 BIOS 处理的,因此取决于硬件。我建议您改用 PC:s 声卡播放声音。

在例如Audacity中创建两个音调作为 WAV 文件,然后使用例如PlaySound播放它们。

于 2010-06-15T10:58:21.090 回答
1

根据 Krumelur 的回答,我得到了一个相当简洁的解决方案,它将 .wav 嵌入到可执行文件中。它使用SoundPlayer而不是PlaySound函数。

对于 Visual C++ / CLI 项目,添加嵌入式资源似乎与 .net 支持的其他语言略有不同:

  1. 右键单击项目并选择Properties.
  2. 导航到Configuration Properties -> Linker -> Input
  3. 将路径添加到您要嵌入的 .wav 文件(在我的例子中是$(ProjectDir)\Audio\PingSend.wav)。

要播放 .wav 的简单调用之一:

System::IO::Stream^ s = Assembly::GetExecutingAssembly()->GetManifestResourceStream("PingSend.wav");
System::Media::SoundPlayer^ pingPlayer = gcnew System::Media::SoundPlayer(s);
pingPlayer->Play();

..它应该在新线程中播放声音。

于 2010-06-15T14:04:01.420 回答
0

也许语音合成可能是合适的,不确定,我假设您的用户是盲人。

http://msdn.microsoft.com/en-us/library/system.speech.synthesis.speechsynthesizer.aspx

于 2010-06-15T10:53:41.760 回答
0

看起来可能有使用 winmm 库的解决方案

于 2010-06-15T11:00:58.143 回答
0

Windows MessageBeep功能将使用正确的参数播放默认错误、OK 或警报系统声音。因此,实际播放的声音和音量由用户控制,但应该可以识别为错误或正常。

于 2010-06-15T11:05:08.317 回答