C# 连接控制台的一种方法。嘟嘟声

C# 连接控制台的一种方法。嘟嘟声,c#,audio,beep,C#,Audio,Beep,我一直在和一些C#玩,特别是发出声音。所以我已经让它全部工作了,但是有一些问题困扰着我,比如Console.Beep():它不直接连接声音。例如,运行下面的代码将导致一系列250毫秒的声音爆发——但不是所有声音一起运行,听起来好像它们是一个,而是变得不连贯,每个声音之间有大约50毫秒的停顿 for(int i = 0; i < 11; i++) { Console.Beep(980, 250); } for(int i=0;i

我一直在和一些C#玩,特别是发出声音。所以我已经让它全部工作了,但是有一些问题困扰着我,比如
Console.Beep()
:它不直接连接声音。例如,运行下面的代码将导致一系列250毫秒的声音爆发——但不是所有声音一起运行,听起来好像它们是一个,而是变得不连贯,每个声音之间有大约50毫秒的停顿

for(int i = 0; i < 11; i++)
{
    Console.Beep(980, 250);
}
for(int i=0;i<11;i++)
{
控制台。嘟嘟声(980250);
}

所以问题是,是否有任何程序化的方法使系统同时运行声音?我不得不说,我并不真的期望会有这样的结果,但我认为这是值得一问的,因为许多人似乎只是接受了这样一个事实,即它没有。你不能,这种方法使用内核函数。我将证明:

[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);
}
从内核导入的函数

除非你硬编码并修改你的内核,否则你不能。(我肯定你不想这么做)


我可以给你另一个选择:,你可以用这个工具控制你的声音,并给它流。(您可以创建不使用文件作为源的流)

控制台。Beep
不是C#@JohnSaunders的一部分-不知道。谢谢你的编辑,C#编程语言和.NET框架是两码事。@JohnSaunders-所以我觉得更有趣(但没有回答你的问题)
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool Beep(int frequency, int duration);