安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

python音乐可视化好玩的matplotlib南丁格尔玫瑰

9月9日 生死族投稿
  效果图:
  操作演示:
  技术要点:
  1matplotlib的南丁格尔玫瑰图,用极坐标polar制作,并动画显示。
  2pygame新版的播放mp3,但本机的操作系统不能播放mp3,我用pydub做些格式转换。
  3用librosa获取音乐的相关数据和采样。
  4参考代码,并对源代码进行修改,增加,删减,排版和注释,感谢原作者,如有侵权,请联系,定删除。https:github。comhahacydSimpleMusicVisualizer
  下面分步,讲解代码
  第1步:模块导入importosimporttimeimportpygameimportlibrosaimportnumpyasnpfrompydubimportAudioSegmentimportmatplotlib。pyplotaspltfrommatplotlib。animationimportFuncAnimation
  第2步:窗口的初始化设置print(开始格式转换,请等待,一会马上就会播放音乐,请欣赏音乐和可视化)plt。rcParams〔axes。unicodeminus〕False负号显示画布的大小和背景颜色设置figplt。figure(facecolorblack,edgecolorblack,figsize(12,7))axplt。subplot(projectionpolar)ax。patch。setfacecolor(black)图形背景颜色设置设置显示界面的位置mngrplt。getcurrentfigmanager()mngr。window。wmgeometry(500200)
  第3步:参数设置设置显示的柱状图的个数binnums24设置显示的频率范围:(01350Hz)frequencythreshold1350音乐时长(s)musiclength0。0帧时长,即每一帧所需的时长简而言之就是每隔‘samplinginterval’秒刷新一次samplinginterval0。05tempnp。tile(0,binnums)重复数组,角度musicplaystarttime0currenttime0musicfftnp。empty(0)创建空数组binsnp。empty(0)
  第4步:核心代码:polar柱状图,如果是垂直柱状图,就是适当进行修改可视化柱子和上头线设置比如选择了RdBu色谱,选择分为24段colorsplt。getcmap(RdPu,24)cmap即colormaps获取图谱使用plt。getcmap(‘xxx’)扇形柱子的宽度width2np。pibinnums角度和数据radnp。cumsum(〔width〕binnums)每个扇形的起始角度扇形柱状图rectsax。bar(rad,temp,widthwidth,colorcolors(range(0,binnums)),alpha1,bottom900)初始化柱状图中的横线跌落效果line,ax。plot(rad,temp,,colorwhite,linewidth10)ax。setthetazerolocation(N)设置极坐标的起点(即0度)在正上方向ax。grid(False)不显示极轴ax。spines〔polar〕。setvisible(False)不显示极坐标最外的圆形ax。setyticks(〔〕)不显示坐标间隔ax。setthetagrids(〔〕)不显示极轴坐标核心代码部分
  第5步:filter类classExpFilter:definit(self,val0。0,alphadecay0。5,alpharise0。5):self。alphadecayalphadecayself。alpharisealphariseself。valuevaldefupdate(self,value):ifisinstance(self。value,(list,np。ndarray,tuple)):alphavalueself。valuealpha〔alpha0。0〕self。alpharisealpha〔alpha0。0〕self。alphadecayelse:alphaself。alphariseifvalueself。valueelseself。alphadecayself。valuealphavalue(1。0alpha)self。valuereturnself。value使用filter,来使得柱形图中的变化平缓一些alphadecay和alpharise,其值需在01之间,分别表示下降和上升的反应速度越大越灵敏,如果都设为1,将失去滤波的效果这里选择了0。3和0。6,即下降时较慢,而上升较快filterExpFilter(np。tile(0,binnums),alphadecay0。30,alpharise0。60)
  第6步:函数定义初始化definit():globalymaxax。setylim(0,ymax)returnrects更新函数defupdate(frame):currenttimetime。time()获知当前歌曲的播放进度,以选择此进度下的fft数据currentframe((currenttimemusicplaystarttime)samplinginterval)播放完了,处理ifcurrentframeFRAMES1:exit()这里的musicfft是从getBin()获得的sourcemusicfft〔int(currentframe)1〕注意这里一般可能不需要1,根据不同mp3而定indexmaxymax(ymax80)sourcesource〔indexmax〕ymax(ymax80)更新柱状图binsfilter。update(source)更新柱状图中的横线跌落效果lineydataline。getydata()lineydataint(ymax30)lineindexlineydataint(ymax100)binslineydata〔lineindex〕bins〔lineindex〕int(ymax100)line。setydata(lineydata)forrect,hinzip(rects,bins):rect。setheight(h)fig。canvas。flushevents()刷新fig。canvas。draw()重新绘图图像更新后将保持一帧的时间time。sleep(samplinginterval)fig。canvas。manager。setwindowtitle(总共:d秒;已经播放时间:d秒(round(musiclength),round(currenttimemusicplaystarttime,0)))窗口标题名设置处理音乐中的每一帧数据defgetBin(y,sr,samplinginterval):time1time。time()计算每一帧有多少采样,用于计算fftfftintervalint(srsamplinginterval)lengthfftinterval2nums(srbinnums)(frequencythreshold2)batchlengthnumsresultnp。atleast2d(np。tile(0,binnums))foriinrange(int(musiclengthsamplinginterval)):fftnp。fft。fft(y〔fftintervali:fftinterval(i1)〕)freqbinnp。array(〔np。abs(fft〔batchx:batch(x1)〕)。sum()samplingintervalforxinrange(binnums)〕)resultnp。vstack(〔result,freqbin〕)time2time。time()returnresult播放指定的歌曲defplay():pygame。init()pygame。mixer。music。stop()播放音乐musicpygame。mixer。music。load(naudiopath)转换成ogg的临时文件pygame。mixer。music。play()
  第7步:启动主函数ifnamemain:设置音乐文件的路径audiopath。cwsk。mp3本操作系统,新版pygame不支持mp3,需要转换soundAudioSegment。fromfile(audiopath)转换后放在临时主目录下filesound。export(newsong。ogg,formatogg)naudiopath。newsong。ogg临时文件y,srlibrosa。load(naudiopath,srNone)musiclengthlen(y)srprint(时长:gs采样率:gkHz(musiclength,sr1000))musicfftgetBin(yy,srsr,samplingintervalsamplinginterval)ymaxmusicfft。max()3FRAMESmusicfft。shape〔0〕aniFuncAnimation(fig,update,initfuncinit,blitFalse,interval0,framesFRAMES1,repeatFalse)play()记录音乐开始播放的时间musicplaystarttimetime。time()plt。tightlayout()紧凑布局,缩小外边距plt。show()显示plt。pause(musiclength)
  自己整理,分享出来,希望大家喜欢。
投诉 评论 转载

百元办公桌面好物推荐瞬间提升打工人幸福感要知道,我们每天花费最多的时间就是在自己的办公桌上,据我的观察,把办公桌布置得井井有条的人,其工作效率普遍也都比较高。当然,这与他们的时间管理意识等因素有着很大关系,但同时我也……荣耀Magic4至臻版VSiPhone13Pro,荣耀的答卷其实我想给标题为:咔嚓体验对比:荣耀Magic4至臻版VSiPhone13Pro。我们选取了超广角、1倍、3倍、5倍四个焦段来拍摄对比。iPhone13Pro超广角……麒麟9856400万四摄,现已跌至2789元,华为5G手机无正常情况下一款手机发布之后会不断降价,但是在手机行业中也存在一些十分保值的优质机型,甚至上市大半年之后,其市场价格仍然可以维持原价,例如小米公司曾经的经典旗舰小米6就是一个例子……2022年电钢琴选购攻略卡瓦依电钢琴KDP110CN39CA大家好,我是业余弹琴的胡迪,平时喜欢研究电钢琴和电钢琴,大家在购买电钢琴时有很多疑惑吧,这篇文章是我在查阅了国内外大量古迹后整理出来的卡瓦伊KDPCNCA系列测评,纠结的朋友们……python音乐可视化好玩的matplotlib南丁格尔玫瑰效果图:操作演示:技术要点:1matplotlib的南丁格尔玫瑰图,用极坐标polar制作,并动画显示。2pygame新版的播放mp3,但本机的操作系统……ClickhouseAlter操作造成zk连接丢失的问题分析背景业务方数据在出现错误后需要重跑数据,由于业务方没有使用MergeTree的折叠表,需要删除旧的数据后,再重新跑数据写入新的正确的数据。之前这种模式一直运转的比较……叮咚买菜被曝大裁员,回应消息不实,属公司正常组织资源调整1月13日,有消息称叮咚买菜(DDL。US)已开启大裁员。红星资本局发现,一位认证为叮咚买菜员工的用户在脉脉APP上透露,叮咚买菜已经开启大裁员,裁员比例为采购50,算法30,……最近舆论新型支付方式出现,二维码将消失,你支持吗?舆论规舆论?我还没听说二维码将消失??这怎么可能呢?现在广大的用户,特别青年用户都离不开二维码,办公。消费等等离不开二维码。这纯粹是一个误导的舆论?〔灵光一闪〕〔what〕……抖音外卖开门营业抖音的外卖业务终于开张了。在7月传出抖音内测心动外卖之后,近日36氪未来消费注意到,肯德基、喜茶两家连锁餐饮品牌,已经开始在抖音上提供外卖服务。上述两个品牌,目前均……恶意广告推送违规收集个人信息警惕手机软件里的内鬼来源:光明日报近日,国家计算机病毒应急处理中心监测发现15款移动App及1款SDK存在隐私不合规行为,涉嫌超范围采集个人隐私信息。今年2月份,工信部信息通信管理局也通报了今年第……苹果还得靠三星!iPhone15有望使用屏下FaceID,正屏幕技术哪家强?大韩民国找三星。根据韩国媒体的报道,苹果为了能够在iPhone15Pro上彻底干掉刘海,隐藏FaceID模组,正在与三星一同研发,屏下FaceID技术。……HarmonyOS2发布会最全预测,除了操作系统还有哪些看点HarmonyOS2发布会在6月2号,马上就要来了。有关于HarmonyOS大家都有自己的理解和猜想,也因为HarmonyOS之前的发布会都是面对开发者,面对技术人员,介绍那些……
精灵小电时尚iCar不足3万奇瑞QQ冰淇淋会火吗聊聊如何自定义数据脱敏有无靠谱的兼职,快过年了?深度合成技术将规范发展零事故!北京冬奥会网络安全保障水平超往届10。1寸1080P屏幕国产强芯双扬声器仅679元,超香安卓用户反映NVMeSSD在Win11上变慢,微软回应在成功人士中,是不是天蝎座居多?vivoS12与华为P50E手机全面对比区别一目了然华为Mate50Pro最新消息,渲染图再次曝光,5500mA万物皆可元宇宙?人民日报发声元宇宙概念是什么意思121TB存储的华为5G新机诞生,芯片麒麟9000英国八岁男孩机翼上行走创世界记录苹果怎么查最近通话(iphone查较早通话记录)苹果发布SwiftPlaygrounds4。1Beta开发者自动化专业怎么样?从百草园到三味书屋教案令人难忘的细节美好的童年气球如何做造型认定成立聚众斗殴关多久狗年七字春联贵州千年古榕树群,布依古寨的月老树,专家考证已有2000多年乡间炎夏即景

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利