【问题标题】:Continuous tone generation连续音调生成
【发布时间】:2011-09-23 18:22:02
【问题描述】:

我正在创建一个小项目,最终将在我明年的最后一年项目中使用。

所以现在我使用 USB(虚拟 COM port)创建了一个小型传感器,并返回一组从 0 到 100 的值。我有一个进度条,它基本上根据传感器的返回值上下移动虚拟 COM 端口。

现在我的问题就在这里。当传感器足够用力并返回值 100 时,我想发出一个小信号(这部分已完成并正在工作)。但我也希望当传感器的值在 50 到 95 之间时,会产生音调并通过扬声器输出。

音应该是连续的,所以如果用户按下传感器,假设值为65,如果用户没有从传感器上移除压力,它应该继续输出平坦的音。如果用户用力按一下,假设返回值 75,我想增加音调频率。

最重要的是,对于来自传感器的 50 到 95 的值,它是连续音调,其中 50 表示低频,95 将输出较高频率。这应该是实时的。

代码都是通过 C# 完成的,我想使用 C# 库。我从来没有用过DirectX,如果不是真的必要,我也不太愿意下载一个庞大的库。

我愿意购买一些小型库或使用开源库,只要库的价格不超过 50 美元或在那个范围内。

【问题讨论】:

标签: c# .net


【解决方案1】:

嗯,实际上您不需要为此购买图书馆。您可以使用 免费 NAudio 库。它将允许您创建和播放WAV 文件。看看能力。 这也可能有帮助:

现在您可以轻松地执行以下操作:

loop_to_detect_sensor_input()
{ 
   freq = somefunction(SensorValue);
   generate_audio = SomeFunc1(freq);
   Play_the_generated_audio;
}

【讨论】:

    【解决方案2】:

    从 C# 2.0 开始,System.Console 有一个 Beep 变体,它采用频率和持续时间:http://msdn.microsoft.com/en-us/library/4fe3hdb1.aspx。我从未使用过它,但您可以将 0-100 强度范围缩放到频率范围。您可以在后台线程中异步播放哔声。可能难的是连续握住音符,这需要精确的时间。另一个缺点可能来自 MSDN 页面的备注部分:“Windows Vista 和 Windows XP 的 64 位版本不支持该方法”。可能这将使用更少的资源然后生成波然后播放它。

    【讨论】:

    • “通过控制台扬声器播放指定频率和持续时间的哔声。”我认为从记忆中 - 可能是错误的 - 通过计算机内置的扬声器/连接到主板而不是通过 Windows 音频系统播放,并且并非所有现代 PC 都有这样的扬声器。这可能会或可能不会影响 OP,但我认为我应该提及它。
    • @StephenKennedy 好点。他必须决定这是否适合他,有一个权衡。大多数设备都有某种扬声器,至少用于 BIOS POST 消息。问题可能是声音的质量,或者他是否想使用耳机。
    • +1。音调不会 100% 连续,但这是迄今为止最简单的解决方案。
    • 然而,it does not work on Windows XP 64-bit and Windows Vista (32-bit and 64-bit)(我只是在 Windows 64 位上凭经验验证了它)。
    • @PeterMortensen 是的,MSDN 文章的备注中提到了这个“64 位版本的 Windows Vista 和 Windows XP 不支持该方法”。 .NET 2.0版本没有提及,我猜是因为该功能出现的时间比Vista早。
    猜你喜欢
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 2013-03-03
    • 2015-09-12
    • 1970-01-01
    • 2021-04-11
    • 2021-03-28
    相关资源
    最近更新 更多