是否可以在播放时更改 Console.Beep 的频率?

Posted

技术标签:

【中文标题】是否可以在播放时更改 Console.Beep 的频率?【英文标题】:Is it possible to change the frequency of Console.Beep while playing? 【发布时间】:2017-12-17 18:51:57 【问题描述】:

我想知道是否有一种方法可以让程序执行int f = 37; Console.Beep( f, 10000 ) 并在它播放时更改f 变量,以便声音实际发生变化。

编辑:我不想使用增加f 的循环,因为这会使声音停止播放一段时间(每次迭代)。我知道还有其他方法,但我想了解 Beep 方法。

【问题讨论】:

Can I generate different beeps using the computer speaker or is there only one的可能重复 只需使用for 循环并在调用Console.Beep 之间执行对f 变量的更新,如上一个答案所示。 @DerekBrown 这将产生不连续的增长。每次设置的时间,都会播放新的频率,使其突变。 Console.Beep 不适合播放任何类型的nice音乐。为这项工作寻找不同的工具。 您询问如何使“声音真正发生变化”,@Derek 向您展示了如何做到这一点。如果这不是您想要的,请编辑您的问题,告诉我们您想要什么,因为现在它远非“精确”。 【参考方案1】:

如果您想在控制台应用程序中播放声音并对正在播放的内容进行更广泛的控制,我建议您使用 SoundPlayer 类(MSDN 参考 here,看看它以了解其特点)。

缺点是你必须创建一个wav 文件来产生哔声(应该不难找到一个谷歌搜索)和一个wav 文件用于你想要实现的每种不同的声音在您的应用程序中。您可以将文件放在您的应用程序目录中,但您也可以将它们作为资源嵌入到您的程序集中:

private static SoundPlayer s_Beep;
private static SoundPlayer s_Buzz;

public static void Main(String[] args)

    Assembly assembly = Assembly.GetExecutingAssembly();

    s_Beep = SoundPlayer(assembly.GetManifestResourceStream("YourNamespace.Beep.wav"));
    s_Beep.Load();

    s_Buzz = SoundPlayer(assembly.GetManifestResourceStream("YourNamespace.Buzz.wav")); 
    s_Buzz.Load();

    s_Beep.PlayLooping();
    Thread.Sleep(100);
    s_Beep.Stop();

    s_Buzz.Play();

    // ...

【讨论】:

以上是关于是否可以在播放时更改 Console.Beep 的频率?的主要内容,如果未能解决你的问题,请参考以下文章

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

"\a" 和 Console.Beep() 方法播放相同的哔声吗?

如何在线程中播放声音?

Console.Beep() - 声音不通过 RDC 重定向

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

控制台应用程序密钥释放