チーム1324

課題名

音楽再生機

研究者名

2-15-4 飯塚大悟
2-15-15 加藤裕人

内容

a,s,d,f,g,hとjをキーボードから押すことによってさまざまな音楽を流すことができる

a・・・「蛍の光」
s・・・「かごめかごめ」
d・・・「学校のチャイム」
f・・・「ぞうさん」
g・・・「こぎつね」
h・・・「カエルの合唱」
j・・・音楽の停止

使用した部品

PSoC本体 1個
スピーカー 1個
ジャンパー 2個
通信ケーブル 1個

ソース

#include <m8c.h>  
#include "PSoCAPI.h" 
#pragma interrupt_handler myISR
int PW=125;             // Pulse Width
int SILENT=0,r=273, c=243, D=229, L=204, M=182, F=172, S=153, R=136, C=121, DD=115, LL=102, MM=91, FF=86, SS=77; //Scale
int TC=0; //Time Count
int key=0;

void myISR(void)
{
if(key==1){//蛍の光
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);
if(TC == 1)
  PWM16_1_WritePeriod(MM);
else if(TC == 4)
  PWM16_1_WritePeriod(LL);
else if(TC == 10)
  PWM16_1_WritePeriod(C);
else if(TC == 11)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 12)
  PWM16_1_WritePeriod(C);
else if(TC == 16)
  PWM16_1_WritePeriod(S);
else if(TC == 20)
  PWM16_1_WritePeriod(R);
else if(TC == 26)
  PWM16_1_WritePeriod(S);
else if(TC == 28)
  PWM16_1_WritePeriod(R);
else if(TC == 32)
  PWM16_1_WritePeriod(C);
else if(TC == 36)
  PWM16_1_WritePeriod(S);
else if(TC == 42)
  PWM16_1_WritePeriod(M);    
else if(TC == 43)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 44)
  PWM16_1_WritePeriod(M);
else if(TC == 48)
  PWM16_1_WritePeriod(L);
else if(TC == 52)
  PWM16_1_WritePeriod(S);
else if(TC == 64)
  PWM16_1_WritePeriod(L);
else if(TC == 68)
  PWM16_1_WritePeriod(S);
else if(TC == 73)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 74)
  PWM16_1_WritePeriod(S);
else if(TC == 75)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 76)
  PWM16_1_WritePeriod(S);
else if(TC == 80)
  PWM16_1_WritePeriod(C);
else if(TC == 84)
  PWM16_1_WritePeriod(R);
else if(TC == 90)
  PWM16_1_WritePeriod(S);
else if(TC == 92)
  PWM16_1_WritePeriod(R);
else if(TC == 96)
  PWM16_1_WritePeriod(C);
else if(TC == 100)
  PWM16_1_WritePeriod(S);    
else if(TC == 106)
  PWM16_1_WritePeriod(S);
else if(TC == 108)
  PWM16_1_WritePeriod(C);
else if(TC == 112)
  PWM16_1_WritePeriod(LL);
else if(TC == 116)
  PWM16_1_WritePeriod(MM);
else if(TC == 127)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 128)
  PWM16_1_WritePeriod(MM);
else if(TC == 132)
  PWM16_1_WritePeriod(LL);
else if(TC == 138)
  PWM16_1_WritePeriod(C);
else if(TC == 139)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 140)
  PWM16_1_WritePeriod(C);
else if(TC == 144)
  PWM16_1_WritePeriod(S);
else if(TC == 148)
  PWM16_1_WritePeriod(R);
else if(TC == 154)
  PWM16_1_WritePeriod(S);
else if(TC == 156)
  PWM16_1_WritePeriod(R);
else if(TC == 160)
  PWM16_1_WritePeriod(C);    
else if(TC == 164)
  PWM16_1_WritePeriod(S);
else if(TC == 170)
  PWM16_1_WritePeriod(M);
else if(TC == 171)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 172)
  PWM16_1_WritePeriod(M);
else if(TC == 176)
  PWM16_1_WritePeriod(L);
else if(TC == 180)
  PWM16_1_WritePeriod(S);
else if(TC == 192)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 195)
  TC = 0;
 }  
if(key==2){//かごめかごめ
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);
if(TC == 1)
  PWM16_1_WritePeriod(L);
else if(TC == 8)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 9)
  PWM16_1_WritePeriod(L);
else if(TC == 13)
  PWM16_1_WritePeriod(M);
else if(TC == 17)
  PWM16_1_WritePeriod(L);
else if(TC == 21)
  PWM16_1_WritePeriod(M);
else if(TC == 25)
  PWM16_1_WritePeriod(L);
else if(TC == 29)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 33)
  PWM16_1_WritePeriod(L);
else if(TC == 36)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 37)
  PWM16_1_WritePeriod(L);
else if(TC == 38)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 39)
  PWM16_1_WritePeriod(L);
else if(TC == 40)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 41)
  PWM16_1_WritePeriod(L);    
else if(TC == 45)
  PWM16_1_WritePeriod(D);
else if(TC == 46)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 47)
  PWM16_1_WritePeriod(D);
else if(TC == 49)
  PWM16_1_WritePeriod(L);
else if(TC == 52)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 53)
  PWM16_1_WritePeriod(L);
else if(TC == 55)
  PWM16_1_WritePeriod(D);
else if(TC == 57)
  PWM16_1_WritePeriod(r);
else if(TC == 65)
  PWM16_1_WritePeriod(L);
else if(TC == 69)
  PWM16_1_WritePeriod(D);
else if(TC == 73)
  PWM16_1_WritePeriod(L);
else if(TC == 77)
  PWM16_1_WritePeriod(D);
else if(TC == 81)
  PWM16_1_WritePeriod(L);
else if(TC == 85)
  PWM16_1_WritePeriod(L);
else if(TC == 87)
  PWM16_1_WritePeriod(D);    
else if(TC == 89)
  PWM16_1_WritePeriod(r);
else if(TC == 97)
  PWM16_1_WritePeriod(L);
else if(TC == 100)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 101)
  PWM16_1_WritePeriod(L);
else if(TC == 104)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 105)
  PWM16_1_WritePeriod(L);
else if(TC == 109)
  PWM16_1_WritePeriod(M);
else if(TC == 113)
  PWM16_1_WritePeriod(L);
else if(TC == 116)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 117)
  PWM16_1_WritePeriod(L);
else if(TC == 120)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 121)
  PWM16_1_WritePeriod(L);
else if(TC == 125)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 129)
  PWM16_1_WritePeriod(L);
else if(TC == 133)
  PWM16_1_WritePeriod(D);
else if(TC == 134)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 135)
  PWM16_1_WritePeriod(D);
else if(TC == 137)
  PWM16_1_WritePeriod(L);    
else if(TC == 141)
  PWM16_1_WritePeriod(D);
else if(TC == 142)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 143)
  PWM16_1_WritePeriod(D);
else if(TC == 145)
  PWM16_1_WritePeriod(L);
else if(TC == 149)
  PWM16_1_WritePeriod(L);
else if(TC == 151)
  PWM16_1_WritePeriod(D);
else if(TC == 153)
  PWM16_1_WritePeriod(r);
else if(TC == 161)
  PWM16_1_WritePeriod(L);
else if(TC == 162)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 163)
  PWM16_1_WritePeriod(L);
else if(TC == 164)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 165)
  PWM16_1_WritePeriod(L);
else if(TC == 166)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 167)
  PWM16_1_WritePeriod(L);
else if(TC == 168)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 169)
  PWM16_1_WritePeriod(L);
else if(TC == 173)
  PWM16_1_WritePeriod(M);    
else if(TC == 177)
  PWM16_1_WritePeriod(L);
else if(TC == 183)
  PWM16_1_WritePeriod(D);
else if(TC == 185)
  PWM16_1_WritePeriod(L);
else if(TC == 189)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 193)
  TC = 0;

}

 if(key==3){//学校のチャイム
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);
if(TC == 1)
  PWM16_1_WritePeriod(DD);
else if(TC == 7)
  PWM16_1_WritePeriod(MM);
else if(TC == 13)
  PWM16_1_WritePeriod(LL);
else if(TC == 19)
  PWM16_1_WritePeriod(S);
else if(TC == 25)
  PWM16_1_WritePeriod(S);
else if(TC == 31)
  PWM16_1_WritePeriod(DD);
else if(TC == 37)
  PWM16_1_WritePeriod(LL);
else if(TC == 43)
  PWM16_1_WritePeriod(MM);
else if(TC == 49)
  PWM16_1_WritePeriod(DD);
else if(TC == 61)
  PWM16_1_WritePeriod(MM);
else if(TC == 67)
  PWM16_1_WritePeriod(DD);    
else if(TC == 73)
  PWM16_1_WritePeriod(LL);
else if(TC == 79)
  PWM16_1_WritePeriod(S);
else if(TC == 89)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 91)
  PWM16_1_WritePeriod(S);
else if(TC == 97)
  PWM16_1_WritePeriod(LL);
else if(TC == 103)
  PWM16_1_WritePeriod(MM);
else if(TC == 109)
  PWM16_1_WritePeriod(DD);
else if(TC == 121)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 127)
  PWM16_1_WritePeriod(DD);
else if(TC == 139)
  PWM16_1_WritePeriod(SILENT);
else if(TC == 145)
  TC = 0;
}

if(key==4){//ぞうさん
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);
if(TC==1)
       PWM16_1_WritePeriod(F);
else if(TC==7)
  PWM16_1_WritePeriod(L);
else if(TC==9)
  PWM16_1_WritePeriod(D);
else if(TC==13)
  PWM16_1_WritePeriod(F);
else if(TC==19)
  PWM16_1_WritePeriod(L);
else if(TC==21)
  PWM16_1_WritePeriod(D);
else if(TC==25)
  PWM16_1_WritePeriod(F);
else if(TC==31)
  PWM16_1_WritePeriod(S);
else if(TC==33)
  PWM16_1_WritePeriod(R);
else if(TC==35)
  PWM16_1_WritePeriod(DD);
else if(TC==37)
  PWM16_1_WritePeriod(R);
else if(TC==38)
  PWM16_1_WritePeriod(SILENT);
else if(TC==39)
  PWM16_1_WritePeriod(R);
else if(TC==41)
  PWM16_1_WritePeriod(S);
else if(TC==43)
  PWM16_1_WritePeriod(F);
else if(TC==45)
  PWM16_1_WritePeriod(S);
else if(TC==49)
  PWM16_1_WritePeriod(DD);
else if(TC==52)
  PWM16_1_WritePeriod(SILENT);
else if(TC==55)
  PWM16_1_WritePeriod(DD);
else if(TC==57)
  PWM16_1_WritePeriod(R);
else if(TC==61)
  PWM16_1_WritePeriod(LL);
else if(TC==63)
  PWM16_1_WritePeriod(DD);
else if(TC==65)
  PWM16_1_WritePeriod(R);
else if(TC==69)
  PWM16_1_WritePeriod(F);
else if(TC==73)
  PWM16_1_WritePeriod(S);
else if(TC==79)
  PWM16_1_WritePeriod(R);
else if(TC==81)
  PWM16_1_WritePeriod(L);
else if(TC==83)
  PWM16_1_WritePeriod(D);
else if(TC==85)
  PWM16_1_WritePeriod(F);
else if(TC==93)
  PWM16_1_WritePeriod(SILENT);
else if(TC==97)
  TC = 0;
}
 if(key==5){//こぎつね
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);
if(TC==1)
      PWM16_1_WritePeriod(L);
else if(TC==5)
  PWM16_1_WritePeriod(M);
else if(TC==9)
  PWM16_1_WritePeriod(F);
else if(TC==13)
  PWM16_1_WritePeriod(S);
else if(TC==17)
  PWM16_1_WritePeriod(R);
else if(TC==19)
  PWM16_1_WritePeriod(SILENT);
else if(TC==21)
  PWM16_1_WritePeriod(R);
else if(TC==23)
  PWM16_1_WritePeriod(SILENT);
else if(TC==25)
  PWM16_1_WritePeriod(R);
else if(TC==27)
  PWM16_1_WritePeriod(SILENT);
else if(TC==29)
  PWM16_1_WritePeriod(R);
else if(TC==33)
  PWM16_1_WritePeriod(C);
else if(TC==37)
  PWM16_1_WritePeriod(S);
else if(TC==41)
  PWM16_1_WritePeriod(LL);
else if(TC==45)
  PWM16_1_WritePeriod(C);
else if(TC==49)
  PWM16_1_WritePeriod(R);
else if(TC==52)
  PWM16_1_WritePeriod(SILENT);
else if(TC==55)
  PWM16_1_WritePeriod(C);
else if(TC==59)
  PWM16_1_WritePeriod(S);
else if(TC==63)
  PWM16_1_WritePeriod(LL);
else if(TC==67)
  PWM16_1_WritePeriod(C);
else if(TC==71)
  PWM16_1_WritePeriod(R);
else if(TC==74)
  PWM16_1_WritePeriod(SILENT);
else if(TC==77)
  PWM16_1_WritePeriod(R);
else if(TC==81)
  PWM16_1_WritePeriod(S);
else if(TC==83)
  PWM16_1_WritePeriod(SILENT);
else if(TC==85)
  PWM16_1_WritePeriod(S);
else if(TC==87)
  PWM16_1_WritePeriod(SILENT);
else if(TC==89)
  PWM16_1_WritePeriod(S);
else if(TC==91)
  PWM16_1_WritePeriod(SILENT);
else if(TC==93)
  PWM16_1_WritePeriod(S);
else if(TC==97)
  PWM16_1_WritePeriod(F);
else if(TC==99)
  PWM16_1_WritePeriod(SILENT);
else if(TC==101)
  PWM16_1_WritePeriod(F);
else if(TC==103)
  PWM16_1_WritePeriod(SILENT);
else if(TC==105)
  PWM16_1_WritePeriod(F);
else if(TC==107)
  PWM16_1_WritePeriod(SILENT);
else if(TC==109)
  PWM16_1_WritePeriod(F);
else if(TC==113)
  PWM16_1_WritePeriod(M);
else if(TC==117)
  PWM16_1_WritePeriod(F);
else if(TC==121)
  PWM16_1_WritePeriod(M);
else if(TC==125)
  PWM16_1_WritePeriod(L);
else if(TC==129)
  PWM16_1_WritePeriod(F);
else if(TC==134)
  PWM16_1_WritePeriod(R);
else if(TC==137)
  PWM16_1_WritePeriod(SILENT);
else if(TC==140)
  PWM16_1_WritePeriod(R);
else if(TC==144)
  PWM16_1_WritePeriod(S);
else if(TC==146)
  PWM16_1_WritePeriod(SILENT);
else if(TC==148)
  PWM16_1_WritePeriod(S);
else if(TC==150)
  PWM16_1_WritePeriod(SILENT);
else if(TC==152)
  PWM16_1_WritePeriod(S);
else if(TC==154)
  PWM16_1_WritePeriod(SILENT);
else if(TC==156)
  PWM16_1_WritePeriod(S);
else if(TC==160)
  PWM16_1_WritePeriod(F);
else if(TC==162)
  PWM16_1_WritePeriod(SILENT);
else if(TC==164)
  PWM16_1_WritePeriod(F);
else if(TC==166)
  PWM16_1_WritePeriod(SILENT);
else if(TC==168)
  PWM16_1_WritePeriod(F);
else if(TC==170)
  PWM16_1_WritePeriod(SILENT);
else if(TC==172)
  PWM16_1_WritePeriod(F);
else if(TC==176)
  PWM16_1_WritePeriod(M);
else if(TC==180)
  PWM16_1_WritePeriod(F);
else if(TC==184)
  PWM16_1_WritePeriod(M);
else if(TC==188)
  PWM16_1_WritePeriod(L);
else if(TC==194)
  PWM16_1_WritePeriod(SILENT);
else if(TC==198)
  TC = 0;
}
 if(key==6){//カエルの合唱
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);
if(TC==3)
       PWM16_1_WritePeriod(D);
else if(TC==5)
  PWM16_1_WritePeriod(L);
else if(TC==7)
  PWM16_1_WritePeriod(M);
else if(TC==9)
  PWM16_1_WritePeriod(F);
else if(TC==11)
  PWM16_1_WritePeriod(M);
else if(TC==13)
  PWM16_1_WritePeriod(L);
else if(TC==15)
  PWM16_1_WritePeriod(D);
else if(TC==17)
  PWM16_1_WritePeriod(M);
else if(TC==19)
  PWM16_1_WritePeriod(F);
else if(TC==21)
  PWM16_1_WritePeriod(S);
else if(TC==23)
  PWM16_1_WritePeriod(R);
else if(TC==25)
  PWM16_1_WritePeriod(S);
else if(TC==27)
  PWM16_1_WritePeriod(F);
else if(TC==29)
  PWM16_1_WritePeriod(M);
else if(TC==33)
  PWM16_1_WritePeriod(D);
else if(TC==35)
  PWM16_1_WritePeriod(SILENT);
else if(TC==37)
  PWM16_1_WritePeriod(D);
else if(TC==39)
  PWM16_1_WritePeriod(SILENT);
else if(TC==41)
  PWM16_1_WritePeriod(D);
else if(TC==43)
  PWM16_1_WritePeriod(SILENT);
else if(TC==45)
  PWM16_1_WritePeriod(D);
else if(TC==47)
  PWM16_1_WritePeriod(SILENT);
else if(TC==49)
  PWM16_1_WritePeriod(D);
else if(TC==50)
  PWM16_1_WritePeriod(SILENT);
else if(TC==51)
  PWM16_1_WritePeriod(D);
else if(TC==53)
  PWM16_1_WritePeriod(L);
else if(TC==54)
  PWM16_1_WritePeriod(SILENT);
else if(TC==55)
  PWM16_1_WritePeriod(L);
else if(TC==57)
  PWM16_1_WritePeriod(M);
else if(TC==58)
  PWM16_1_WritePeriod(SILENT);
else if(TC==59)
  PWM16_1_WritePeriod(M);
else if(TC==61)
  PWM16_1_WritePeriod(F);
else if(TC==62)
  PWM16_1_WritePeriod(SILENT);
else if(TC==63)
  PWM16_1_WritePeriod(F);
else if(TC==65)
  PWM16_1_WritePeriod(M);
else if(TC==67)
  PWM16_1_WritePeriod(SILENT);
else if(TC==68)
  PWM16_1_WritePeriod(L);
else if(TC==70)
  PWM16_1_WritePeriod(SILENT);
else if(TC==71)
  PWM16_1_WritePeriod(D);
else if(TC==73)
  PWM16_1_WritePeriod(SILENT);
else if(TC==77)
  TC = 0;
}
 if(key==7){
TC += 1; //TC = TC +1
PWM16_1_WritePulseWidth(PW);
if(TC == 1)
   PWM16_1_WritePeriod(SILENT);

}

}
 


void main(void)  
{  
   char * strPtr;                        // Parameter pointer  
     
   UART_CmdReset();                      // Initialize receiver/cmd  
                                         // buffer  
   UART_IntCntl(UART_ENABLE_RX_INT);     // Enable RX interrupts  
   Counter8_WritePeriod(155);            // Set up baud rate generator  
   Counter8_WriteCompareValue(77);  
   Counter8_Start();                     // Turn on baud rate generator       
     
   UART_Start(UART_PARITY_NONE);         // Enable UART  
     
   M8C_EnableGInt ;                      // Turn on interrupts  
   PWM16_1_Start(); 
   Timer16_1_EnableInt();
   Timer16_1_Start();
   UART_CPutString("\r\nPSoC Synthesizer V1.1\r\n");  
     
while(1){
   if(UART_bCmdCheck()) { // Wait for command
   if(strPtr = UART_szGetParam()) { // More than delimiter?
   UART_CPutString("Found valid command\r\nCommand =>");
   UART_PutString(strPtr); // Print out command
   UART_CPutString("<\r\nParamaters:\r\n");


  if (*strPtr=='a'){
       TC = 0;
       key = 1;
       }
       
   if (*strPtr=='s'){
       TC = 0;
       key = 2;
       }
   
   if (*strPtr=='d'){
       TC = 0;
       key = 3;
       }
       
   if (*strPtr=='f'){
       TC = 0;
       key = 4;
       }
       
   if (*strPtr=='g'){
       TC = 0;
       key = 5;
       }
   
   if (*strPtr=='h'){
       TC = 0;
       key = 6;
       }
       
   if (*strPtr=='j'){
       TC = 0;
       key = 7;
       }
   }
   UART_CmdReset();
   }
 }
}

考察

さまざまな曲を流すにあたって、同じ音が重なった際にその2つの音の間にSILENTをいれて音を1回消したりした。
曲のテンポに合わせて、TCの数値を変え、曲の速さを工夫した。
しかし、#やbなどの半音上げたり下げたりする音を出せなかったので、使えるようにしたかった。
ほかにも、ただ、自分で曲を決めるのではなく、ランダム再生のように曲を流すこともできたと考える。

  • 最終更新:2013-06-04 17:27:33

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

認証パスワード