第15章 音乐可视化(《Python趣味创意编程》教学视频)
(图书介绍:童晶:《Python趣味创意编程》新书预告)
15 音乐可视化
本章我们将实现音乐可视化的效果,如图所示。首先学习Minim库的下载配置,并利用Minim库播放音乐文件、绘制音乐音量波形;然后将声音转换到频域,学习音乐频谱波形的绘制,并实现圆圈射线频谱波形的效果;最后添加射灯连线、变大变小的眼睛,并学习实时声音信号的输入。
视频教程:
最终代码:
add_library("minim") # 导入minim库
minim = Minim(this) # 创建minim对象def setup():global player,fft,fftScale # 全局变量size(1000, 1000) # 画面大小player = minim.loadFile("music2.mp3") # 读取音乐文件player.loop() # 音乐循环播放fft = FFT(player.bufferSize(), player.sampleRate()) # 变换到频域fftScale = 50 # 显示放大倍数colorMode(HSB) # HSB颜色模型frameRate(30) # 设定帧率def draw():background(255) # 白色背景fft.forward(player.mix) # 处理下一段音频信号# 这一段频谱信号长度,高频部分信号能量较低就不考虑了specLength = fft.specSize()/2for i in range(specLength): # 对所有频谱信号遍历# 当前频谱上信号强度,开根号,再乘以一个放大系数 ffti = sqrt(fft.getBand(i))* fftScale basis = width/6 + 2*sin(0.5*i+frameCount) #内部圆半径周期变化angle = map(i,0,specLength-1,-0.5*PI,1.5*PI) # 直线段对应角度startX = width/2 + cos(angle)*basis # 直线起点x坐标startY = height/2 + sin(angle)*basis # 直线起点y坐标endX = width/2 + cos(angle)*(basis+ffti) # 直线终点x坐标endY = height/2 + sin(angle)*(basis+ffti) # 直线终点y坐标# 沿着圆周设定线条颜色色调stroke(map(i,0,specLength-1,0,255),255,255) strokeWeight(1.5) # 设定线条粗细line(startX, startY, endX, endY) # 画出向外的一圈直线if i%2==0: # 射灯画线减一半,防止绘制速度过慢 stroke(map(i,0,specLength-1,0,255),200,255,40) # 射灯连线颜色strokeWeight(1) # 设定射灯线条粗细# 计算在第几区域,角点和对面的区域不要连线,防止画面过乱sector = i*4/specLength # 分成4个区域 if sector != 1: line(0, 0, endX, endY) # 左上角发出的射线 if sector != 2: line(width, 0, endX, endY) # 右上角发出的射线 if sector != 0: line(0, height, endX, endY) # 左下角发出的射线 if sector != 3: line(width, height, endX, endY) # 右下角发出的射线average = 0 # 求出所有频谱信号强度的平均值for i in range(specLength): # 对所有频谱信号遍历ffti = sqrt(fft.getBand(i))* fftScale # 开根号,再乘以一个放大系数average += ffti # 先求和average = average/specLength # 求平均值# 中间随音乐音量大小而变换的圆圈椭圆/眼睛noStroke() # 眼珠圆圈不绘制线条fill(frameCount%256, 130, 200) # 眼珠的填充色circle(width/2,height/2,average*1.5) # 绘制眼珠圆圈noFill() # 眼眶不填充strokeWeight(3) # 眼眶线条粗细stroke(frameCount%256, 130, 200) # 眼眶线条的颜色ellipse(width/2,height/2,average*3,average*1.5) # 绘制椭圆形眼眶
Minim库也可以利用麦克风获取实时声音信号,读者可以尝试发出音量大小、音调高低不同的声音,观察音频的实时可视化效果。
player = minim.getLineIn() # 获取实时音频输入
这一章主要学习利用Minim库进行音频信号的处理,实现了一种音乐可视化的效果。读者也可以借鉴之前章节的思路,实现更加酷炫的音乐可视化;利用音乐文件或实时音频信号,也可以用于不同互动艺术形式的实时参数调整。
第15章 音乐可视化(《Python趣味创意编程》教学视频)相关推荐
- opencv python 生成画布_第16章 坚持一百秒(《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现坚持一百秒的游戏,玩家通过移动人脸控制飞碟躲避越来越多的反弹子弹,效果如图所示.首先利用面向对象的知识,实现了一个鼠 ...
- 第11章 递归分形树(《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将绘制递归分形树,如图所示.首先学习递归的概念,并学习if-elif-else语句:接着学习分形的概念,并利用递归调用绘制 ...
- 第8章 随风飘动的粒子 (《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现随风飘动的粒子,如图所示.首先绘制逐渐消失的轨迹,实现随机运动的圆点:然后学习列表的概念,利用列表实现多个运动粒子: ...
- 第7章 随机扭动的曲线(《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现随机扭动的曲线,如图所示.首先绘制圆圈上的一些采样点,并学习random.noise两种随机函数:接着学习曲线的绘制 ...
- background 旋转_第4章 旋转的圆弧(《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现旋转的圆弧,如图所示.首先学习圆弧的绘制和旋转:接着利用全局变量实现圆弧逐渐变长,学习if选择语句,实现圆弧长度的重 ...
- 第14章 定制字符画(《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现定制字符画的效果,如图所示.首先对图片均匀采样.显示字符:然后对字符串的元素进行遍历,实现一段文字的替换显示:最后根 ...
- 第13章 图像像素采样(《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现图像像素采样的绘制效果,如图所示.首先学习图像文件的读取与显示,获取像素颜色:然后生成马赛克效果,并实现随机采样画圆 ...
- 第12章 粒子同心圆(《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现粒子同心圆,如图所示.首先学习面向对象编程的知识,为粒子类添加成员变量与成员函数:然后实现一个面向对象版本的运动粒子 ...
- 第10章 随机山水画(《Python趣味创意编程》教学视频)
(图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将绘制随机山水画,如图所示.首先学习HSB颜色模型,并实现天空颜色渐变的效果:接着利用柏林噪声,实现云朵和山脉的绘制:然后 ...
最新文章
- Windows Server 2012 RDS系列:虚拟桌面化(5)
- bzoj1047/luogu2216 理想的正方形 (单调队列)
- UIButton的几种触发方式
- 模板引擎工作原理_「白皮书解读搜索引擎的工作原理」如何排序
- 男子支付宝每天莫名进钱 吓得赶紧报警 最后真相哭笑不得...
- 字节大牛教你手撕Java学习,Java核心知识点
- 紧急事态分析及处理方法
- jquery 语法基础
- 代码很烂,所以离职。
- 数控系统市场下行压力逐渐增大
- AutoRunner学习——下载安装
- CSS( Cascading Style Sheets )简书
- 如何做好团队测试建设
- 在设计条形音箱时,确保您的无线技术能够提供最高质量的、可靠的音频
- warmup lr+CosineAnnealingLR策略
- Java面向对象(OOP)--面向过程 面向对象 OOP详解
- 关于特征值特征向量和矩阵分解的理解总结
- WPARAM 与 LPARAM
- UE4元数据关键字的应用与含义,函数的标记和特殊使用(三)
- C++指针遍历数组解析