无限期系统扬声器蜂鸣

Posted

技术标签:

【中文标题】无限期系统扬声器蜂鸣【英文标题】:Indefinite system speaker beep 【发布时间】:2010-01-20 20:41:27 【问题描述】:

现在,我知道我可以使用Console.Beep 播放一段设定持续时间的哔哔声,但我正在寻找一种可以无限期播放特定频率声音的方法,例如启动和停止功能。有什么想法吗?

【问题讨论】:

你的用户会讨厌你 见这里:***.com/questions/1195828/… 我进行了搜索,但没有找到任何东西。我想我应该搜索更多。 我也喜欢另一个问题的解决方案,它显示了我不知道的控制台方法的过载。谢谢! @icambron:这种哔哔声有非常合法的用途。例如,在无头机器上。 【参考方案1】:

如果您想发出不同于控制台命名空间中提供的哔声,您必须直接与扬声器交谈。使用 Kernel32.dll 执行此操作,如下所示:

首先确保包含互操作:

using System.Runtime.InteropServices;

然后为 Beep 添加 extern 方法,并在您的其他方法中使用它,这个方法会以您给它的频率发出任意长的蜂鸣声。

[DllImport("Kernel32.dll")]
public static extern bool Beep(Int32 frequency, Int32 duration);
public static void BeepFor(int mSec, int freq)

  int Frequency = freq;
  int DurationInMS = mSec;
  Beep(Frequency, DurationInMS);

【讨论】:

这与 Console.Beep 不同...如何?这基本上就是 Console.Beep 所调用的。 这是完全一样的东西。 是的,因此不是我要找的。​​span> 这不是一个好主意。我只是将您的代码复制过来尝试一下。我第一次没有听到哔哔声,所以我把声音调高了——仍然没有。然后把它放在 1000 的循环中。......不用说,我只是心脏病发作。【参考方案2】:

您也许可以使用MIDI。

您还可以使用指定 SND_LOOP 和 SND_ASYNC 的 PlaySound API 调用循环 WAV 文件。

在现代 PC 上无限期播放相同声音的概念有些变化无常,除非您处于可以编写和控制无限循环的硬件级别,或者只是以特定频率“打开”扬声器。更高级别的 API 和编程语言不允许这样做,因为在那个级别上,操作系统会强迫您与其他应用程序一起玩。

编辑

还应注意,Beep 调用的持续时间以毫秒为单位,它确实采用 Int32 值。 Int32.MaxValue 毫秒是很长的时间。可能比任何人都无法忍受听到哔哔声。

【讨论】:

【参考方案3】:

在这些问题中,第一反应应该是:

你真正想要完成什么。您真的想要无限期的哔声,还是想要更长时间地播放声音?

【讨论】:

以上是关于无限期系统扬声器蜂鸣的主要内容,如果未能解决你的问题,请参考以下文章

PC扬声器通过javascript发出哔哔声?

在bash脚本/命令中,如何使PC发出蜂鸣声或播放声音文件?

arduino蜂鸣器声音大小用哪个函数表示

如何在我的 python 项目中添加蜂鸣器? [复制]

在 Windows 2008/7/Vista 中使 Windows 服务蜂鸣

两款扁平表贴式扬声器