チーム1825

3つのスピーカーによる演奏

 
 

研究者名

2-15-54 Gyoho To
2-15-34 Akihiko Sato
2-15-42 Yui Suzuki



概要

PSoC1台が1台のスピーカーを用いて音楽を奏でるだけでは寂しいので
PSoC1台が3台のスピーカーを用いて音楽を奏でられるようにした。

3台のスピーカーがそれぞれ違うメロディを奏でることが出来る為、
1台のスピーカーよりも複雑な演奏が出来るようになった。

また、ボタンを押すことで好きな曲を流すことが出来る。



楽曲

あわてんぼうのサンタクロース

Canon in D



作成物の画像

 

Timer16とPWM16の画像です。

1825_1_small.PNG


配線の画像です。

1825_2.jpg



ソースコード

 //----------------------------------------------------------------------------
 // C main line
 //----------------------------------------------------------------------------

#include <m8c.h>          // part specific constants and macros
#include "PSoCAPI.h"        // PSoC API definitions for all User Modules
#pragma interrupt_handler myISR
#define SW1 0b10000000       // スイッチ1をポートP07
#define SW2 0b01000000       // スイッチ2をポートP06 に設定。

int PW=125;            // Pulse Width

int D00=916,L00=816,M00=727,F00=688,S00=612,R00=545,C00b=509,C00=486;
int D0=458, L0=408, M0=364, F0=344,F0s=324, S0=306,R0b=290, R0=273, C0=258,C0n=243;
int dd=108, d=217, d0 = 434, f=162, ff=81, f0=324, f00=648;
int D=229,L=204,M=182,F=172,S=153,R=136,C=129,Cn=121;
int DD=115,LL=102,MM=91,FF=86,SS=76,RR=68,CC=60;
int DDD=58, LLL=51, MMM=45, FFF=43, SSS=38, RRR=34;
int select=0;
int SILENT=0;

int TC=0;             // Time Count

void myISR(void)
{
  TC+=1;
   PWM16_1_WritePulseWidth(PW);
   PWM16_2_WritePulseWidth(PW);
   PWM16_3_WritePulseWidth(PW);

 // 1曲目:あわてんぼうのサンタクロース
  if(select==1){
 // スピーカー1
      if(TC==1)
           PWM16_1_WritePeriod(D);
        else if(TC==3)
           PWM16_1_WritePeriod(F);
        else if(TC==5)
           PWM16_1_WritePeriod(R);
        else if(TC==9)
           PWM16_1_WritePeriod(S);
        else if(TC==13)
           PWM16_1_WritePeriod(F);
        else if(TC==15)
           PWM16_1_WritePeriod(SILENT);
        else if(TC==17)
           PWM16_1_WritePeriod(F);
        else if(TC==19)
           PWM16_1_WritePeriod(S);
        else if(TC==21)
           PWM16_1_WritePeriod(F);
        else if(TC==23)
           PWM16_1_WritePeriod(F);
        else if(TC==25)
           PWM16_1_WritePeriod(F);
        else if(TC==27)
           PWM16_1_WritePeriod(L);
        else if(TC==29)
           PWM16_1_WritePeriod(D);
        else if(TC==31)
           PWM16_1_WritePeriod(SILENT);
        else if(TC==33)
           PWM16_1_WritePeriod(D);
        else if(TC==35)
           PWM16_1_WritePeriod(D);
        else if(TC==37)
           PWM16_1_WritePeriod(F);
        else if(TC==39)
           PWM16_1_WritePeriod(F);
        else if(TC==41)
           PWM16_1_WritePeriod(F);
        else if(TC==43)
           PWM16_1_WritePeriod(R);
        else if(TC==45)
           PWM16_1_WritePeriod(DD);
        else if(TC==49)
           PWM16_1_WritePeriod(R);
        else if(TC==53)
           PWM16_1_WritePeriod(S);
        else if(TC==55)
           PWM16_1_WritePeriod(S);
        else if(TC==57)
           PWM16_1_WritePeriod(R);
        else if(TC==59)
           PWM16_1_WritePeriod(F);
        else if(TC==61)
           PWM16_1_WritePeriod(S);
        else if(TC==63)
           PWM16_1_WritePeriod(SILENT);
        else if(TC==65)
           PWM16_1_WritePeriod(D);
        else if(TC==67)
           PWM16_1_WritePeriod(F);
        else if(TC==69)
           PWM16_1_WritePeriod(R);
        else if(TC==71)
           PWM16_1_WritePeriod(R);
        else if(TC==73)
           PWM16_1_WritePeriod(R);
        else if(TC==75)
           PWM16_1_WritePeriod(S);
        else if(TC==77)
           PWM16_1_WritePeriod(F);
        else if(TC==79)
           PWM16_1_WritePeriod(SILENT);
        else if(TC==81)
           PWM16_1_WritePeriod(F);
        else if(TC==83)
           PWM16_1_WritePeriod(F);
        else if(TC==85)
           PWM16_1_WritePeriod(C);
        else if(TC==87)
           PWM16_1_WritePeriod(C);
        else if(TC==89)
           PWM16_1_WritePeriod(C);
        else if(TC==91)
           PWM16_1_WritePeriod(DD);
        else if(TC==93)
           PWM16_1_WritePeriod(LL);
        else if(TC==95)
           PWM16_1_WritePeriod(SILENT);
        else if(TC==97)
           PWM16_1_WritePeriod(LL);
        else if(TC==99)
           PWM16_1_WritePeriod(LL);
        else if(TC==101)
           PWM16_1_WritePeriod(DD);
        else if(TC==103)
           PWM16_1_WritePeriod(DD);
        else if(TC==105)
           PWM16_1_WritePeriod(R);
        else if(TC==107)
           PWM16_1_WritePeriod(DD);
        else if(TC==109)
           PWM16_1_WritePeriod(C);
        else if(TC==111)
           PWM16_1_WritePeriod(C);
        else if(TC==113)
           PWM16_1_WritePeriod(R);
        else if(TC==115)
           PWM16_1_WritePeriod(S);
        else if(TC==117)
           PWM16_1_WritePeriod(F);
        else if(TC==127)
           PWM16_1_WritePeriod(SILENT);
        else if(TC==129)
           PWM16_1_WritePeriod(LL);
        else if(TC==131)
           PWM16_1_WritePeriod(LL);
        else if(TC==133)
           PWM16_1_WritePeriod(DD);
        else if(TC==135)
           PWM16_1_WritePeriod(SILENT); 
        else if(TC==137)
           PWM16_1_WritePeriod(R);
        else if(TC==139)
           PWM16_1_WritePeriod(DD);
        else if(TC==141)
           PWM16_1_WritePeriod(C);
        else if(TC==143)
           PWM16_1_WritePeriod(SILENT);
        else if(TC==145)
           PWM16_1_WritePeriod(R);
        else if(TC==147)
           PWM16_1_WritePeriod(S);
        else if(TC==149)
           PWM16_1_WritePeriod(F);
        else if(TC==159)
           PWM16_1_WritePeriod(SILENT);

 // スピーカー2
       if(TC==5)
           PWM16_2_WritePeriod(F0);
        else if(TC==7)
           PWM16_2_WritePeriod(D);
        else if(TC==9)
           PWM16_2_WritePeriod(D0);
        else if(TC==11)
           PWM16_2_WritePeriod(D);
        else if(TC==13)
           PWM16_2_WritePeriod(F0);
        else if(TC==15)
           PWM16_2_WritePeriod(D);
        else if(TC==17)
           PWM16_2_WritePeriod(F0);
        else if(TC==19)
           PWM16_2_WritePeriod(D);
        else if(TC==21)
           PWM16_2_WritePeriod(C00b);
        else if(TC==23)
           PWM16_2_WritePeriod(F0);
        else if(TC==25)
           PWM16_2_WritePeriod(C00b);
        else if(TC==27)
           PWM16_2_WritePeriod(F0);
        else if(TC==29)
           PWM16_2_WritePeriod(R00);
        else if(TC==31)
           PWM16_2_WritePeriod(F0);
        else if(TC==33)
           PWM16_2_WritePeriod(R00);
        else if(TC==35)
           PWM16_2_WritePeriod(F0);
        else if(TC==37)
           PWM16_2_WritePeriod(F0);
        else if(TC==39)
           PWM16_2_WritePeriod(D);
        else if(TC==41)
           PWM16_2_WritePeriod(M0);
        else if(TC==43)
           PWM16_2_WritePeriod(D);
        else if(TC==45)
           PWM16_2_WritePeriod(L0);
        else if(TC==47)
           PWM16_2_WritePeriod(D);
        else if(TC==49)
           PWM16_2_WritePeriod(L0);
        else if(TC==51)
           PWM16_2_WritePeriod(D);
        else if(TC==53)
           PWM16_2_WritePeriod(S0);
        else if(TC==55)
           PWM16_2_WritePeriod(L);
        else if(TC==57)
           PWM16_2_WritePeriod(S0);
        else if(TC==59)
           PWM16_2_WritePeriod(L);
        else if(TC==61)
           PWM16_2_WritePeriod(D0);
        else if(TC==63)
           PWM16_2_WritePeriod(D);
        else if(TC==65)
           PWM16_2_WritePeriod(SILENT);
        else if(TC==69)
           PWM16_2_WritePeriod(F0);
        else if(TC==71)
           PWM16_2_WritePeriod(D);
        else if(TC==73)
           PWM16_2_WritePeriod(D0);
        else if(TC==75)
           PWM16_2_WritePeriod(D);
        else if(TC==77)
           PWM16_2_WritePeriod(F0);
        else if(TC==79)
           PWM16_2_WritePeriod(D);
        else if(TC==81)
           PWM16_2_WritePeriod(F0);
        else if(TC==83)
           PWM16_2_WritePeriod(D);
        else if(TC==85)
           PWM16_2_WritePeriod(C00b);
        else if(TC==87)
           PWM16_2_WritePeriod(F0);
        else if(TC==89)
           PWM16_2_WritePeriod(C00b);
        else if(TC==91)
           PWM16_2_WritePeriod(F0);
        else if(TC==93)
           PWM16_2_WritePeriod(C00);
        else if(TC==95)
           PWM16_2_WritePeriod(R0b);
        else if(TC==97)
           PWM16_2_WritePeriod(C00);
        else if(TC==99)
           PWM16_2_WritePeriod(R0b);
        else if(TC==101)
           PWM16_2_WritePeriod(D0);
        else if(TC==103)
           PWM16_2_WritePeriod(R0);
        else if(TC==105)
           PWM16_2_WritePeriod(D0);
        else if(TC==107)
           PWM16_2_WritePeriod(R0);
        else if(TC==109)
           PWM16_2_WritePeriod(D0);
        else if(TC==111)
           PWM16_2_WritePeriod(C0);
        else if(TC==113)
           PWM16_2_WritePeriod(D0);
        else if(TC==115)
           PWM16_2_WritePeriod(C0);
        else if(TC==117)
           PWM16_2_WritePeriod(F0);
        else if(TC==119)
           PWM16_2_WritePeriod(D);
        else if(TC==121)
           PWM16_2_WritePeriod(D0);
        else if(TC==123)
           PWM16_2_WritePeriod(D);
        else if(TC==125)
           PWM16_2_WritePeriod(F0);
        else if(TC==127)
           PWM16_2_WritePeriod(SILENT);
        else if(TC==133)
           PWM16_2_WritePeriod(D0);
        else if(TC==135)
           PWM16_2_WritePeriod(R0);
        else if(TC==137)
           PWM16_2_WritePeriod(D0);
        else if(TC==139)
           PWM16_2_WritePeriod(R0);
        else if(TC==141)
           PWM16_2_WritePeriod(D0);
        else if(TC==143)
           PWM16_2_WritePeriod(C0);
        else if(TC==145)
           PWM16_2_WritePeriod(D0);
        else if(TC==147)
           PWM16_2_WritePeriod(C0);
        else if(TC==149)
           PWM16_2_WritePeriod(F0);
        else if(TC==151)
           PWM16_2_WritePeriod(D);
        else if(TC==153)
           PWM16_2_WritePeriod(D0);
        else if(TC==155)
           PWM16_2_WritePeriod(D);
        else if(TC==157)
           PWM16_2_WritePeriod(F0);
        else if(TC==159)
           PWM16_2_WritePeriod(SILENT);

 // スピーカー3
       if(TC==5)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==7)
           PWM16_3_WritePeriod(R0);
        else if(TC==9)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==11)
           PWM16_3_WritePeriod(C0);
        else if(TC==13)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==15)
           PWM16_3_WritePeriod(R0);
        else if(TC==17)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==19)
           PWM16_3_WritePeriod(R0);
        else if(TC==21)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==23)
           PWM16_3_WritePeriod(L0);
        else if(TC==25)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==27)
           PWM16_3_WritePeriod(L0);
        else if(TC==29)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==31)
           PWM16_3_WritePeriod(D0);
        else if(TC==33)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==35)
           PWM16_3_WritePeriod(D0);
        else if(TC==37)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==39)
           PWM16_3_WritePeriod(R0);
        else if(TC==41)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==43)
           PWM16_3_WritePeriod(R0);
        else if(TC==45)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==47)
           PWM16_3_WritePeriod(F0s);
        else if(TC==49)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==51)
           PWM16_3_WritePeriod(F0s);
        else if(TC==53)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==55)
           PWM16_3_WritePeriod(C0n);
        else if(TC==57)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==59)
           PWM16_3_WritePeriod(C0n);
        else if(TC==61)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==69)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==71)
           PWM16_3_WritePeriod(R0);
        else if(TC==73)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==75)
           PWM16_3_WritePeriod(C0);
        else if(TC==77)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==79)
           PWM16_3_WritePeriod(R0);
        else if(TC==81)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==83)
           PWM16_3_WritePeriod(R0);
        else if(TC==85)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==87)
           PWM16_3_WritePeriod(L0);
        else if(TC==89)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==91)
           PWM16_3_WritePeriod(L0);
        else if(TC==93)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==95)
           PWM16_3_WritePeriod(F0);
        else if(TC==97)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==99)
           PWM16_3_WritePeriod(F0);
        else if(TC==101)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==103)
           PWM16_3_WritePeriod(F0);
        else if(TC==105)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==107)
           PWM16_3_WritePeriod(F0);
        else if(TC==109)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==111)
           PWM16_3_WritePeriod(M0);
        else if(TC==113)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==115)
           PWM16_3_WritePeriod(M0);
        else if(TC==117)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==119)
           PWM16_3_WritePeriod(R0);
        else if(TC==121)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==123)
           PWM16_3_WritePeriod(R0);
        else if(TC==125)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==133)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==135)
           PWM16_3_WritePeriod(F0);
        else if(TC==137)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==139)
           PWM16_3_WritePeriod(F0);
        else if(TC==141)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==143)
           PWM16_3_WritePeriod(S0);
        else if(TC==145)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==147)
           PWM16_3_WritePeriod(S0);
        else if(TC==149)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==151)
           PWM16_3_WritePeriod(R0);
        else if(TC==153)
           PWM16_3_WritePeriod(SILENT);
        else if(TC==155)
           PWM16_3_WritePeriod(R0);
        else if(TC==157)
           PWM16_3_WritePeriod(SILENT);    
       }

 // 2曲目:Canon in D
  if(select==2){
 // スピーカー1
      if(TC == 1)
           PWM16_1_WritePeriod(ff);
         else if(TC == 9)
           PWM16_1_WritePeriod(MM);
         else if(TC == 17)
           PWM16_1_WritePeriod(LL);
         else if(TC == 25)
           PWM16_1_WritePeriod(dd);
         else if(TC == 33)
           PWM16_1_WritePeriod(Cn);
         else if(TC == 41)
           PWM16_1_WritePeriod(R);
         else if(TC == 49)
           PWM16_1_WritePeriod(Cn);
         else if(TC == 57)
           PWM16_1_WritePeriod(dd);
         else if(TC == 65)
           PWM16_1_WritePeriod(ff);
         else if(TC == 73)
           PWM16_1_WritePeriod(MM);
         else if(TC == 81)
           PWM16_1_WritePeriod(LL);
         else if(TC == 89)
           PWM16_1_WritePeriod(dd);
         else if(TC == 97)
           PWM16_1_WritePeriod(Cn);
         else if(TC == 105)
           PWM16_1_WritePeriod(R);
         else if(TC == 113)
           PWM16_1_WritePeriod(Cn);
         else if(TC == 121)
           PWM16_1_WritePeriod(dd);
         else if(TC == 129)
           PWM16_1_WritePeriod(ff);
         else if(TC == 131)
           PWM16_1_WritePeriod(dd);
         else if(TC == 133)
           PWM16_1_WritePeriod(LL);
         else if(TC == 135)
           PWM16_1_WritePeriod(F);
         else if(TC == 137)
           PWM16_1_WritePeriod(MM);
         else if(TC == 139)
           PWM16_1_WritePeriod(R);
         else if(TC == 141)
           PWM16_1_WritePeriod(S);
         else if(TC == 143)
           PWM16_1_WritePeriod(R);
         else if(TC == 145)
           PWM16_1_WritePeriod(LL);
         else if(TC == 146)
           PWM16_1_WritePeriod(SILENT);
         else if(TC == 147)
           PWM16_1_WritePeriod(LL);
         else if(TC == 149)
           PWM16_1_WritePeriod(dd);
         else if(TC == 151)
           PWM16_1_WritePeriod(Cn);
         else if(TC == 153)
           PWM16_1_WritePeriod(dd);
         else if(TC == 155)
           PWM16_1_WritePeriod(ff);
         else if(TC == 157)
           PWM16_1_WritePeriod(RR);
         else if(TC == 159)
           PWM16_1_WritePeriod(CC);
         else if(TC == 161)
           PWM16_1_WritePeriod(SS);
         else if(TC == 163)
           PWM16_1_WritePeriod(ff);
         else if(TC == 165)
           PWM16_1_WritePeriod(MM);
         else if(TC == 167)
           PWM16_1_WritePeriod(SS);
         else if(TC == 169)
           PWM16_1_WritePeriod(ff);
         else if(TC == 171)
           PWM16_1_WritePeriod(MM);
         else if(TC == 173)
           PWM16_1_WritePeriod(LL);
         else if(TC == 175)
           PWM16_1_WritePeriod(dd);
         else if(TC == 177)
           PWM16_1_WritePeriod(Cn);
         else if(TC == 179)
           PWM16_1_WritePeriod(R);
         else if(TC == 181)
           PWM16_1_WritePeriod(Cn);
         else if(TC == 183)
           PWM16_1_WritePeriod(LL);
         else if(TC == 185)
           PWM16_1_WritePeriod(LL);
         else if(TC == 189)
           PWM16_1_WritePeriod(dd);
         else if(TC == 193)
           PWM16_1_WritePeriod(RR);
         else if(TC == 195)
           PWM16_1_WritePeriod(ff);
         else if(TC == 196)
           PWM16_1_WritePeriod(SS);
         else if(TC == 197)
           PWM16_1_WritePeriod(RR);
        else if(TC == 199)
           PWM16_1_WritePeriod(ff);
         else if(TC == 200)
           PWM16_1_WritePeriod(SS);
         else if(TC == 201)
           PWM16_1_WritePeriod(RR);
         else if(TC == 202)
           PWM16_1_WritePeriod(R);
         else if(TC == 203)
           PWM16_1_WritePeriod(Cn);
         else if(TC == 204)
           PWM16_1_WritePeriod(dd);
         else if(TC == 205)
           PWM16_1_WritePeriod(LL);
         else if(TC == 206)
           PWM16_1_WritePeriod(MM);
         else if(TC == 207)
           PWM16_1_WritePeriod(ff);
         else if(TC == 208)
           PWM16_1_WritePeriod(SS);
         else if(TC == 209)
           PWM16_1_WritePeriod(ff);
         else if(TC == 211)
           PWM16_1_WritePeriod(LL);
         else if(TC == 212)
           PWM16_1_WritePeriod(MM);
         else if(TC == 213)
           PWM16_1_WritePeriod(ff);
         else if(TC == 215)
           PWM16_1_WritePeriod(f);
         else if(TC == 216)
           PWM16_1_WritePeriod(S);
         else if(TC == 217)
           PWM16_1_WritePeriod(R);
         else if(TC == 218)
           PWM16_1_WritePeriod(Cn);
         else if(TC == 219)
           PWM16_1_WritePeriod(R);
         else if(TC == 220)
           PWM16_1_WritePeriod(S);
         else if(TC == 221)
           PWM16_1_WritePeriod(R);
         else if(TC == 223)
           PWM16_1_WritePeriod(f);
         else if(TC == 223)
           PWM16_1_WritePeriod(S);
         else if(TC == 224)
           PWM16_1_WritePeriod(R);
         else if(TC == 225)
           PWM16_1_WritePeriod(S);
       else if(TC == 227)
           PWM16_1_WritePeriod(Cn);
       else if(TC == 228)
           PWM16_1_WritePeriod(R);
       else if(TC == 229)
           PWM16_1_WritePeriod(S);
         else if(TC == 231)
           PWM16_1_WritePeriod(f);
       else if(TC == 232)
           PWM16_1_WritePeriod(M);
       else if(TC == 233)
           PWM16_1_WritePeriod(f);
       else if(TC == 234)
           PWM16_1_WritePeriod(M);
       else if(TC == 235)
           PWM16_1_WritePeriod(L);
       else if(TC == 236)
           PWM16_1_WritePeriod(M);
       else if(TC == 237)
           PWM16_1_WritePeriod(f);
       else if(TC == 238)
           PWM16_1_WritePeriod(S);
       else if(TC == 239)
           PWM16_1_WritePeriod(R);
       else if(TC == 240)
           PWM16_1_WritePeriod(Cn);
       else if(TC == 241)
           PWM16_1_WritePeriod(S);
       else if(TC == 243)
           PWM16_1_WritePeriod(Cn);
       else if(TC == 244)
           PWM16_1_WritePeriod(R);
       else if(TC == 245)
           PWM16_1_WritePeriod(Cn);
       else if(TC == 247)
           PWM16_1_WritePeriod(dd);
       else if(TC == 248)
           PWM16_1_WritePeriod(LL);
       else if(TC == 249)
           PWM16_1_WritePeriod(dd);
       else if(TC == 250)
           PWM16_1_WritePeriod(Cn);
       else if(TC == 251)
           PWM16_1_WritePeriod(R);
       else if(TC == 252)
           PWM16_1_WritePeriod(Cn);
       else if(TC == 253)
           PWM16_1_WritePeriod(dd);
       else if(TC == 254)
           PWM16_1_WritePeriod(LL);
       else if(TC == 255)
           PWM16_1_WritePeriod(MM);
       else if(TC == 256)
           PWM16_1_WritePeriod(ff);
       else if(TC == 257)
           PWM16_1_WritePeriod(LL);
       else if(TC == 273)
           PWM16_1_WritePeriod(SILENT);

 // スピーカー2
      if(TC == 1)
           PWM16_2_WritePeriod(SILENT);
       else if(TC == 65)
           PWM16_2_WritePeriod(LL);
       else if(TC == 73)
           PWM16_2_WritePeriod(dd);
       else if(TC == 81)
           PWM16_2_WritePeriod(Cn);
       else if(TC == 89)
           PWM16_2_WritePeriod(R);
       else if(TC == 97)
           PWM16_2_WritePeriod(S);
       else if(TC == 105)
           PWM16_2_WritePeriod(f);
       else if(TC == 113)
           PWM16_2_WritePeriod(S);
       else if(TC == 121)
           PWM16_2_WritePeriod(R);
       else if(TC == 129)
           PWM16_2_WritePeriod(LL);
       else if(TC == 137)
           PWM16_2_WritePeriod(M);
       else if(TC == 145)
           PWM16_2_WritePeriod(f);
       else if(TC == 153)
           PWM16_2_WritePeriod(R);
       else if(TC == 157)
           PWM16_2_WritePeriod(dd);
       else if(TC == 161)
           PWM16_2_WritePeriod(Cn);
       else if(TC == 169)
           PWM16_2_WritePeriod(R);
       else if(TC == 177)
           PWM16_2_WritePeriod(S);
       else if(TC == 185)
           PWM16_2_WritePeriod(M);
       else if(TC == 188)
           PWM16_2_WritePeriod(SILENT);
       else if(TC == 189)
           PWM16_2_WritePeriod(M);
       else if(TC == 193)
           PWM16_2_WritePeriod(SILENT);

 // スピーカー3
      if(TC == 1)
           PWM16_3_WritePeriod(L0);
       else if(TC == 3)
           PWM16_3_WritePeriod(R0);
       else if(TC == 5)
           PWM16_3_WritePeriod(L);
       else if(TC == 7)
           PWM16_3_WritePeriod(f);
       else if(TC == 9)
           PWM16_3_WritePeriod(R00);
       else if(TC == 11)
           PWM16_3_WritePeriod(M0);
       else if(TC == 13)
           PWM16_3_WritePeriod(R0);
       else if(TC == 15)
           PWM16_3_WritePeriod(d);
       else if(TC == 17)
           PWM16_3_WritePeriod(C00);
       else if(TC == 19)
           PWM16_3_WritePeriod(f0);
       else if(TC == 21)
           PWM16_3_WritePeriod(C0n);
       else if(TC == 23)
           PWM16_3_WritePeriod(L);
       else if(TC == 25)
           PWM16_3_WritePeriod(f00);
       else if(TC == 27)
           PWM16_3_WritePeriod(d0);
       else if(TC == 29)
           PWM16_3_WritePeriod(f0);
       else if(TC == 31)
           PWM16_3_WritePeriod(R0);
       else if(TC == 33)
           PWM16_3_WritePeriod(S00);
       else if(TC == 35)
           PWM16_3_WritePeriod(L0);
       else if(TC == 37)
           PWM16_3_WritePeriod(S0);
       else if(TC == 39)
           PWM16_3_WritePeriod(C0n);
       else if(TC == 41)
           PWM16_3_WritePeriod(L00);
       else if(TC == 43)
           PWM16_3_WritePeriod(R00);
       else if(TC == 45)
           PWM16_3_WritePeriod(L0);
       else if(TC == 47)
           PWM16_3_WritePeriod(f0);
       else if(TC == 49)
           PWM16_3_WritePeriod(S00);
       else if(TC == 51)
           PWM16_3_WritePeriod(L0);
       else if(TC == 53)
           PWM16_3_WritePeriod(S0);
       else if(TC == 55)
           PWM16_3_WritePeriod(C0n);
       else if(TC == 57)
           PWM16_3_WritePeriod(R00);
       else if(TC == 59)
           PWM16_3_WritePeriod(M0);
       else if(TC == 61)
           PWM16_3_WritePeriod(R0);
       else if(TC == 63)
           PWM16_3_WritePeriod(d);
       else if(TC == 65)
           PWM16_3_WritePeriod(L0);
       else if(TC == 67)
           PWM16_3_WritePeriod(R0);
       else if(TC == 69)
           PWM16_3_WritePeriod(L);
       else if(TC == 71)
           PWM16_3_WritePeriod(f);
       else if(TC == 73)
           PWM16_3_WritePeriod(R00);
       else if(TC == 75)
           PWM16_3_WritePeriod(M00);
       else if(TC == 77)
           PWM16_3_WritePeriod(R0);
       else if(TC == 79)
           PWM16_3_WritePeriod(d);
       else if(TC == 81)
           PWM16_3_WritePeriod(C00);
       else if(TC == 83)
           PWM16_3_WritePeriod(f00);
       else if(TC == 85)
           PWM16_3_WritePeriod(C0n);
       else if(TC == 87)
           PWM16_3_WritePeriod(L);
       else if(TC == 89)
           PWM16_3_WritePeriod(f00);
       else if(TC == 91)
           PWM16_3_WritePeriod(d0);
       else if(TC == 93)
           PWM16_3_WritePeriod(f0);
       else if(TC == 95)
           PWM16_3_WritePeriod(R0);
       else if(TC == 97)
           PWM16_3_WritePeriod(S00);
       else if(TC == 99)
           PWM16_3_WritePeriod(L0);
       else if(TC == 101)
           PWM16_3_WritePeriod(S0);
       else if(TC == 103)
           PWM16_3_WritePeriod(C0n);
       else if(TC == 105)
           PWM16_3_WritePeriod(L00);
       else if(TC == 107)
           PWM16_3_WritePeriod(R00);
       else if(TC == 109)
           PWM16_3_WritePeriod(L0);
       else if(TC == 111)
           PWM16_3_WritePeriod(f0);
       else if(TC == 113)
           PWM16_3_WritePeriod(S00);
       else if(TC == 115)
           PWM16_3_WritePeriod(L0);
       else if(TC == 117)
           PWM16_3_WritePeriod(S0);
       else if(TC == 119)
           PWM16_3_WritePeriod(C0n);
       else if(TC == 121)
           PWM16_3_WritePeriod(R00);
       else if(TC == 123)
           PWM16_3_WritePeriod(M0);
       else if(TC == 125)
           PWM16_3_WritePeriod(R0);
       else if(TC == 127)
           PWM16_3_WritePeriod(d);
       else if(TC == 129)
           PWM16_3_WritePeriod(L00);
       else if(TC == 131)
           PWM16_3_WritePeriod(R00);
       else if(TC == 133)
           PWM16_3_WritePeriod(L0);
       else if(TC == 135)
           PWM16_3_WritePeriod(R0);
       else if(TC == 137)
           PWM16_3_WritePeriod(R00);
       else if(TC == 139)
           PWM16_3_WritePeriod(M0);
       else if(TC == 141)
           PWM16_3_WritePeriod(R0);
       else if(TC == 143)
           PWM16_3_WritePeriod(M0);
       else if(TC == 145)
           PWM16_3_WritePeriod(C00);
       else if(TC == 147)
           PWM16_3_WritePeriod(f0);
       else if(TC == 149)
           PWM16_3_WritePeriod(C0n);
       else if(TC == 151)
           PWM16_3_WritePeriod(f0);
       else if(TC == 153)
           PWM16_3_WritePeriod(f00);
       else if(TC == 155)
           PWM16_3_WritePeriod(d0);
       else if(TC == 157)
           PWM16_3_WritePeriod(R0);
       else if(TC == 159)
           PWM16_3_WritePeriod(d0);
       else if(TC == 161)
           PWM16_3_WritePeriod(S00);
       else if(TC == 163)
           PWM16_3_WritePeriod(L0);
       else if(TC == 165)
           PWM16_3_WritePeriod(C0n);
       else if(TC == 167)
           PWM16_3_WritePeriod(L0);
       else if(TC == 169)
           PWM16_3_WritePeriod(L00);
       else if(TC == 171)
           PWM16_3_WritePeriod(R00);
       else if(TC == 173)
           PWM16_3_WritePeriod(L0);
       else if(TC == 175)
           PWM16_3_WritePeriod(f0);
       else if(TC == 177)
           PWM16_3_WritePeriod(S00);
       else if(TC == 179)
           PWM16_3_WritePeriod(L0);
       else if(TC == 181)
           PWM16_3_WritePeriod(S0);
       else if(TC == 183)
           PWM16_3_WritePeriod(C0n);
       else if(TC == 185)
           PWM16_3_WritePeriod(R00);
       else if(TC == 187)
           PWM16_3_WritePeriod(M0);
       else if(TC == 189)
           PWM16_3_WritePeriod(R0);
       else if(TC == 191)
           PWM16_3_WritePeriod(M0);
       else if(TC == 193)
           PWM16_3_WritePeriod(L0);
       else if(TC == 195)
           PWM16_3_WritePeriod(R0);
       else if(TC == 197)
           PWM16_3_WritePeriod(L);
       else if(TC == 199)
           PWM16_3_WritePeriod(R0);
       else if(TC == 201)
           PWM16_3_WritePeriod(R00);
       else if(TC == 203)
           PWM16_3_WritePeriod(M0);
       else if(TC == 205)
           PWM16_3_WritePeriod(R0);
       else if(TC == 207)
           PWM16_3_WritePeriod(M0);
       else if(TC == 209)
           PWM16_3_WritePeriod(C00);
       else if(TC == 211)
           PWM16_3_WritePeriod(f0);
       else if(TC == 213)
           PWM16_3_WritePeriod(C0n);
       else if(TC == 215)
           PWM16_3_WritePeriod(f0);
       else if(TC == 217)
           PWM16_3_WritePeriod(f00);
       else if(TC == 219)
           PWM16_3_WritePeriod(d0);
       else if(TC == 221)
           PWM16_3_WritePeriod(R0);
       else if(TC == 223)
           PWM16_3_WritePeriod(d0);
       else if(TC == 225)
           PWM16_3_WritePeriod(S00);
       else if(TC == 227)
           PWM16_3_WritePeriod(L0);
       else if(TC == 229)
           PWM16_3_WritePeriod(S0);
       else if(TC == 231)
           PWM16_3_WritePeriod(L0);
       else if(TC == 233)
           PWM16_3_WritePeriod(L00);
       else if(TC == 235)
           PWM16_3_WritePeriod(R00);
       else if(TC == 237)
           PWM16_3_WritePeriod(L0);
         else if(TC == 239)
           PWM16_3_WritePeriod(R00);
         else if(TC == 241)
           PWM16_3_WritePeriod(S00);
         else if(TC == 243)
           PWM16_3_WritePeriod(L0);
         else if(TC == 245)
           PWM16_3_WritePeriod(S0);
         else if(TC == 247)
           PWM16_3_WritePeriod(L0);
         else if(TC == 249)
           PWM16_3_WritePeriod(R00);
         else if(TC == 251)
           PWM16_3_WritePeriod(M0);
         else if(TC == 253)
           PWM16_3_WritePeriod(R0);
         else if(TC == 255)
           PWM16_3_WritePeriod(M0);
         else if(TC == 257)
           PWM16_3_WritePeriod(SILENT);
       else if (TC == 280)
           select = 0;
   }
}

void main(void)
{
  Timer16_1_EnableInt();
   M8C_EnableGInt;

 // スイッチが押されるまで待機している(ポーリング)
     while(1){
          TC = 0;    
       
 // スイッチ1が押された時の処理
      if (!(PRT0DR & SW1)){
             select = 1;
              PWM16_1_Start();
              Timer16_1_Start();
              PWM16_2_Start();
              PWM16_3_Start();
              while(TC <= 160){};
              Timer16_1_Stop();
          }

 // スイッチ2が押された時の処理
      if (!(PRT0DR & SW2)){
             select = 2;
            PWM16_1_Start();
              PWM16_2_Start();
            PWM16_3_Start();
             Timer16_1_Start();
              while(TC <= 280){};
              Timer16_1_Stop();
          }
   }
}



まとめ

この装置はラボtimer_pwm2gpio_poll及び1813を参考に作成した。

timer_pwm2と同様にTC(タイムカウント)を基準に音を発生させているが細部が異なる。


変更点

スピーカー1つの入力部分を変更した
Port0_0 → Port1_0
スイッチの領域としてPort0全体を利用しているため。

main.cのmainの中を変更した
Timer16_1_EnableInt();, M8C_EnableGInt;をmainの最初に持ってきた
Timer16_1とM8Cの割り込みを有効にする宣言は普通1度しか記述しないため。


考察

限られたポート内で、スピーカー三台でも演奏することが出来た。
スピーカーを一つ増やし、メモリーを増やせば四重奏が可能になり、さらに複雑な演奏が出来るようになる。
音の設定を変えれば、ピアノやヴァイオリン、太鼓の音をスピーカーで出すことも出来ると考えられる。
スピーカーの数を増やせば、オーケストラを奏でることが出来ると考えられる。

音階入力の手間が大変でわずかなズレを修正するのに多大な労力が掛かる為、
「音を認識し、自動で音階を入力する」や「今再生してから何秒なのかという情報と再生している音階を画面上に出力する」
というような機能を付加することが出来れば優れたプログラムに成長すると考えられる。

また、TimerのPeriodを変更するAPI関数を実装すれば、曲のテンポをもっとさまざまなものにできたのではないかと考えられる。

いまのままでは、どんな曲が再生されるかがわからないので、LCDを使ってボタンの番号に対応した曲名を表示させるようにした方が使いやすくなる。

Port_0が8バイトなのでボタンは最大で8個付けられると考えれらる。
つまり、最大8曲の中から好きな曲を再生できるようにすることが出来ると考えられる。

  • 最終更新:2018-06-12 16:56:10

このWIKIを編集するにはパスワード入力が必要です

認証パスワード