c#-连接Console.Beep声音的方法

我一直在玩一些C#并专门制作声音…because it’s fun.所以我已经将其全部工作了,但Console.Beep()却使我有些烦恼:它不会直接连接声音.例如,运行下面的代码将导致一系列250毫秒的声音突发-但不是全部同时运行并听起来好像是一个声音,而是变得脱节了,每个声音之间都有〜50ms的间隔.

for(int i = 0; i < 11; i++)
{
    Console.Beep(980, 250);
}

所以问题是,是否有任何编程方式可以使系统一起运行声音?我不得不说我并不真的希望有这样的情况,但是我认为这是一个值得询问的问题,因为许多other resources似乎只是接受事实,那就是事实并非如此.

解决方法:

您不能,该方法使用内核的功能.我将证明:

[SecuritySafeCritical]
[HostProtection(SecurityAction.LinkDemand, UI = true)]
public static void Beep(int frequency, int duration)
{
    if (frequency < 37 || frequency > 32767)
    {
        throw new ArgumentOutOfRangeException("frequency", frequency, Environment.GetResourceString("ArgumentOutOfRange_BeepFrequency", new object[]
        {
            37,
            32767
        }));
    }
    if (duration <= 0)
    {
        throw new ArgumentOutOfRangeException("duration", duration, Environment.GetResourceString("ArgumentOutOfRange_NeedPosNum"));
    }
    Win32Native.Beep(frequency, duration);
}

这是Console.Beep的代码,它使用Win32Native.Beep实际执行蜂鸣声(除了上面的检查之外),该方法导致:

[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool Beep(int frequency, int duration);

从内核导入的功能.

除非您对内核进行硬编码和修改,否则您将无法这样做. (我确定您不想这么做)

我可以给您一个替代方案:http://naudio.codeplex.com/,您可以使用此工具并为其提供声音流,从而控制声音. (您可以创建不使用文件作为源的流)

上一篇:Don’t use Suspend and Resume, but don’t poll either.


下一篇:c# – 是什么导致系统发出蜂鸣声?