しがない19歳です。
特徴
スイッチ3つだけで全てのピアノの音を鳴らすことができる。PCのキーボードと連携していて、方向キーで鍵盤にある手の位置を動かすことができる。方向キーを左右に押せば左右に動き、上を押せばシャープを押せるようになる。
作り方
1 Arduinoでスイッチを読み取るプログラムとProcessingに読み取ったデータを送るプログラムを書く。
→1bitずつしか送れないため、スイッチから読み取ったデータ3bitを1bitにすることで遅延を減らすことに成功した。
2 Processing側で受け取るプログラムを書く。
3 Processing側で鍵盤の画像を貼り付け、手の位置も追加する。
動作の様子は以下を御覧ください。
→ https://twitter.com/Kod75656124/status/1341589357447155712
使用言語
Arduino
Processing
これだけは言いたい。
キーボードで鍵盤を押せば遅延も少ないし良くない?と思った人。たしかにそうですが、なんかスイッチで押したかったんです!!
・
・
・
Arduino
void setup() {
Serial.begin(9600);
}
void loop() {
int x = digitalRead(2);
int y = digitalRead(4);
int z = digitalRead(7);
if (x == 0) {
Serial.write('1');
}
if (y == 0) {
Serial.write('2');
}
if (z == 0) {
Serial.write('3');
}
delay(5);
}
・
・
・
Processing
import processing.serial.;
Serial serial;
import ddf.minim.;
import ddf.minim.signals.*;
Minim minim;
AudioOutput out;
SineWave wave;
PImage img;
int x;
int y=0;
int z=0;
int a=0;
int num=0;
void setup() {
size(800, 800);
img = loadImage("a.png");
serial = new Serial( this, Serial.list()[0], 9600 );
minim = new Minim(this);
out = minim.getLineOut(Minim.STEREO);
wave = new SineWave(0, 1.0, out.sampleRate());
out.addSignal(wave);
}
void draw() {
background(0);
image(img, 20, 20, 770, 750);
fill(0, 0, 150);
ellipse(70+num+z, 530+y, 30, 30);
ellipse(165+num+z, 500+y, 30, 30);
ellipse(260+num+a, 530+y, 30, 30);
wave.setFreq(0);
}
void serialEvent(Serial port) {
x = port.read();
println(x);
delay(5);
if (y0) {
if (num0) {
if (x49) {
wave.setFreq(523.25);
}
if (x50) {
wave.setFreq(587.32);
}
if (x==51) {
wave.setFreq(659.25);
}
}
if (num==95) {
if (x==49) {
wave.setFreq(587.32);
}
if (x==50) {
wave.setFreq(659.25);
}
if (x==51) {
wave.setFreq(698.46);
}
}
if (num==190) {
if (x==49) {
wave.setFreq(659.25);
}
if (x==50) {
wave.setFreq(698.46);
}
if (x==51) {
wave.setFreq(783.99);
}
}
if (num==285) {
if (x==49) {
wave.setFreq(698.46);
}
if (x==50) {
wave.setFreq(783.99);
}
if (x==51) {
wave.setFreq(880.00);
}
}
if (num==380) {
if (x==49) {
wave.setFreq(783.99);
}
if (x==50) {
wave.setFreq(880.00);
}
if (x==51) {
wave.setFreq(987.77);
}
}
if (num==475) {
if (x==49) {
wave.setFreq(880.00);
}
if (x==50) {
wave.setFreq(987.77);
}
if (x==51) {
wave.setFreq(1046.50);
}
}
} else {
if (x49) {
wave.setFreq(554.37);
}
if (x50) {
wave.setFreq(622.25);
}
if (x==51) {
wave.setFreq(739.99);
}
}
}
void stop() {
out.close();
minim.stop();
super.stop();
}
void keyPressed() {
if (key == CODED) { // コード化されているキーが押された
if (keyCode == RIGHT) { // キーコードを判定
num+=95;
} else if (keyCode == LEFT) {
num-=95;
} else if (keyCode == UP) {
num=0;
y=-150;
z+=47;
a+=147;
} else if (keyCode == DOWN) {
num=190;
y+=150;
z-=47;
a-=147;
}
}
}
投稿者の人気記事
-
Kod
さんが
2021/01/20
に
編集
をしました。
(メッセージ: 初版)
-
Kod
さんが
2021/01/24
に
編集
をしました。
ログインしてコメントを投稿する