processing音乐可视化作业
作业中用的是aespa的发行单曲《Black Mamba》,图片来自aespa官方微博,侵删
效果如下
代码部分
周围圆轨迹、中心圆、图片在Particle类中
class Particle {
float r, angle, d;//中心圆的直径r,周围小圆的旋转角度和直径
PImage img;
int[] c = new int[3];//颜色数组
Particle(float r, float d) {
this.r =r;
this.angle = random(radians(0), 2*PI);
this.d = d;
img = loadImage("aespa.png");//aespa的照片
for(int j=0;j<3;j++){
c[j]=0;
}
}
//调用下面两个方法
void run(float rms) {
display(rms);
update(rms);
}
//周围小圆点位置更新,形成轨迹
void update(float rms) {
//使旋转角度随音频振幅大小变化
angle+=rms/18;
}
//展示
void display(float rms) {
pushMatrix();
translate(width/2, height/2);
rotate(angle);
colorChange(rms);//利用振幅的变化改变小球颜色
float radius = map(rms, 0, 1, 0, 600);
ellipseMode(CENTER);
ellipse(0, 0, radius, radius);
ellipse(r, r, d, d);
imageMode(CENTER);
image(img, 0, 0, 200, 200);
popMatrix();
}
//颜色随振幅参数改变
void colorChange(float rms) {
colorMode(HSB);
noStroke();
fill(c[0], c[1], c[2]);
int ca =(int)map(rms, 0, 1, 0,10);
for (int i=0; i<c.length; i++) {
c[i]+=ca;
if(c[i]>255||c[i]<0){
c[i]=0; //当颜色值大于255时使之清零
}
}
}
}
主标签内容
实例化Particle类
import processing.sound.*;
//导入sound库,这个是要自己下载的:速写本——引用库文件——添加库文件——Libraries搜索栏输入:sound——选择搜索结果中的sound然后install(不过下载的很慢就是了)
AudioIn audio;
Amplitude amp;
//振幅影响速度
String filename;
Particle[] particles;
SoundFile file;
void setup() {
size(1000, 1000);
smooth();
background(0);
particles =new Particle[4];//周围想几个轨迹就设置几个圆
for (int i=0; i<particles.length; i++) {
particles[i]=new Particle(random(150, 300), 5);
}
//指定音乐文件播放
file = new SoundFile(this, "Black_mamba.mp3");
file.play();
//采集音频振幅
amp = new Amplitude(this);
amp.input(file);
//保存图片
filename = this.getClass().getName();
}
void draw() {
fill(0, 10);
noStroke();
rect(0, 0, width, height);
float rms = amp.analyze();//返回音频振幅数据
rms = constrain(rms, 0, 1);
for (int i=0; i<particles.length; i++) {
particles[i].run(rms);
}
}
//鼠标点击界面即可保存图片
void mousePressed() {
saveFrame(filename+".jpg");
}
碎碎念:上学期写的一个作业,整理整理,现在康康还是感觉蛮好玩的,这种效果比较适合欢快节奏感强的歌曲