2013-02-10 1 views
2

\a является escape sequence, который представляет собой предупреждение о звонках на символьных константах. На Console.Beep() метод объяснения от MSDN:Выполняют ли « a» и метод Console.Beep() один и тот же сигнал?

Воспроизведение звука звукового сигнала через динамик консоли.

Давайте рассмотрим этот пример кода:

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

Этот код создает 2 звуковых сигнала, и они же звучит для меня. Теперь мне нужно увидеть доказательство.

Когда я декомпилировать метод Console.Beep(), он использует Win32Native.Beep из kernel32.dll;

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

Их частота и длительности могут быть разными, я ничего об этих вещах не говорю, но их источники одинаковы (Win32Native.Beep)? Какой источник делает \a использовать для звонок оповещения?

+0

Я бы сказал, что они разные, поскольку '\ a' не является чем-то, что вы можете предоставить для частоты или продолжительности. Конечно, ОС может вызывать тот же код под капюшонами с жестко закодированными значениями, когда они представлены с помощью '\ a'. – Oded

+0

Однако, скорее академический, нет? Не настоящая проблема, с которой вы сталкиваетесь, а? – Oded

+0

@Oded Да, это не проблема, с которой я столкнулся, но мне всегда интересно, есть они или нет. Конечно, '\ a' не имеет частоты или продолжительности, но я предпочитаю доказательство, просто называя их _different_. –

ответ

10

Это насколько я мог собрать, изучив звук (Windows 7 64-bit (да, мне пришлось перезагружаться в окна, я это посвятил :)). Я записал аудио с помощью 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()).

Two beeps

В любой момент, когда я зуммировании на рельсах, синусоидальные волны точно соответствуют друг другу, и они имели точно такую ​​же продолжительность, так что я должен сделать вывод о том, что они, по сути, то же самое (в Windows 7, который есть).

+0

Хорошо, спасибо за ответ и ваши усилия, но я действительно думаю, что они используют одну и ту же DLL или нет. Но, к сожалению, я думаю, мы никогда не знаем, какую dll '\ a' использовать для своего предупреждения. –

+0

@ SonerGönül И этот код, вероятно, будет отличаться в разных версиях окон, что еще более усложняет его. – antonijn

Смежные вопросы