关于c#实现计算机音频接口输出固定频率波形的一些问题

来源:互联网 发布:淘宝外包美工多少钱 编辑:程序博客网 时间:2024/06/09 03:38

前些日子,要做一个固定波形输出的一个小项目,所以把所思所想贴上来。

功能需求是要固定的方波波形,但是若用本身的Beep输出的话,用示波器可以看到是平滑固定的弦波,那么若要看到方波就需要在不同的时间段去调节频率,然后缩小示波器的波形倍数,这个时候可以看到方波的出现。波形幅值的大小用的是音量的大小来驱动,但是这两者之间并不存在线性关系。

Console.Beep(freq,MaxValue)

首先,要用电脑输出波形,首先用到Console.Beep(frq,MaxValue),括号里是频率大小和持续时间,频率大小介于3732767之间,持续时间为毫秒级。

在音量调节方面仍然用到了广为流传的一些方法,控制的是windows系统音量。但是调节的时候同时会有一个问题,比如说:从音量10调节到50就要比从50调节到100所花费的时间要多,最大的调节时间会达到50ms,最小的调节时间可以达到在示波器缩短为1ms,调节时间的大小与音量的间隔大小有关,间隔时间越长调节时间越长,间隔时间越短调节时间越短,不知道是不是因为windows系统本身的问题。

可参考:http://blog.csdn.net/taoerit/article/details/43085901    

但是上面这篇文章里的调节音量所需时间过长,可能会达到150ms,而且VK_VOLUME_UP和VK_VOLUME_DOWN这两个个模拟键一次是调节两个音量值无法获得单数的音量值。

参考:http://blog.csdn.net/qiujuer/article/details/41575517

上述这篇博文可以直接获得所需音量值,我只用了一部分作了一个类应用,单独参考了音量变化部分。

在每个幅值的持续时间方面,用到的是winform定时器,如果调节时间过大,会影响波形的生成。

基本就是这样,会用到两个线程,timerBeep没办法单线程运行。

0 0
原创粉丝点击