研究テーマ->音楽とロボット->オリジナル制作のロボット->Arduinoで 楽器音を再生する

   
  ここでは、Arduinoを使用して効果音を再生する方法について紹介します。 toneの機能を使用する他、PWMのピンを使用して、サンプリング音で効果音を再生することもできます。  
 
Music Shieldで楽器音を再生する
  Music Shield で楽器の音を出すことができます。  
 

 

 

Music Shieldのライブラリをインストールする

  Music Shieldのライブラリをインストールします。  
 

 
  MusicPlayer.hの内容を変更します。  
  privateメンバーをpublicメンバーに移動します。
//for Midi Player
void midiWriteData(byte cmd, byte high, byte low);
void midiNoteOn(byte channel, byte note, byte rate);
void midiNoteOff(byte channel, byte note, byte rate);
void midiSendByte(byte data);
 
  下記はMusic Shieldを使用してMIDIを利用して楽器音を鳴らすためのサンプルスケッチです。  
  #include <SD.h>
#include <SPI.h>
#include <MusicPlayer.h>

void setup()
{
 Serial.begin(115200);
 midiInit();

int midi_bank=1;
 setMIDIBank (midi_bank);
 
}

void PlaySample()
{
 for (int note = 35; note <81; note++) {
  player.midiNoteOn(9, note, 127); //
  delay (500);
 }

 for (int i=0;i<127;i++) {
 Serial.print ("Playing instrument: ");
 Serial.println (i);
 player.midiWriteData(0xC0, i, 0); // Select instrument
  for (int note = 48; note <60; note++) {
   player.midiNoteOn(0, note, 127); // Play
   delay (100);
   player.midiNoteOff(0, note, 127); // Stop playing
   delay (100);
  }
 }
}

void loop()
{
 PlaySample();
}

// Initializes MIDI
void midiInit(){
 player.beginInMidiFmt();
 player.midiWriteData(0xB0, 0x07, 120); // Set MIDI channel volume
}

// Sets MIDI bank to GM1 or GM2. Takes values 1 or 2
void setMIDIBank(byte bank) {
if (bank==1) player.midiWriteData(0xB0, 0, 0x00); // Select bank GM1
else player.midiWriteData(0xB0, 0, 0x78); // Select bank GM2
}
 

 

http://www.mu-tech.co.jp/Soft/midisample.zip