一种连接 Console.Beep 声音的方法
Posted
技术标签:
【中文标题】一种连接 Console.Beep 声音的方法【英文标题】:A way to concatenate Console.Beep sounds 【发布时间】:2014-11-01 19:53:34 【问题描述】:我一直在玩一些 C# 并专门制作声音...because it's fun。所以我已经完成了所有工作,但是Console.Beep()
有一些事情困扰着我:它不会直接连接声音。例如,运行下面的代码将导致一系列 250 毫秒的声音爆发 - 但不是所有的声音一起运行并且听起来好像它们是一个,它们变得不连贯,每个声音之间有大约 50 毫秒的暂停。
for(int i = 0; i < 11; i++)
Console.Beep(980, 250);
所以问题是,是否有任何程序化方法可以让系统一起运行声音?我不得不说我真的不希望有,但我认为这值得一问,因为许多 other resources 似乎只是接受事实并非如此。
【问题讨论】:
Console.Beep
不是 C# 的一部分
@JohnSaunders - 不知道。感谢您的编辑
C# 编程语言和 .NET Framework 是两个不同的东西。
@JohnSaunders - 所以我明白了
更有趣(但不回答你的问题)***.com/q/3319959/397817
【参考方案1】:
你不能,那个方法使用内核的函数。我会证明:
[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/,你可以通过使用这个工具来控制你的声音并给它流。 (您可以创建不使用文件作为源的流)
【讨论】:
以上是关于一种连接 Console.Beep 声音的方法的主要内容,如果未能解决你的问题,请参考以下文章
Console.Beep() - 声音不通过 RDC 重定向
"\a" 和 Console.Beep() 方法播放相同的哔声吗?