5

\a是一个escape sequence代表字符常量的警钟。关于MSDNConsole.Beep()的方法说明:

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

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

public static void Main(string[] args)
{
     Console.WriteLine("\a");
     Console.Beep();
}

这段代码会产生 2 次哔哔声,它们对我来说听起来一样。现在我需要看看证据。

当我反编译该Console.Beep()方法时,它使用Win32Native.Beepfrom kernel32.dll

public static void Beep(int frequency, int duration)
{
    Win32Native.Beep(frequency, duration);
}

它们的频率和持续时间可能不同,我没有说这些东西,但它们的来源是否相同(Win32Native.Beep)?响铃警报\a使用哪个来源?

4

1 回答 1

14

这是我通过检查音频所能收集到的(Windows 7 64 位(是的,我不得不重新启动到 Windows,我就是那么专注:))。我使用 Fraps 录制了音频,所以它应该是可靠的。

这是我用来检查它们的代码:

using System;
using System.Threading;

namespace StackOverflow
{
    class Program
    {
        private static void Main(string[] args)
        {
            Console.Write("\a");
            Thread.Sleep(500);
            Console.Beep();
        }
    }
}

这是 Audacity 中的两条轨道(Console.Write('\a')上一条,Console.Beep()下一条)。

两声哔哔声

在我放大轨道的任何时候,正弦波彼此完全匹配,并且它们具有完全相同的持续时间,所以我必须得出结论,它们实际上是相同的(在 Windows 7 上)。

于 2013-02-10T15:01:55.053 回答