【发布时间】:2023-03-20 07:18:01
【问题描述】:
我尝试过以低毫秒速率使用 Console.Beep() 两个“同时”播放两个频率,但哔声之间的停顿会破坏它。我已经尝试研究它,但除了我正在寻找的 DirectSound 之外,我什么也没找到,也不知道从哪里开始。我只需要用 C# 编写一个程序,用一个扬声器同时播放两个或多个频率。
谢谢。
【问题讨论】:
我尝试过以低毫秒速率使用 Console.Beep() 两个“同时”播放两个频率,但哔声之间的停顿会破坏它。我已经尝试研究它,但除了我正在寻找的 DirectSound 之外,我什么也没找到,也不知道从哪里开始。我只需要用 C# 编写一个程序,用一个扬声器同时播放两个或多个频率。
谢谢。
【问题讨论】:
如果您事先知道频率,则可以将它们合成为波形文件(大胆或其他类似程序),然后使用 SoundPlayer 类播放波形文件。
string path = /*path goes here*/;
player = new SoundPlayer(path);
player.Play();
如果您需要在运行时合成它们,则必须手动编写文件。 Here's 一个 SO 问题,您可以参考它来构建波文件。
【讨论】:
这里有一些非常简单的示例代码,可以让您播放 WAV 或 MIDI 文件。这样,您只需编写一次代码,然后如果您想更改音效,只需维护 wav 或 mid 文件即可。
Play Any Sound File - C#(将 DirectX 9.0 用于托管代码)
【讨论】:
我建议您查看 DirectSound,它具有很好的 .NET 绑定。您可以使用两个(或更多)Buffer 对象并调用它们的Play 方法来同时播放它们。
This tutorial 展示了如何通过动态合成声音在 C# 中实现一个简单的鼓机。希望对您有所帮助。
【讨论】:
Console.Beep() 是同步的,直到声音结束才返回。
尝试简单的 DirectMedia 层 (SDL.net)。
【讨论】:
尝试使用 MIDI。 This example 应该可以帮助您入门。它使用了几个人高度推荐的 MIDI 库。
【讨论】: