micropython 可视化音频 频谱解析(应该是全网首家)(预告,还没研究完成)
本人是音乐爱好者,从小就特别喜欢那个随着音乐跳动的方框效果,就是这个:
arduino上一大把
对,我忍你很久了,我就想用mpy做,全网没有,行我自己研究。
果然兴趣是最好的老师,我之前有篇博客专门讲音频,有兴趣的可以回顾一下。
提到可视化频谱,必然绕不开fft,大学学过这玩意,当时一心玩,老师讲的一个字都么听进去,网上教程简略扫了一下, 大该就是把时域转频域的工具,我大mpy居然没有fft函数,奶奶的,先放着。
音频信息如何收集?第一种傻瓜式的ADC,模拟转数字,原始粗暴,第二种,I2S库,我之前博客有讲过,数据是PCM编码。
然后又去学PCM编码,一学豁然开朗,舒服,以代码为例:
audio_in = I2S(0,
sck=bck_pin, ws=ws_pin, sd=sdin_pin,
mode=I2S.RX,
bits=16,
format=I2S.MONO,
rate=8000,
ibuf=64000)
这里初始化了一个I2S对象,应用题来了,已知:bits=16 rate=8000 buf=64000 单声道,请问可以录几秒?之前的博客实践告诉我,4秒,为啥是4秒呢?能懂这个PCM编码已经懂了一大半了,基本原理还是得自己啃,我不直接喂你,我尽量人话解释一下,bits=16:16位采样,也就是有65536中大小的数据,存一个数据需要2bytes,rate=8000hz,一秒存8000个数据,单声道,不用双声道,简化了,然后就算吧,2bytes80004=64000bytes,芜湖,刚好对上,这不就很明了了么,就是逐个bytes存的呀,至于具体咋编的码,我还要看下。
micropython的I2S有几种模式的,阻塞,非阻塞,即时,翻文档:
这一看阻塞就没戏,试试剩下的两个喽。
研究中,研究好了再更新,立贴证明我的决心。