チラシのうら

レゴとか、工作とか。

8pinoで圧電スピーカーを鳴らす その5

もう、飽きましたよね

8pinoで圧電スピーカーから曲を流すのはこれが最終回です。

発端は

前回の輪唱 を家族に自慢しに行った時の話です。

(私)「スゴいでしょ、これ!」
(家)「ウーン、すごさがよくわからないよ。輪唱もそんなに好きじゃないし」
(私)「…じゃあ、なんなら良いのさ!」
(家)「やっぱり、別々の旋律/和音を聞きたいでしょう。合唱とか、ピアノの曲とか」
(私)「ほぅ。例えば?」
(家)「合唱なら『ふるさと』、ピアノは『 パッフェルベルのカノン 』が好き」

と言うわけで 今度は、上記の2つを実現してみます。

早速、結果からどうぞ。

文部省唱歌 故郷(ふるさと) 合唱Ver.

ブザー音なのに、哀愁漂います。

パッフェルベルのカノン 両手Ver.

Johann Pachelbel : Canon in C.

エンドレスリピートな曲に仕上がりました。ちょっとペース早いかなぁ。

苦労した点とか

輪唱は良かったんです。だって、演奏するデータは、どっちのスピーカーも同じで良いので。
別々の旋律と言うことは、メモリも2倍、データ入力作業も2倍必要です。 例えばカノンの例だと、入力作業に1時間程かかっています。

「ふるさと」のコードはこちら

#include <Adafruit_NeoPixel.h>
#ifdef __AVR_ATtiny85__ // Trinket, Gemma, etc.
 #include <avr/power.h>
#endif

#define NEOPIXEL_IN_PIN 0
#define NUM_OF_PIXELS 16
#define NEOPIXEL_BRIGHTNESS 30
Adafruit_NeoPixel pixels = Adafruit_NeoPixel( NUM_OF_PIXELS, NEOPIXEL_IN_PIN );

// Definitions
#define _8PINO_TONE_START ( 0x00 )
#define _8PINO_TONE_STOP  ( 0x01 )

#define _8PINO_TONE_NOT_USED ( 0 )

#define _8PINO_TONE_SO_2 ( 158 )
#define _8PINO_TONE_RA_2 ( 141 )
#define _8PINO_TONE_SI_2 ( 126 )
#define _8PINO_TONE_DO_3 ( 118 )
#define _8PINO_TONE_RE_3 ( 106 )
#define _8PINO_TONE_MI_3 (  94 )
#define _8PINO_TONE_FA_3 (  89 )
#define _8PINO_TONE_FA_SH_3 (  83 )
#define _8PINO_TONE_SO_3 (  79 )
#define _8PINO_TONE_RA_3 (  70 )
#define _8PINO_TONE_SI_3 (  62 )
#define _8PINO_TONE_DO_4 (  59 )
#define _8PINO_TONE_RE_4 (  52 )
#define _8PINO_TONE_MI_4 (  46 )

// Global variables
#define _8PINO_TONE_SPEAKER_PIN_1 ( 1 )
#define _8PINO_TONE_SPEAKER_PIN_2 ( 4 )

#define SIZE_OF_TONE_ARRAY ( 192 )
PROGMEM prog_uint16_t noteArray1[] =
{
  
  // U-Sa-Gi O-I-Shi Ka-No-Ya-Ma-
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_RA_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, _8PINO_TONE_SI_3, _8PINO_TONE_STOP, 
  _8PINO_TONE_RA_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SI_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SI_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_DO_4, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_RE_4, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 

  // Ko-Bu-Na-Tsu-Ri-Shi Ka-No-Ka-Wa-
  _8PINO_TONE_DO_4, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_RE_4, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_MI_4, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SI_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, _8PINO_TONE_DO_4, _8PINO_TONE_STOP, 
  _8PINO_TONE_SI_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_RA_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_RA_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_FA_SH_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  
  // Yu-Me-Ha-I-Ma-Mo-Me-Gu-Ri-Te
  _8PINO_TONE_RA_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_SO_3, _8PINO_TONE_STOP, 
  _8PINO_TONE_RA_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_RE_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_RA_3, _8PINO_TONE_STOP, 
  _8PINO_TONE_SI_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SI_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_DO_4, _8PINO_TONE_NOT_USED, _8PINO_TONE_SI_3, _8PINO_TONE_STOP, 
  _8PINO_TONE_DO_4, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_MI_4, _8PINO_TONE_STOP, 
  _8PINO_TONE_RE_4, _8PINO_TONE_NOT_USED, _8PINO_TONE_DO_4, _8PINO_TONE_STOP, 
  _8PINO_TONE_SI_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  
  // Wa-Su-Re-Ga-Ta-Ki Hu-Ru-Sa-To
  _8PINO_TONE_RE_4, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_RE_4, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_RE_4, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, _8PINO_TONE_RA_3, _8PINO_TONE_STOP, 
  _8PINO_TONE_SI_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_DO_4, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_DO_4, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_RA_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  
};

PROGMEM prog_uint16_t noteArray2[] =
{
  
  // U-Sa-Gi O-I-Shi Ka-No-Ya-Ma-
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_FA_SH_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, _8PINO_TONE_SO_3, _8PINO_TONE_STOP, 
  _8PINO_TONE_FA_SH_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_RA_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SI_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 

  // Ko-Bu-Na-Tsu-Ri-Shi Ka-No-Ka-Wa-
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, _8PINO_TONE_RA_3, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_FA_SH_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_FA_SH_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_RE_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  
  // Yu-Me-Ha-I-Ma-Mo-Me-Gu-Ri-Te
  _8PINO_TONE_FA_SH_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_MI_3, _8PINO_TONE_STOP, 
  _8PINO_TONE_FA_SH_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_RE_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_FA_SH_3, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_RA_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_SO_3, _8PINO_TONE_STOP, 
  _8PINO_TONE_RA_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_DO_4, _8PINO_TONE_STOP, 
  _8PINO_TONE_SI_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_RA_3, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  
  // Wa-Su-Re-Ga-Ta-Ki Hu-Ru-Sa-To
  _8PINO_TONE_SI_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SI_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SI_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, _8PINO_TONE_FA_SH_3, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_RA_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_RA_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_FA_SH_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  
};

void setup(){
  
  // Initialize PIN mode.
  pinMode( _8PINO_TONE_SPEAKER_PIN_1, OUTPUT );
  pinMode( _8PINO_TONE_SPEAKER_PIN_2, OUTPUT );
  
  // Configure Registers for PWM of PB1(PIN No.1)
  //  1. Waveform Generation Mode -> Fast PWM
  //  2. Clock Select -> 8MHz/256 = 32KHz.
  //  3. Compare Match Output B Mode
  //    -> Clear OC0A/OC0B on Compare Match, 
  //        set OC0A/OC0B at BOTTOM
  TCCR0A = _BV (COM0B1) | _BV (WGM01) | _BV (WGM00);
  TCCR0B = _BV (WGM02) | _BV (CS02);
  
  // Configure Registers for PWM of PB4(PIN No.4)
  //  1. Comparator A Mode -> Set the OC1A output line.
  //  2. Time/Counter1 Prescale Select -> 8MHz/256 = 32KHz.
  //  3. Enable Pulse Width Modulator B.
  //  4. Comparator B Mode -> Set the OC1B output line
  TCCR1 = _BV (COM1A1) | _BV (COM1A0) | 
             _BV (CS13) | _BV (CS10);
  GTCCR = _BV (PWM1B) | _BV (COM1B1) | _BV (COM1B0);
  
  // NeoPixel LED
  pinMode( NEOPIXEL_IN_PIN, OUTPUT );
  
#ifdef __AVR_ATtiny85__ // Trinket, Gemma, etc.
  if( F_CPU == 16000000 ) clock_prescale_set( clock_div_1 );
#endif
  pixels.begin();
  pixels.setBrightness( NEOPIXEL_BRIGHTNESS );
  pixels.show(); // Initialize all pixels to "off"
  
}

void loop(){
  
  for( int count = 0; count < SIZE_OF_TONE_ARRAY; count++ )
  {
    if( pgm_read_word( &noteArray1[count] ) == _8PINO_TONE_NOT_USED ){
      // Do Nothing.
    }else if( pgm_read_word( &noteArray1[count] ) == _8PINO_TONE_STOP ){
      _8pinoTone( _8PINO_TONE_SPEAKER_PIN_1, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP );
      _8pinoTone( _8PINO_TONE_SPEAKER_PIN_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP );
      setNeopixelColor( _8PINO_TONE_SPEAKER_PIN_1, _8PINO_TONE_STOP );
      setNeopixelColor( _8PINO_TONE_SPEAKER_PIN_2, _8PINO_TONE_STOP );
    }else{
      _8pinoTone( _8PINO_TONE_SPEAKER_PIN_1, pgm_read_word( &noteArray1[count] ), _8PINO_TONE_START );
      _8pinoTone( _8PINO_TONE_SPEAKER_PIN_2, pgm_read_word( &noteArray2[count] ), _8PINO_TONE_START );
      setNeopixelColor( _8PINO_TONE_SPEAKER_PIN_1, pgm_read_word( &noteArray1[count] ) );
      setNeopixelColor( _8PINO_TONE_SPEAKER_PIN_2, pgm_read_word( &noteArray2[count] ) );
    }
    
    pixels.show();
    delay( 8000 / OCR0A );
  }
  
}

void _8pinoTone( int pin_speaker, uint8_t freq, uint8_t startstop ){
  if( startstop == _8PINO_TONE_START ){
    pinMode( pin_speaker, OUTPUT );
    if( pin_speaker == _8PINO_TONE_SPEAKER_PIN_1 ){
      OCR0A = freq;
      OCR0B = OCR0A - 1;
    }else{
      OCR1C = freq;
      OCR1B = OCR1C - 1;
    }
  }else{
     pinMode( pin_speaker, INPUT );
  }
}

void setNeopixelColor( int speaker_id, int tone ){
  
  uint8_t led_index = 0;
  int i = 0;
  
  if( speaker_id == _8PINO_TONE_SPEAKER_PIN_1 ){
    switch( tone ){
      case _8PINO_TONE_RE_3:
        led_index = 12;
        break;
      case _8PINO_TONE_FA_SH_3:
        led_index = 14;
        break;
      case _8PINO_TONE_SO_3:
        led_index = 15;
        break;
      case _8PINO_TONE_RA_3:
        led_index = 0;
        break;
      case _8PINO_TONE_SI_3:
        led_index = 1;
        break;
      case _8PINO_TONE_DO_4:
        led_index = 2;
        break;
      case _8PINO_TONE_RE_4:
        led_index = 3;
        break;
      case _8PINO_TONE_MI_4:
        led_index = 3;
        break;
    }
    
    if( tone == _8PINO_TONE_STOP ){
      for( i = 0; i < 4; i++ ){
        pixels.setPixelColor( i, 0, 0, 0 );
      }
      for( i = 12; i < 16; i++ ){
        pixels.setPixelColor( i, 0, 0, 0 );
      }
    }else{
      for( i = 0; i < 4; i++ ){
        pixels.setPixelColor( i, 0, 0, 0 );
      }
      for( i = 12; i < 16; i++ ){
        pixels.setPixelColor( i, 0, 0, 0 );
      }
      if( led_index < 4 ){
        for( i = 0; i < led_index + 1; i++ ){
          pixels.setPixelColor( i, 255, 0, 0 );
        }
        for( i = 12; i < 16; i++ ){
          pixels.setPixelColor( i, 255, 0, 0 );
        }
        
      }else{
        for( i = 12; i < led_index + 1; i++ ){
          pixels.setPixelColor( i, 255, 0, 0 );
        }
      }
    }
    
  }else{
    switch( tone ){
      case _8PINO_TONE_RE_3:
        led_index = 11;
        break;
      case _8PINO_TONE_MI_3:
        led_index = 10;
        break;
      case _8PINO_TONE_FA_SH_3:
        led_index = 9;
        break;
      case _8PINO_TONE_SO_3:
        led_index = 8;
        break;
      case _8PINO_TONE_RA_3:
        led_index = 7;
        break;
      case _8PINO_TONE_SI_3:
        led_index = 6;
        break;
      case _8PINO_TONE_DO_4:
        led_index = 5;
        break;
    }
    
    if( tone == _8PINO_TONE_STOP ){
      for( i = 5; i < 12; i++ ){
        pixels.setPixelColor( i, 0, 0, 0 );
      }
    }else{
      for( i = 5; i < 12; i++ ){
        pixels.setPixelColor( i, 0, 0, 0 );
      }
      for( i = led_index; i < 12; i++ ){
        pixels.setPixelColor( i, 0, 255, 0);
      }
    }
    
  }
  
}

「カノン」のコードはこちら

#include <Adafruit_NeoPixel.h>
#ifdef __AVR_ATtiny85__ // Trinket, Gemma, etc.
 #include <avr/power.h>
#endif

#define NEOPIXEL_IN_PIN 0
#define NUM_OF_PIXELS 16
#define NEOPIXEL_BRIGHTNESS 30
Adafruit_NeoPixel pixels = Adafruit_NeoPixel( NUM_OF_PIXELS, NEOPIXEL_IN_PIN );

// Definitions
#define _8PINO_TONE_START ( 0x00 )
#define _8PINO_TONE_STOP  ( 0x01 )

#define _8PINO_TONE_NOT_USED ( 0 )

#define _8PINO_TONE_DO_2 ( 238 )
#define _8PINO_TONE_RE_2 ( 212 )
#define _8PINO_TONE_MI_2 ( 189 )
#define _8PINO_TONE_FA_2 ( 178 )
#define _8PINO_TONE_SO_2 ( 158 )
#define _8PINO_TONE_RA_2 ( 141 )
#define _8PINO_TONE_SI_2 ( 126 )
#define _8PINO_TONE_DO_3 ( 118 )
#define _8PINO_TONE_RE_3 ( 106 )
#define _8PINO_TONE_MI_3 (  94 )
#define _8PINO_TONE_FA_3 (  89 )
#define _8PINO_TONE_FA_SH_3 (  83 )
#define _8PINO_TONE_SO_3 (  79 )
#define _8PINO_TONE_RA_3 (  70 )
#define _8PINO_TONE_SI_3 (  62 )
#define _8PINO_TONE_SI_FL_3 ( 66 )
#define _8PINO_TONE_DO_4 (  59 )
#define _8PINO_TONE_RE_4 (  52 )
#define _8PINO_TONE_MI_4 (  46 )
#define _8PINO_TONE_FA_4 (  44 )
#define _8PINO_TONE_SO_4 (  39 )
#define _8PINO_TONE_RA_4 (  34 ) // 35

// Global variables
#define _8PINO_TONE_SPEAKER_PIN_1 ( 1 )
#define _8PINO_TONE_SPEAKER_PIN_2 ( 4 )

#define SIZE_OF_TONE_ARRAY ( 12 * 16 )
PROGMEM prog_uint16_t noteArray1[] =
{
  // 1
  _8PINO_TONE_SO_4, _8PINO_TONE_STOP, _8PINO_TONE_MI_4, _8PINO_TONE_FA_4, 
  _8PINO_TONE_SO_4, _8PINO_TONE_STOP, _8PINO_TONE_MI_4, _8PINO_TONE_FA_4, 
  _8PINO_TONE_SO_4, _8PINO_TONE_SO_3, _8PINO_TONE_RA_3, _8PINO_TONE_SI_3, 
  _8PINO_TONE_DO_4, _8PINO_TONE_RE_4, _8PINO_TONE_MI_4, _8PINO_TONE_FA_4, 

  _8PINO_TONE_MI_4, _8PINO_TONE_STOP, _8PINO_TONE_DO_4, _8PINO_TONE_RE_4, 
  _8PINO_TONE_MI_4, _8PINO_TONE_STOP, _8PINO_TONE_MI_3, _8PINO_TONE_FA_3, 
  _8PINO_TONE_SO_3, _8PINO_TONE_RA_3, _8PINO_TONE_SO_3, _8PINO_TONE_FA_3, 
  _8PINO_TONE_SO_3, _8PINO_TONE_MI_3, _8PINO_TONE_FA_3, _8PINO_TONE_SO_3, 

  _8PINO_TONE_FA_3, _8PINO_TONE_STOP, _8PINO_TONE_RA_3, _8PINO_TONE_SO_3, 
  _8PINO_TONE_FA_3, _8PINO_TONE_STOP, _8PINO_TONE_MI_3, _8PINO_TONE_RE_3, 
  _8PINO_TONE_MI_3, _8PINO_TONE_RE_3, _8PINO_TONE_DO_3, _8PINO_TONE_RE_3, 
  _8PINO_TONE_MI_3, _8PINO_TONE_FA_3, _8PINO_TONE_SO_3, _8PINO_TONE_RA_3, 

  _8PINO_TONE_FA_3, _8PINO_TONE_STOP, _8PINO_TONE_RA_3, _8PINO_TONE_SO_3, 
  _8PINO_TONE_RA_3, _8PINO_TONE_STOP, _8PINO_TONE_SI_3, _8PINO_TONE_DO_3, 
  _8PINO_TONE_SO_3, _8PINO_TONE_RA_3, _8PINO_TONE_SI_3, _8PINO_TONE_DO_4, 
  _8PINO_TONE_RE_4, _8PINO_TONE_MI_4, _8PINO_TONE_FA_4, _8PINO_TONE_SO_4, 

  // 5
  _8PINO_TONE_MI_4, _8PINO_TONE_STOP, _8PINO_TONE_DO_4, _8PINO_TONE_RE_4, 
  _8PINO_TONE_MI_4, _8PINO_TONE_STOP, _8PINO_TONE_RE_4, _8PINO_TONE_DO_4, 
  _8PINO_TONE_RE_4, _8PINO_TONE_SI_3, _8PINO_TONE_DO_4, _8PINO_TONE_RE_4, 
  _8PINO_TONE_MI_4, _8PINO_TONE_RE_4, _8PINO_TONE_DO_4, _8PINO_TONE_SI_3, 

  _8PINO_TONE_DO_4, _8PINO_TONE_STOP, _8PINO_TONE_RA_3, _8PINO_TONE_SI_3, 
  _8PINO_TONE_DO_4, _8PINO_TONE_STOP, _8PINO_TONE_DO_3, _8PINO_TONE_RE_3, 
  _8PINO_TONE_MI_3, _8PINO_TONE_FA_3, _8PINO_TONE_MI_3, _8PINO_TONE_RE_3, 
  _8PINO_TONE_MI_3, _8PINO_TONE_DO_4, _8PINO_TONE_SI_3, _8PINO_TONE_DO_4, 

  _8PINO_TONE_RA_3, _8PINO_TONE_STOP, _8PINO_TONE_DO_4, _8PINO_TONE_SI_3, 
  _8PINO_TONE_RA_3, _8PINO_TONE_STOP, _8PINO_TONE_SO_3, _8PINO_TONE_FA_3, 
  _8PINO_TONE_SO_3, _8PINO_TONE_FA_3, _8PINO_TONE_MI_3, _8PINO_TONE_FA_3, 
  _8PINO_TONE_SO_3, _8PINO_TONE_RA_3, _8PINO_TONE_SI_3, _8PINO_TONE_DO_4, 

  _8PINO_TONE_RA_3, _8PINO_TONE_STOP, _8PINO_TONE_DO_4, _8PINO_TONE_SI_3, 
  _8PINO_TONE_DO_4, _8PINO_TONE_STOP, _8PINO_TONE_SI_3, _8PINO_TONE_RA_3, 
  _8PINO_TONE_SI_3, _8PINO_TONE_DO_4, _8PINO_TONE_RE_4, _8PINO_TONE_DO_4, 
  _8PINO_TONE_SI_3, _8PINO_TONE_DO_4, _8PINO_TONE_RA_3, _8PINO_TONE_SI_3, 

  // 9
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, _8PINO_TONE_SO_4, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_4, _8PINO_TONE_STOP, _8PINO_TONE_RA_4, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_4, _8PINO_TONE_STOP, _8PINO_TONE_FA_4, _8PINO_TONE_STOP, 
  
  _8PINO_TONE_MI_4, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, _8PINO_TONE_MI_4, _8PINO_TONE_STOP, 
  _8PINO_TONE_MI_4, _8PINO_TONE_STOP, _8PINO_TONE_FA_4, _8PINO_TONE_STOP, 
  _8PINO_TONE_MI_4, _8PINO_TONE_STOP, _8PINO_TONE_RE_4, _8PINO_TONE_STOP, 
  
  _8PINO_TONE_DO_4, _8PINO_TONE_STOP, _8PINO_TONE_SI_FL_3, _8PINO_TONE_STOP, 
  _8PINO_TONE_RA_3, _8PINO_TONE_STOP, _8PINO_TONE_SI_FL_3, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, _8PINO_TONE_SO_3, _8PINO_TONE_STOP, 

  _8PINO_TONE_FA_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_DO_4, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SI_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SI_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 

};

PROGMEM prog_uint16_t noteArray2[] =
{
  // 1
  _8PINO_TONE_DO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  
  _8PINO_TONE_RA_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_MI_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  
  _8PINO_TONE_FA_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_DO_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 

  _8PINO_TONE_FA_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 

  // 5
  _8PINO_TONE_DO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 

  _8PINO_TONE_RA_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_MI_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 

  _8PINO_TONE_FA_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_DO_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 

  _8PINO_TONE_FA_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, 
  _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 

  // 9
  _8PINO_TONE_DO_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_MI_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SI_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 

  _8PINO_TONE_RA_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_DO_3, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_MI_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 

  _8PINO_TONE_FA_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_RA_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_DO_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_MI_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 

  _8PINO_TONE_FA_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_RA_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SO_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 
  _8PINO_TONE_SI_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP, 

};

void setup(){
  
  // Initialize PIN mode.
  pinMode( _8PINO_TONE_SPEAKER_PIN_1, OUTPUT );
  pinMode( _8PINO_TONE_SPEAKER_PIN_2, OUTPUT );
  
  // Configure Registers for PWM of PB1(PIN No.1)
  //  1. Waveform Generation Mode -> Fast PWM
  //  2. Clock Select -> 8MHz/256 = 32KHz.
  //  3. Compare Match Output B Mode
  //    -> Clear OC0A/OC0B on Compare Match, 
  //        set OC0A/OC0B at BOTTOM
  TCCR0A = _BV (COM0B1) | _BV (WGM01) | _BV (WGM00);
  TCCR0B = _BV (WGM02) | _BV (CS02);
  
  // Configure Registers for PWM of PB4(PIN No.4)
  //  1. Comparator A Mode -> Set the OC1A output line.
  //  2. Time/Counter1 Prescale Select -> 8MHz/256 = 32KHz.
  //  3. Enable Pulse Width Modulator B.
  //  4. Comparator B Mode -> Set the OC1B output line
  TCCR1 = _BV (COM1A1) | _BV (COM1A0) | 
             _BV (CS13) | _BV (CS10);
  GTCCR = _BV (PWM1B) | _BV (COM1B1) | _BV (COM1B0);
  
  // NeoPixel LED
  pinMode( NEOPIXEL_IN_PIN, OUTPUT );
  
#ifdef __AVR_ATtiny85__ // Trinket, Gemma, etc.
  if( F_CPU == 16000000 ) clock_prescale_set( clock_div_1 );
#endif
  pixels.begin();
  pixels.setBrightness( NEOPIXEL_BRIGHTNESS );
  pixels.show(); // Initialize all pixels to "off"
  
}

void loop(){
  
  for( int count = 0; count < SIZE_OF_TONE_ARRAY; count++ )
  {
    if( pgm_read_word( &noteArray1[count] ) == _8PINO_TONE_NOT_USED ){
      // Do Nothing.
    }else if( pgm_read_word( &noteArray1[count] ) == _8PINO_TONE_STOP ){
      _8pinoTone( _8PINO_TONE_SPEAKER_PIN_1, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP );
      setNeopixelColor( _8PINO_TONE_SPEAKER_PIN_1, _8PINO_TONE_STOP );
    }else{
      _8pinoTone( _8PINO_TONE_SPEAKER_PIN_1, pgm_read_word( &noteArray1[count] ), _8PINO_TONE_START );
      setNeopixelColor( _8PINO_TONE_SPEAKER_PIN_1, pgm_read_word( &noteArray1[count] ) );
    }
    
    if( pgm_read_word( &noteArray2[count] ) == _8PINO_TONE_NOT_USED ){
      // Do Nothing.
    }else if( pgm_read_word( &noteArray2[count] ) == _8PINO_TONE_STOP ){
      _8pinoTone( _8PINO_TONE_SPEAKER_PIN_2, _8PINO_TONE_NOT_USED, _8PINO_TONE_STOP );
      setNeopixelColor( _8PINO_TONE_SPEAKER_PIN_2, _8PINO_TONE_STOP );
    }else{
      _8pinoTone( _8PINO_TONE_SPEAKER_PIN_2, pgm_read_word( &noteArray2[count] ), _8PINO_TONE_START );
      setNeopixelColor( _8PINO_TONE_SPEAKER_PIN_2, pgm_read_word( &noteArray2[count] ) );
    }
    
    pixels.show();
    delay( 8000 / OCR0A );
  }
  
}

void _8pinoTone( int pin_speaker, uint8_t freq, uint8_t startstop ){
  if( startstop == _8PINO_TONE_START ){
    pinMode( pin_speaker, OUTPUT );
    if( pin_speaker == _8PINO_TONE_SPEAKER_PIN_1 ){
      OCR0A = freq;
      OCR0B = OCR0A - 1;
    }else{
      OCR1C = freq;
      OCR1B = OCR1C - 1;
    }
  }else{
     pinMode( pin_speaker, INPUT );
  }
}

void setNeopixelColor( int speaker_id, int tone ){
  
  uint8_t led_index = 0;
  int i = 0;
  int highlight = 0;
  
  if( speaker_id == _8PINO_TONE_SPEAKER_PIN_1 ){
    switch( tone ){
      case _8PINO_TONE_DO_3:
        led_index = 12;
        break;
      case _8PINO_TONE_RE_3:
        led_index = 12;
        highlight = 1;
        break;
      case _8PINO_TONE_MI_3:
        led_index = 13;
        break;
      case _8PINO_TONE_FA_3:
        led_index = 13;
        highlight = 1;
        break;
      case _8PINO_TONE_SO_3:
        led_index = 14;
        break;
      case _8PINO_TONE_RA_3:
        led_index = 14;
        highlight = 1;
        break;
      case _8PINO_TONE_SI_3:
        led_index = 15;
        break;
      case _8PINO_TONE_DO_4:
        led_index = 15;
        highlight = 1;
        break;
      case _8PINO_TONE_RE_4:
        led_index = 0;
        break;
      case _8PINO_TONE_MI_4:
        led_index = 0;
        highlight = 1;
        break;
      case _8PINO_TONE_FA_4:
        led_index = 1;
        break;
      case _8PINO_TONE_SO_4:
        led_index = 1;
        highlight = 1;
        break;
      case _8PINO_TONE_RA_4:
        led_index = 2;
        break;
      default:
        led_index = 12;
        break;
    }
    
    if( tone == _8PINO_TONE_STOP ){
      for( i = 0; i < 4; i++ ){
        pixels.setPixelColor( i, 0, 0, 0 );
      }
      for( i = 12; i < 16; i++ ){
        pixels.setPixelColor( i, 0, 0, 0 );
      }
    }else{
      for( i = 0; i < 4; i++ ){
        pixels.setPixelColor( i, 0, 0, 0 );
      }
      for( i = 12; i < 16; i++ ){
        pixels.setPixelColor( i, 0, 0, 0 );
      }
      if( led_index < 4 ){
        for( i = 0; i < led_index + 1; i++ ){
          pixels.setPixelColor( i, 255, 0, 0 );
        }
        for( i = 12; i < 16; i++ ){
          pixels.setPixelColor( i, 255, 0, 0 );
        }
        
      }else{
        for( i = 12; i < led_index + 1; i++ ){
          pixels.setPixelColor( i, 255, 0, 0 );
        }
      }
      if( highlight == 1 ){
        pixels.setPixelColor( led_index, 255, 255, 255 );
      }
    }
    
  }else{
    switch( tone ){
      case _8PINO_TONE_DO_2:
        led_index = 11;
        break;
      case _8PINO_TONE_MI_2:
        led_index = 10;
        break;
      case _8PINO_TONE_FA_2:
        led_index = 9;
        break;
      case _8PINO_TONE_SO_2:
        led_index = 8;
        break;
      case _8PINO_TONE_RA_2:
        led_index = 7;
        break;
      case _8PINO_TONE_SI_2:
        led_index = 6;
        break;
      case _8PINO_TONE_DO_3:
        led_index = 5;
        break;
      default:
        led_index = 11;
        break;
    }
    
    if( tone == _8PINO_TONE_STOP ){
      for( i = 5; i < 12; i++ ){
        pixels.setPixelColor( i, 0, 0, 0 );
      }
    }else{
      for( i = 5; i < 12; i++ ){
        pixels.setPixelColor( i, 0, 0, 0 );
      }
      for( i = led_index; i < 12; i++ ){
        pixels.setPixelColor( i, 0, 255, 0);
      }
    }
    
  }
  
}

以上で

8pinoコンサートは終演となります。
お付き合い頂き、ありがとうございました。