OODLL 发表于 2018-2-9 19:22:22

【VC++】示波器上播放的音频——模拟出来

前段时间看到了个示波器播放的音频
你一定不陌生
oscillofun
嗯好了说是把它扔到示波器里就OK了对吧?
但是我发现个问题
我手头有点紧
支付宝都到3位数(2.74元)余额了
做不了怎么破?
又想自己做一下
然后
........
淡淡的望了一下

~~沉默的~~
Visual Studio
然后就有办法了
买不起SB器
我写一个软件来模拟总可以吧

然后吸佳佳拯救了我的心愿


因为是模拟那个图像,所以文件播放什么的(hei ke ji)不在这个范围内。偷偷透露一下,播放我用的是DirectSound。
先想一下....emm它的xy模式输入音频无非就是干了这样一件事情:x的坐标由一个声道确定,y坐标由y电平确定。
下面简单的说一下过程

首先,我使用CreateDIBSection创建一个位图——好处很明显,不需要关心那些个绘图函数,直接操作位图数据数组。为了方便绘图,我创建的是8位位图,这样绘图的时候直接设置一个BYTE数组的值,这个值就会映射到位图调色板里面的颜色,简单有效。
然后,在使用BitBlt复制位图,到主窗口的HDC上去。
然后就没有然后了。这里注意下CreateDIBSection的位图数据,因为y = 0的时候是最底部,所以要把计算得到的y坐标反过来。又因为屏幕坐标是左上角,所以我们需要把以窗口中心为原点的坐标,分别加上宽度 / 2,高度 / 2才可以得到以左上角为原点的屏幕坐标。
源代码嘛.....渲染代码如下,其余的就自己yy一下就可以了


至于最后那个fft的话...是我自己写来玩的,最后发现效果不怎么样.........
最后把编译的软件供上,顺便送一个oscillofun的那个音频。

它只支持wav文件....更准确点的是wav文件里面的好几种。不过别担心,最常见的那种没有压缩的wav文件是支持的。最最最常见的是支持的!!!
因为是随便写的...所以软件八九成由BUG.....还是容忍下了哈.....
其实做的也不好的...因为示波器那种余晖啊连线啊点的大小啊都没做.....

星空 发表于 2018-6-23 21:15:31

哇!老想看了也买不起SB器。谢谢大佬分享

GloomyGhost 发表于 2018-7-18 13:33:29

Java Sound成功转型DS

zycxjl 发表于 2020-3-17 10:12:12

:lol,进来看看sb器。:lol
页: [1]
查看完整版本: 【VC++】示波器上播放的音频——模拟出来