一种连接 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() 方法播放相同的哔声吗?

如何在(期间)鼠标单击时发出 Console.Beep?

我可以在 c# 中使用 Console.Beep 播放 mp3 文件吗?

C# - Console.Beep 在 Windows Vista 上不起作用