6弦独立音再現!(微調整要)サイレントギターシンセ自作 | ..あちゃ! no mic's

..あちゃ! no mic's

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

SANTA no Mix

Linux-Arduinoでサイレントギターシンセ製作、自主開発。
6弦のハーモニー・・・か。
ピッチをバリュー値いっぱいに下げた(-8000)。
残触覚の調整要。
コントロールチェンジ76番ビブラート(100)かけるも、自分の耳では分からず調整できない。
ポリフォニックプレッシャーで各弦ごとの圧力を調整できる余地がある。





Arduinoのスケッチ。
あくまでも過程なのでバグ等あるかもしれない。
ご注意を。

#include <MIDI.h>


MIDI_CREATE_DEFAULT_INSTANCE();


int i;

int j;

int k;

int sign;

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[]{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();

   // 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(25,1); 

     MIDI.sendControlChange(76,100,1);

     MIDI.sendAfterTouch(261,1); 

}


void loop() {

  for(i = 1 ; i < 19 ; i++){ 

    SoundRead();

    j++;

    gaugePin++;

  }

   k = 777;

 if(sign == 1){

   PLAY();

 }

  sign = 0;

  gaugePin = 2;

  for(j = 1 ; j < 7 ; j++){

     waon[j] = 0;

  }

  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 = 1;

     }

     i = i + 1;

     delay(5);

      if(digitalRead(fretPin_1) == HIGH && digitalRead(fretPin_2) == HIGH){

        waon[j] = i ;

        sign = 1;

     } 

     i = i + 1; 

      delay(5);

      if(digitalRead(fretPin_1) == HIGH && digitalRead(fretPin_2) == LOW){

        waon[j] = i;

        sign = 1;

     }

      delay(5);

  digitalWrite(gaugePin,LOW);

  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:

             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:

             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:

             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:

             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:

             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:

             MIDI.sendNoteOn(64, 100, 1);

             break;

     }

            delay(50);

      

              delay(500);

        

     k = waon[1];

     if(k != 0){

        MIDI.sendNoteOff(notenumber[waon[1]], 0, 1);

        delay(5);

     }

     else if(k == 0){

       MIDI.sendNoteOff(40, 0, 1);

       delay(5);

      }

      

     k = waon[2];

     if(k != 0){

        MIDI.sendNoteOff(notenumber[waon[2]], 0, 1);

        delay(5);

     }

     else if(k == 0){

        MIDI.sendNoteOff(45, 0, 1);

        delay(5);

     }

      

     k = waon[3];

     if(k != 0){

       MIDI.sendNoteOff(notenumber[waon[3]], 0, 1);

       delay(5);

      }

      else if(k == 0){

       MIDI.sendNoteOff(50, 0, 1);

       delay(5);

      }


     k = waon[4];

     if(k != 0){

        MIDI.sendNoteOff(notenumber[waon[4]], 0, 1);

        delay(5);

     }

     else if(k == 0){

       MIDI.sendNoteOff(55, 0, 1);

       delay(5);

     }


     k = waon[5];

     if(k != 0){

        MIDI.sendNoteOff(notenumber[waon[5]], 0, 1);

        delay(5);

     }

     else if(k == 0){

       MIDI.sendNoteOff(59, 0, 1);

       delay(5);

     }

 

     k = waon[6];

     if(k != 0){

        MIDI.sendNoteOff(notenumber[waon[6]], 0, 1);

        delay(5);

     }

    else if(k == 0){

        MIDI.sendNoteOff(64, 0, 1);

        delay(5);

    } 

 }