Музыкальный визуализатор на EL-ленте с Arduino — оживите звук светом
Компоненты и материалы
| Arduino UNO | 1 |
| EL Shield для Arduino (SeeedStudio) | 1 |
| EL-лента зеленая 1 м | 1 |
| EL-лента красная 1 м | 1 |
| EL-лента синяя 1 м | 1 |
О проекте
Использовался EL Shield от SeeedStudio с Arduino UNO. Лента подключена к 3 из 4 каналов шилда.
После сборки просто загрузите код и включайте музыку!
Код использует Processing и библиотеку Processing Arduino Library. Вам понадобятся оба инструмента.
- Библиотеку для Arduino: ссылка
- Processing: processing.org
Положите библиотеку Arduino в папку libraries скетчбука Processing и откройте код в редакторе Processing.
Измените строку 38 в BeatWrite:
song = minim.loadFile("/home/paul/Music/dope.mp3", 2048);
на путь к вашему локальному MP3-файлу и нажмите Play!
Код
BeatWrite (Processing / Java)
/**
* Демонстрация BeatDetect в режиме FREQ_ENERGY.
* Используйте isKick, isSnare, isHat, isRange, isOnset(int) для отслеживания бит.
* Вызывайте detect() с последовательными аудиобуферами.
* AudioListener (BeatListener) вызывает 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; // EL канал 1
int ledPin2 = 2; // EL канал 2
int ledPin3 = 3; // EL канал 3
float kickSize, snareSize, hatSize;
void setup() {
size(512, 200, P3D);
minim = new Minim(this);
arduino = new Arduino(this, "/dev/ttyACM1", 57600);
song = minim.loadFile("/home/paul/Music/dope.mp3", 2048);
song.play();
beat = new BeatDetect(song.bufferSize(), song.sampleRate());
beat.setSensitivity(100); // демпфирование 300 мс
kickSize = snareSize = hatSize = 16;
bl = new BeatListener(beat, song);
textFont(createFont("Helvetica", 16));
textAlign(CENTER);
arduino.pinMode(ledPin+3, Arduino.OUTPUT);
arduino.pinMode(ledPin2+3, Arduino.OUTPUT);
arduino.pinMode(ledPin3+3, Arduino.OUTPUT);
}
void draw() {
background(0);
fill(255);
if(beat.isKick()) {
arduino.digitalWrite(ledPin+3, Arduino.HIGH);
kickSize = 32;
}
if(beat.isSnare()) {
arduino.digitalWrite(ledPin2+3, Arduino.HIGH);
snareSize = 32;
}
if(beat.isHat()) {
arduino.digitalWrite(ledPin3+3, Arduino.HIGH);
hatSize = 32;
}
arduino.digitalWrite(ledPin+3, Arduino.LOW);
arduino.digitalWrite(ledPin2+3, Arduino.LOW);
arduino.digitalWrite(ledPin3+3, Arduino.LOW);
textSize(kickSize); text("KICK", width/4, height/2);
textSize(snareSize); text("SNARE", width/2, height/2);
textSize(hatSize); text("HAT", 3*width/4, height/2);
kickSize = constrain(kickSize * 0.95, 16, 32);
snareSize = constrain(snareSize * 0.95, 16, 32);
hatSize = constrain(hatSize * 0.95, 16, 32);
}
void stop() {
song.close();
minim.stop();
super.stop();
}
BeatListener (Processing / Java)
class BeatListener implements AudioListener {
private BeatDetect beat;
private AudioPlayer source;
BeatListener(BeatDetect beat, AudioPlayer source) {
this.source = source;
this.source.addListener(this);
this.beat = beat;
}
void samples(float[] samps) {
beat.detect(source.mix);
}
void samples(float[] sampsL, float[] sampsR) {
beat.detect(source.mix);
}
}
Производственный процесс
- Пружины из музыкальной проволоки: прочность, долговечность и современное применение
- Проектирование UX для пожилых пользователей: исчерпывающее руководство
- Почему важна цифровая память
- Универсальный скотч: прочность, гибкость и бытовое применение
- Наследие и эволюция классического джукебокса
- Нотные издания: от средневековых манускриптов к современному издательству — обзор отрасли
- Сканеры штрих-кода: технологии, дизайн и будущие тренды
- Комментарии в C++: лучшие практики для читаемого и поддерживаемого кода
- Выбор между Data Matrix и QR-кодами: что лучше для вашего бизнеса
- G-коды ЧПУ объяснены: основное руководство для программистов ЧПУ