チーム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