我一直在玩一些C#,专门发出声音...... because it's fun。所以我已经完成了所有工作,但是有些事情与我Console.Beep()
有关:它没有直接连接声音。例如,运行下面的代码将导致一系列250毫秒的声音突发 - 但不是所有声音一起运行并听起来好像是一个声音,它们会脱节,每个声音之间会有约50毫秒的暂停。 / p>
for(int i = 0; i < 11; i++)
{
Console.Beep(980, 250);
}
所以问题是,是否有任何程序化方法让系统一起运行声音?我不得不说我真的没想到会有,但我认为值得一提,因为很多other resources似乎只是接受了事实并非如此。
答案 0 :(得分:3)
你不能,该方法使用内核的功能。我会证明:
[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/,您可以通过使用此工具并为其提供流来控制您的声音。 (您可以创建不使用文件作为源的流)