EL Tape Music Visualiser
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
关于这个项目
EL 屏蔽和连接器SeeedStudio 带有 EL 屏蔽的 EL 胶带与 Arduino UNO 一起使用。磁带连接到 4 个通道中的 3 个的屏蔽。
完成后,只需上传代码并开始播放音乐!
该代码使用了 Processing 以及 Processing Arduino 库。你需要让这两者都工作才能使用它。
在此处获取 Arduino 库。
在 https://processing.org/
获取处理
安装完成后,将 arduino 库移动到处理草图文件夹的库文件夹中,然后在处理编辑器中打开代码。
换行:
song =minim.loadFile("/home/paul/Music/dope.mp3", 2048);
在 BeatWrite 的第 38 行写入本地 MP3 文件并点击播放!
代码
- BeatWrite
- BeatListener
BeatWriteJava
用于处理 2 的 BeatWrite 草图/** * 该草图演示了如何在 FREQ_ENERGY 模式下使用 BeatDetect 对象。
* 您可以使用isKick
、isSnare
, isHat,isRange
, * 和isOnset(int)
跟踪您要跟踪的任何类型的节拍,他们将报告 * true或 false 基于分析的状态。要“勾选”分析,您必须使用连续的音频缓冲区调用detect
*。您可以在draw
中执行此操作,但如果执行此操作,您可能会错过一些 * 音频缓冲区。该草图实现了一个名为BeatListener
* 的AudioListener
,以便它可以在系统处理的每个音频缓冲区上调用detect
,而无需重复缓冲区 * 或缺一个。 ** 此草图播放整首歌曲,因此加载可能会有点慢。 */import processing.serial.*;import ddf.minim.*;import ddf.minim.analysis.*;import cc.arduino.*;Minim minim;AudioPlayer song;BeatDetect beat;BeatListener bl;Arduino arduino;int ledPin =1; // LED 连接到 EL 通道 1int ledPin2 =2; // LED 连接到 EL 通道 2int ledPin3 =3; // LED 连接到 EL 通道 3float kickSize, snareSize, hatSize;void setup() { size(512, 200, P3D); minim =新的 Minim(this); arduino =新的 Arduino(这个,“/dev/ttyACM1”,57600);歌曲 =minim.loadFile("/home/paul/Music/dope.mp3", 2048);歌曲播放(); // FREQ_ENERGY 模式的节拍检测对象 // 期望缓冲歌曲缓冲区大小的长度 // 并以歌曲的采样率捕获样本 beat =new BeatDetect(song.bufferSize(), song.sampleRate()); // 将灵敏度设置为 300 毫秒 // 检测到心跳后,算法将等待 300 毫秒 // 在允许报告另一个心跳之前。如果它给出太多误报,您可以使用它来抑制 // 算法。默认值是 10, // 基本上没有阻尼。 // 如果你尝试将灵敏度设置为负值, // 会报错,改为设置为 10。 beat.setSensitivity(100); kickSize =snareSize =hatSize =16; // 创建一个新的节拍监听器,这样我们就不会错过任何用于分析的缓冲区 bl =new BeatListener(beat, song); textFont(createFont("Helvetica", 16));文本对齐(中心); arduino.pinMode(ledPin+3, Arduino.OUTPUT); arduino.pinMode(ledPin2+3, Arduino.OUTPUT); arduino.pinMode(ledPin3+3, Arduino.OUTPUT); }void draw() { 背景(0);填充(255); if(beat.isKick()) { arduino.digitalWrite(ledPin+3, Arduino.HIGH); // 将 LED 设置为 kickSize =32; } if(beat.isSnare()) { arduino.digitalWrite(ledPin2+3, Arduino.HIGH); // 将 LED 设置为 snareSize =32; } if(beat.isHat()) { arduino.digitalWrite(ledPin3+3, Arduino.HIGH); // 将 LED 设置为 hatSize =32; arduino.digitalWrite(ledPin+3, Arduino.LOW); // 关闭 LED arduino.digitalWrite(ledPin2+3, Arduino.LOW); // 关闭 LED arduino.digitalWrite(ledPin3+3, Arduino.LOW); // 设置 LED 关闭 textSize(kickSize);文本(“踢”,宽度/ 4,高度/ 2);文本大小(圈套大小);文本(“圈套”,宽度/ 2,高度/ 2);文本大小(帽子大小);文本(“帽子”,3*宽/4,高/2); kickSize =约束(kickSize * 0.95, 16, 32);圈套尺寸 =约束(圈套尺寸 * 0.95, 16, 32); hatSize =约束(hatSize * 0.95, 16, 32); }void stop() { // 当你完成 Minim 音频类时总是关闭它们 song.close(); // 在退出 minim.stop() 之前总是停止 Minim; // 这将关闭草图 super.stop();}
BeatListenerJava
class BeatListener 实现 AudioListener{ private BeatDetect beat;私人音频播放器源; BeatListener(BeatDetect beat, AudioPlayer source) { this.source =source; this.source.addListener(this); this.beat =节拍; }无效样本(浮动[]样本){beat.detect(source.mix); } void samples(float[] sampsL, float[] sampsR) { beat.detect(source.mix); }}
制造工艺