连续音调生成

本文关键字:连续音 | 更新日期: 2023-09-27 18:00:27

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

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

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

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

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

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

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

连续音调生成

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

  • NAudio使用简介
  • 在C中创建正弦波或方波#
  • NAudio中正弦波的回放

现在你可以很容易地做一些事情,比如:

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

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