"\a" 和 Console.Beep() 方法播放相同的哔声吗?
Posted
技术标签:
【中文标题】"\\a" 和 Console.Beep() 方法播放相同的哔声吗?【英文标题】:Do "\a" and the Console.Beep() method play the same beep?"\a" 和 Console.Beep() 方法播放相同的哔声吗? 【发布时间】:2013-02-10 13:50:31 【问题描述】:\a
是一个escape sequence
,它代表字符常量上的铃声提醒。来自MSDN的Console.Beep()
方法解释:
通过控制台扬声器播放哔声。
让我们考虑这个示例代码:
public static void Main(string[] args)
Console.WriteLine("\a");
Console.Beep();
这段代码会发出 2 声哔哔声,它们听起来一样。现在我需要看看证据。
当我反编译Console.Beep()
方法时,它使用了来自kernel32.dll的Win32Native.Beep
;
public static void Beep(int frequency, int duration)
Win32Native.Beep(frequency, duration);
它们的频率和持续时间可能不同,我不说这些东西,但它们的来源是否相同(Win32Native.Beep
)? \a
将哪个来源用于铃声提醒?
【问题讨论】:
我想说这些是不同的,因为\a
不是您可以提供频率或持续时间的东西。当然,当显示\a
时,操作系统最终可能会在后台调用具有硬编码值的相同代码。
然而,相当学术,不是吗?不是你面临的真正问题,嗯?
@Oded 是的,这不是我面临的大 问题,但我总是想知道它们是否存在。当然\a
没有频率或持续时间,但我更喜欢证明而不只是称它们为不同。
你想要什么样的证明?通过检查音频还是检查代码?
【参考方案1】:
这是我通过检查音频所能收集到的信息(Windows 7 64 位(是的,我必须重新启动到 Windows,我很专注:))。我使用 Fraps 录制了音频,所以它应该是可靠的。
这是我用来检查它们的代码:
using System;
using System.Threading;
namespace ***
class Program
private static void Main(string[] args)
Console.Write("\a");
Thread.Sleep(500);
Console.Beep();
这是 Audacity 中的两条轨道(Console.Write('\a')
是上面的轨道,Console.Beep()
是下面的轨道)。
在我放大轨道的任何时候,正弦波彼此完全匹配,并且它们具有完全相同的持续时间,所以我必须得出结论它们实际上是相同的(在 Windows 7 上是)。
【讨论】:
好吧,感谢您的回答和您的努力,但我实际上想知道他们是否使用相同的 dll。但不幸的是,我认为我们永远不知道\a
使用哪个 dll 来发出警报。
@SonerGönül 该代码可能会因 Windows 版本而异,从而使其更加复杂。以上是关于"\a" 和 Console.Beep() 方法播放相同的哔声吗?的主要内容,如果未能解决你的问题,请参考以下文章
22."javascript:;" 和 "javascript:void" 有区别?
console.log(new Date("2020-02-16 00:00:00"))在ios浏览器输出undefined问题
console.log(new Date("2020-02-16 00:00:00"))在ios浏览器输出undefined问题