DIYギター!(スケッチ公開/動画あり)テスト良好! | ..あちゃ! no mic's

..あちゃ! no mic's

クラウドファンディング予定~2026年度
何度でもチャレンジ!
ただいまソーラーピックアップのテスト中

SANTA no Mix

サイレントギターシンセサイザー自作。
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 9

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