ギター音はMIDIで難しい部類だと(サイレントギターシンセの自作) | ..あちゃ! no mic's

..あちゃ! no mic's

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

SANTA no Mix

サイレントギターシンセのレーザーピックアップにとりかかる前に、MIDIでギター音を合わせたい。
いまどきのソフトでは簡単に調整できるみたいだけど、MIDIプログラミングでギター音の調整をすること、ネットで調べたけど、見つからず。
ArduinoのMIDI.h(ライブラリ)のコマンド一覧はあったので、MIDIプログラミングの勉強をすれば出来るようだ。
リアルなギターの音がやっぱり欲しい。

和音がうまく鳴らなかったのカイゼンしてみた。
今のままじゃあ、オモチャだなあ。



とりあえずのスケッチ。
赤字のところのようにいろんな数値を入れて調整するみたいだ。
いろんな設定が出来るらしく、ひとつひとつ当て込んで、調べている。
早くギターと同じように音を振り分けて対応させて、ChordBuddy(コードバディ)をつけて仮演奏してみたい。

ギターは6弦同時に、はじくものだということに気が付いた(笑)。
押えるだけでは、押えてない弦の音を出すことができない。
その対処を考え中。

#include <MIDI.h>

MIDI_CREATE_DEFAULT_INSTANCE();

int i;
int j;
int k;
int sign;
int waon[7];
int notenumber[]={0,72,74,76,77,79,81,83,84,86,88,89,91,93,95,96,98,100,101};
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(27,1); 
     //MIDI.sendControlChange(73,100,1);
     MIDI.sendAfterTouch(1,1); 
}

void loop() {
  for(i = 1 ; i < 19 ; i++){ 
    SoundRead();
    j++;
    gaugePin++;
  }
 if(sign == 1){
   PLAY();
 }
  k = 0;
  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) == HIGH){
        waon[j] = i;
        sign = 1;
     }
     i = i + 1;
     delay(0);
      if(digitalRead(fretPin_1) == HIGH && digitalRead(fretPin_2) == HIGH){
        waon[j] = i ;
        sign = 1;
     } 
     i = i + 1; 
      delay(0);
      if(digitalRead(fretPin_1) == HIGH && digitalRead(fretPin_2) == LOW){
        waon[j] = i;
        sign = 1;
     }
      delay(0);
  digitalWrite(gaugePin,LOW);
  delay(0);
}

 void PLAY ()
 {
     k = waon[1];
     if(k != 0){
    
        MIDI.sendNoteOn(notenumber[waon[1]], 1000, 1);
        //MIDI.sendPolyPressure(notenumber[waon[1]],10,1);
        delay(5);
     }
     k = waon[2];
     if(k != 0){
      
        MIDI.sendNoteOn(notenumber[waon[2]], 100, 1);
        delay(5);
      }
     k = waon[3];
     if(k != 0){
   
        MIDI.sendNoteOn(notenumber[waon[3]], 100, 1);
        delay(5);
     }
     k = waon[4];
     if(k != 0){
      
        MIDI.sendNoteOn(notenumber[waon[4]], 100, 1);
        delay(5);
      }
     k = waon[5];
     if(k != 0){
      
        MIDI.sendNoteOn(notenumber[waon[5]], 100, 1);
        delay(5);
     }
     k = waon[6];
     if(k != 0){
      
        MIDI.sendNoteOn(notenumber[waon[6]], 100, 1);
        delay(5);
     }
     
              delay(1000);
        
     k = waon[1];
     if(k != 0){
        MIDI.sendNoteOff(notenumber[waon[1]], 0, 1);
        delay(5);
      }
     k = waon[2];
     if(k != 0){
        MIDI.sendNoteOff(notenumber[waon[2]], 0, 1);
        delay(5);
      }
     k = waon[3];
     if(k != 0){
        MIDI.sendNoteOff(notenumber[waon[3]], 0, 1);
        delay(5);
      }
     k = waon[4];
     if(k != 0){
        MIDI.sendNoteOff(notenumber[waon[4]], 0, 1);
        delay(5);
     }
     k = waon[5];
     if(k != 0){
        MIDI.sendNoteOff(notenumber[waon[5]], 0, 1);
        delay(5);
     }
     k = waon[6];
     if(k != 0){
        MIDI.sendNoteOff(notenumber[waon[6]], 0, 1); 
        delay(5);
     }
 }