互动影像设计:音乐可视化作业 processing

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");
}

碎碎念:上学期写的一个作业,整理整理,现在康康还是感觉蛮好玩的,这种效果比较适合欢快节奏感强的歌曲

  • 6
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值