ArduinoでMocoLUFA。
製作者の方へ、こんな素晴らしいものをありがとう…って、伝えてない。
感謝してます。
で、昨日のトラブル、RaspberryPiの処理能力の限界かなあなんて思ってたりした。
monoBristolもラズパイで動かすと、音が飛んだりするものだから。



で、プログラム(スケッチ)を見直した。
結果はバグ(プログラムの致命的なミス)だった。
残響が弦を離しても、完全に閉じてくれず、音が止まらなくなっていた。
弦を押えるごとに、その閉じてない音は重なりを持ち、ラズパイを苦しめることになっていた。
スケッチはちょっと、カッコつけて書いてからにしようかな。
リセットボタンを押すことで音が鳴るようにした。
音が万が一ならない場合、PC側の不良か、ギター側の不良か確認するためのもの。
もうちょっと気の利いた音にしたいけど、時間なし。
とりあえずの結果だけど、安定して動いてくれている。
しばらく、動作チェックをしながら、トラブルが起きないか確認してみる。
ギターのテクニックを知らないものだから、どこまでやればいいのか手探り状態。
もっと、ディレイを減らして、音を詰めて、短い音がどれだけ出せるかやってみたい。
感度が悪いので、出来ないかもしれない。
音がサラサラしているので、オラ的には、もっとサスティーン?を効かせて癖のある感じが嬉しかったりする。
微調整をすると言いながら…。
演奏の自由度を広げる方が先だなあ。
アメンバーはブログを更新している人で読者であること…まだ未定。
で、冷静に考えてみるとカラオケって凄いなあ。
PC側のこと、やりたくなってきたけど…。
個人的に面白くなりそーです。
#include <MIDI.h>MIDI_CREATE_DEFAULT_INSTANCE();int i;int j;int k;int sign = LOW;int buffer1 = 0;int buffer2 = LOW;int waon[7];//int notenumber[]={0,36,38,40,41,43,45,47,48,50,52,53,55,57,59,60,62,64,65,67,69,71,72,74,76,77,79,81,83,84,86,88,89,91,93,95,96,98,100,101};int notenumber[19]{0,41,42,43,46,47,48,51,52,53,56,57,58,60,61,62,65,66,67};int gaugePin = 2;#define fretPin_1 8#define fretPin_2 9void setup(){MIDI.begin(1);// Serial.begin(9600);pinMode( 2, OUTPUT);pinMode( 3, OUTPUT);pinMode( 4, OUTPUT);pinMode( 5, OUTPUT);pinMode( 6, OUTPUT);pinMode( 7, OUTPUT);pinMode( fretPin_1, INPUT);pinMode( fretPin_2, INPUT);//MIDI.sendPitchBend(-8000,1);//MIDI.sendProgramChange(27,1);// MIDI.sendControlChange(76,100,1);//MIDI.sendAfterTouch(261,1);static boolean sign = HIGH;PLAY ();delay(300);sign = !sign;STOP ();}void loop() {if(sign == LOW){buffer1 = 0;for(i = 1 ; i < 19 ; i++){SoundRead ();j++;gaugePin++;}}k = 777;if(sign == HIGH && buffer2 == LOW){PLAY ();}if(sign == HIGH && buffer2 == HIGH){SoundDELAY ();}if(sign == HIGH && buffer2 == HIGH && buffer1 == 0){STOP ();// for(j = 1 ; j < 7 ; j++){// waon[j] = 0;// }buffer2 = LOW;}// sign = 0;buffer1 = 0;gaugePin = 2;j = 1;}void SoundRead (){digitalWrite(gaugePin,HIGH);delay(50);if(digitalRead(fretPin_1) == LOW && digitalRead(fretPin_2) == LOW){waon[j] = 0;}delay(5);if(digitalRead(fretPin_1) == LOW && digitalRead(fretPin_2) == HIGH){waon[j] = i;sign = HIGH;}i = i + 1;delay(5);if(digitalRead(fretPin_1) == HIGH && digitalRead(fretPin_2) == HIGH){waon[j] = i ;sign = HIGH;}i = i + 1;delay(5);if(digitalRead(fretPin_1) == HIGH && digitalRead(fretPin_2) == LOW){waon[j] = i;sign = HIGH;}delay(5);digitalWrite(gaugePin,LOW);delay(5);}void SoundDELAY (){for(gaugePin = 2 ; gaugePin < 8 ; gaugePin++){digitalWrite(gaugePin,HIGH);delay(5);if(digitalRead(fretPin_1) == HIGH || digitalRead(fretPin_2) == HIGH){buffer1++;}digitalWrite(gaugePin,LOW);delay(5);}delay(5);}void PLAY (){k = waon[1];switch (k) {case 1:MIDI.sendNoteOn(notenumber[waon[1]], 100, 1);//MIDI.sendPolyPressure(notenumber[waon[1]],10,1);break;case 2:MIDI.sendNoteOn(notenumber[waon[1]], 100, 1);break;case 3:MIDI.sendNoteOn(notenumber[waon[1]], 100, 1);break;//default:case 0:MIDI.sendNoteOn(40, 100, 1);break;}delay(50);k = waon[2];switch (k) {case 4:MIDI.sendNoteOn(notenumber[waon[2]], 100, 1);break;case 5:MIDI.sendNoteOn(notenumber[waon[2]], 100, 1);break;case 6:MIDI.sendNoteOn(notenumber[waon[2]], 100, 1);break;//default:case 0:MIDI.sendNoteOn(45, 100, 1);break;}delay(50);k = waon[3];switch (k) {case 7:MIDI.sendNoteOn(notenumber[waon[3]], 100, 1);break;case 8:MIDI.sendNoteOn(notenumber[waon[3]], 100, 1);break;case 9:MIDI.sendNoteOn(notenumber[waon[3]], 100, 1);break;//default:case 0:MIDI.sendNoteOn(50, 100, 1);break;}delay(50);k = waon[4];switch (k) {case 10:MIDI.sendNoteOn(notenumber[waon[4]], 100, 1);break;case 11:MIDI.sendNoteOn(notenumber[waon[4]], 100, 1);break;case 12:MIDI.sendNoteOn(notenumber[waon[4]], 100, 1);break;//default:case 0:MIDI.sendNoteOn(55, 100, 1);break;}delay(50);k = waon[5];switch (k) {case 13:MIDI.sendNoteOn(notenumber[waon[5]], 100, 1);break;case 14:MIDI.sendNoteOn(notenumber[waon[5]], 100, 1);break;case 15:MIDI.sendNoteOn(notenumber[waon[5]], 100, 1);break;//default:case 0:MIDI.sendNoteOn(59, 100, 1);break;}delay(50);k = waon[6];switch (k) {case 16:MIDI.sendNoteOn(notenumber[waon[6]], 100, 1);break;case 17:MIDI.sendNoteOn(notenumber[waon[6]], 100, 1);break;case 18:MIDI.sendNoteOn(notenumber[waon[6]], 100, 1);break;//default:case 0:MIDI.sendNoteOn(64, 100, 1);break;}buffer2 =HIGH;}void STOP () {sign = LOW;k = waon[1];if(k != 0){MIDI.sendNoteOff(notenumber[waon[1]], 100, 1);delay(30);}else if(k == 0){MIDI.sendNoteOff(40, 100, 1);delay(30);}k = waon[2];if(k != 0){MIDI.sendNoteOff(notenumber[waon[2]], 100, 1);delay(30);}else if(k == 0){MIDI.sendNoteOff(45, 100, 1);delay(30);}k = waon[3];if(k != 0){MIDI.sendNoteOff(notenumber[waon[3]], 100, 1);delay(30);}else if(k == 0){MIDI.sendNoteOff(50, 100, 1);delay(30);}k = waon[4];if(k != 0){MIDI.sendNoteOff(notenumber[waon[4]], 100, 1);delay(30);}else if(k == 0){MIDI.sendNoteOff(55, 100, 1);delay(30);}k = waon[5];if(k != 0){MIDI.sendNoteOff(notenumber[waon[5]], 100, 1);delay(30);}else if(k == 0){MIDI.sendNoteOff(59, 100, 1);delay(30);}k = waon[6];if(k != 0){MIDI.sendNoteOff(notenumber[waon[6]], 100, 1);delay(30);}else if(k == 0){MIDI.sendNoteOff(64, 100, 1);delay(30);}}