(图书介绍:童晶:《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趣味创意编程》教学视频)相关推荐

  1. opencv python 生成画布_第16章 坚持一百秒(《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现坚持一百秒的游戏,玩家通过移动人脸控制飞碟躲避越来越多的反弹子弹,效果如图所示.首先利用面向对象的知识,实现了一个鼠 ...

  2. 第11章 递归分形树(《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将绘制递归分形树,如图所示.首先学习递归的概念,并学习if-elif-else语句:接着学习分形的概念,并利用递归调用绘制 ...

  3. 第8章 随风飘动的粒子 (《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现随风飘动的粒子,如图所示.首先绘制逐渐消失的轨迹,实现随机运动的圆点:然后学习列表的概念,利用列表实现多个运动粒子: ...

  4. 第7章 随机扭动的曲线(《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现随机扭动的曲线,如图所示.首先绘制圆圈上的一些采样点,并学习random.noise两种随机函数:接着学习曲线的绘制 ...

  5. background 旋转_第4章 旋转的圆弧(《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现旋转的圆弧,如图所示.首先学习圆弧的绘制和旋转:接着利用全局变量实现圆弧逐渐变长,学习if选择语句,实现圆弧长度的重 ...

  6. 第14章 定制字符画(《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现定制字符画的效果,如图所示.首先对图片均匀采样.显示字符:然后对字符串的元素进行遍历,实现一段文字的替换显示:最后根 ...

  7. 第13章 图像像素采样(《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现图像像素采样的绘制效果,如图所示.首先学习图像文件的读取与显示,获取像素颜色:然后生成马赛克效果,并实现随机采样画圆 ...

  8. 第12章 粒子同心圆(《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将实现粒子同心圆,如图所示.首先学习面向对象编程的知识,为粒子类添加成员变量与成员函数:然后实现一个面向对象版本的运动粒子 ...

  9. 第10章 随机山水画(《Python趣味创意编程》教学视频)

    (图书介绍:童晶:<Python趣味创意编程>新书预告) 本章我们将绘制随机山水画,如图所示.首先学习HSB颜色模型,并实现天空颜色渐变的效果:接着利用柏林噪声,实现云朵和山脉的绘制:然后 ...

最新文章

  1. Windows Server 2012 RDS系列:虚拟桌面化(5)
  2. bzoj1047/luogu2216 理想的正方形 (单调队列)
  3. UIButton的几种触发方式
  4. 模板引擎工作原理_「白皮书解读搜索引擎的工作原理」如何排序
  5. 男子支付宝每天莫名进钱 吓得赶紧报警 最后真相哭笑不得...
  6. 字节大牛教你手撕Java学习,Java核心知识点
  7. 紧急事态分析及处理方法
  8. jquery 语法基础
  9. 代码很烂,所以离职。
  10. 数控系统市场下行压力逐渐增大
  11. AutoRunner学习——下载安装
  12. CSS( Cascading Style Sheets )简书
  13. 如何做好团队测试建设
  14. 在设计条形音箱时,确保您的无线技术能够提供最高质量的、可靠的音频
  15. warmup lr+CosineAnnealingLR策略
  16. Java面向对象(OOP)--面向过程 面向对象 OOP详解
  17. 关于特征值特征向量和矩阵分解的理解总结
  18. WPARAM 与 LPARAM
  19. UE4元数据关键字的应用与含义,函数的标记和特殊使用(三)
  20. C++指针遍历数组解析

热门文章

  1. 观星(【CCF】NOI Online能力测试3 入门组)
  2. P1059 明明的随机数(C/C++)
  3. Python3.x中的三目运算实现方法
  4. 分享一个stm32的OLED驱动,实现图像平移滚动滑动,esp8266-wifi物联网远程开关天气,开源代码电路原理图
  5. 【搬运】卡尔曼滤波详解及实例
  6. 【分享】费曼技巧---以教促学
  7. Webpack基础学习
  8. Linux 命令:ls
  9. Runner站立会议06
  10. 常见地理知识总结的连接