连接控制台的方法.蜂鸣声
本文关键字:蜂鸣声 方法 控制台 连接 | 更新日期: 2023-09-27 18:28:48
我一直在玩一些C#,特别是发出声音。。。因为它很有趣。所以我已经完成了所有的工作,但Console.Beep()
有一些问题困扰着我:它不能直接连接声音。例如,运行下面的代码会产生一系列250毫秒的声音爆发,但它们并没有一起运行,听起来像是一个整体,而是变得脱节,每个声音之间会有大约50毫秒的停顿。
for(int i = 0; i < 11; i++)
{
Console.Beep(980, 250);
}
所以问题是,是否有任何程序化的方法可以让系统一起运行声音?我不得不说,我真的不希望会有,但我认为这是值得一问的,因为许多其他资源似乎只是接受了这一事实。
不能,该方法使用内核的函数。我会证明:
[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/,你可以使用这个工具来控制你的声音,并提供流。(您可以创建不使用文件作为源的流)