"\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,它代表字符常量上的铃声提醒。来自MSDNConsole.Beep()方法解释:

通过控制台扬声器播放哔声。

让我们考虑这个示例代码:

public static void Main(string[] args)

     Console.WriteLine("\a");
     Console.Beep();

这段代码会发出 2 声哔哔声,它们听起来一样。现在我需要看看证据。

当我反编译Console.Beep() 方法时,它使用了来自kernel32.dllWin32Native.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() 方法播放相同的哔声吗?的主要内容,如果未能解决你的问题,请参考以下文章

Javascript"怪异"现象

python:console生成文本颜色/粗体

c#输入语句

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问题