【问题标题】:A way to concatenate Console.Beep sounds一种连接 Console.Beep 声音的方法
【发布时间】: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 - 所以我明白了
  • 更有趣(但不回答你的问题)stackoverflow.com/q/3319959/397817

标签: c# audio beep


【解决方案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/,你可以通过使用这个工具来控制你的声音并给它流。 (您可以创建不使用文件作为源的流)

【讨论】:

    猜你喜欢
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    相关资源
    最近更新 更多