チーム1733

課題名

かえるの大合唱

研究者名

Shota Isozaki
Kotaro Ichikawa

概要

かえるのうたの輪唱を3つのスピーカーで再現した。
音域を3オクターブ用意し、それぞれのスピーカーで違う音域のかえるのうたを演奏する。
はじめは一番高い音のかえるのうたを演奏して次に低い音、その次に一番低い音のかえるのうたを被せていき輪唱させる。

使用機器

PSoC基盤 1個
スピーカー 3つ
ジャンパ線 1本
無題2.jpg


配線・ソースコード

<配線>
gazou.png
<ソースコード>

#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#pragma interrupt_handler myISR
int PW=125,T=1;//pulse width
int SILENT=0, D0=458, L0=408, M0=364, F0=343,S0=306, R0=273, C0=243, D1=229,
L1=204, M1=182, F1=172, S1=153, R1=136, C1=121, D2=115,L2=102, M2=91, F2=86, S2=77, R2=68, C2=61; //Scale
int TC=0;//Time Count

void myISR(void)
{
TC+=1;

PWM16_1_WritePulseWidth(PW);
 PWM16_2_WritePulseWidth(PW);
  PWM16_3_WritePulseWidth(PW);
  
  if(TC==2)PWM16_1_WritePeriod(D2);
   if(TC==6)PWM16_1_WritePeriod(L2);
    if(TC==10)PWM16_1_WritePeriod(M2);
     if(TC==14)PWM16_1_WritePeriod(F2);
 if(TC==18)PWM16_1_WritePeriod(M2);
  if(TC==22)PWM16_1_WritePeriod(L2);
   if(TC==26)PWM16_1_WritePeriod(D2);
if(TC==30)PWM16_1_WritePeriod(SILENT);
 if(TC==34){
 PWM16_1_WritePeriod(M2);
 PWM16_2_WritePeriod(D1);
 }
  if(TC==38){
 PWM16_1_WritePeriod(F2);
 PWM16_2_WritePeriod(L1);
 }
  if(TC==42){
 PWM16_1_WritePeriod(S2);
 PWM16_2_WritePeriod(M1);
 }
  if(TC==46){
 PWM16_1_WritePeriod(R2);
 PWM16_2_WritePeriod(F1);
 }
 if(TC==50){
 PWM16_1_WritePeriod(S2);
 PWM16_2_WritePeriod(M1);
 }
  if(TC==54){
 PWM16_1_WritePeriod(F2);
 PWM16_2_WritePeriod(L1);
 }
  if(TC==58){
 PWM16_1_WritePeriod(M2);
 PWM16_2_WritePeriod(D1);
 }
  if(TC==62){
 PWM16_1_WritePeriod(SILENT);
 PWM16_2_WritePeriod(SILENT);
 }
 if(TC==66){
 PWM16_1_WritePeriod(D2);
 PWM16_2_WritePeriod(M1);
 PWM16_3_WritePeriod(D0);
 }

if(TC==70){
 PWM16_1_WritePeriod(SILENT);
 PWM16_2_WritePeriod(F1);
 PWM16_3_WritePeriod(L0);
 }

 if(TC==74){
 PWM16_1_WritePeriod(D2);
 PWM16_2_WritePeriod(S1);
 PWM16_3_WritePeriod(M0);
 }

if(TC==78){
 PWM16_1_WritePeriod(SILENT);
 PWM16_2_WritePeriod(R1);
 PWM16_3_WritePeriod(F0);
 }
if(TC==82){
PWM16_1_WritePeriod(D2);
 PWM16_2_WritePeriod(S1);
 PWM16_3_WritePeriod(M0);
 }
 if(TC==86){
 PWM16_1_WritePeriod(SILENT);
 PWM16_2_WritePeriod(F1);
 PWM16_3_WritePeriod(L0);
 }
 if(TC==90){
 PWM16_1_WritePeriod(D2);
 PWM16_2_WritePeriod(M1);
 PWM16_3_WritePeriod(D0);
 }
if(TC==94){
 PWM16_1_WritePeriod(SILENT);
 PWM16_2_WritePeriod(SILENT);
 PWM16_3_WritePeriod(SILENT);
 }
if(TC==98){
PWM16_1_WritePeriod(D2);
PWM16_2_WritePeriod(D1);
PWM16_3_WritePeriod(M0);
}
if(TC==99)PWM16_1_WritePeriod(SILENT);
if(TC==100)PWM16_1_WritePeriod(D2);
if(TC==101)PWM16_1_WritePeriod(SILENT);
if(TC==102){
PWM16_1_WritePeriod(L2);
PWM16_2_WritePeriod(SILENT);
PWM16_3_WritePeriod(F0);
}
if(TC==103)PWM16_1_WritePeriod(SILENT);
if(TC==104)PWM16_1_WritePeriod(L2);
if(TC==105)PWM16_1_WritePeriod(SILENT);
if(TC==106){
PWM16_1_WritePeriod(M2);
PWM16_2_WritePeriod(D1);
PWM16_3_WritePeriod(S0);
}
if(TC==107)PWM16_1_WritePeriod(SILENT);
if(TC==108)PWM16_1_WritePeriod(M2);
if(TC==109)PWM16_1_WritePeriod(SILENT);
if(TC==110){
PWM16_1_WritePeriod(F2);
PWM16_2_WritePeriod(SILENT);
PWM16_3_WritePeriod(R0);
}
if(TC==111)PWM16_1_WritePeriod(SILENT);
if(TC==112)PWM16_1_WritePeriod(F2);
if(TC==113)PWM16_1_WritePeriod(SILENT);
if(TC==114){
PWM16_1_WritePeriod(M2);
PWM16_2_WritePeriod(D1);
PWM16_3_WritePeriod(S0);
}
if(TC==118){
PWM16_1_WritePeriod(L2);
PWM16_2_WritePeriod(SILENT);
PWM16_3_WritePeriod(F0);
}
if(TC==122){
PWM16_1_WritePeriod(D2);
PWM16_2_WritePeriod(D1);
PWM16_3_WritePeriod(M0);
}
if(TC==126){
PWM16_1_WritePeriod(SILENT);
PWM16_2_WritePeriod(SILENT);
PWM16_3_WritePeriod(SILENT);
}
if(TC==130){
PWM16_2_WritePeriod(D1);
PWM16_3_WritePeriod(D0);
}
if(TC==131)PWM16_2_WritePeriod(SILENT);
if(TC==132)PWM16_2_WritePeriod(D1);
if(TC==133)PWM16_2_WritePeriod(SILENT);
if(TC==134){
PWM16_2_WritePeriod(L1);
PWM16_3_WritePeriod(SILENT);
}
if(TC==135)PWM16_2_WritePeriod(SILENT);
if(TC==136)PWM16_2_WritePeriod(L1);
if(TC==137)PWM16_2_WritePeriod(SILENT);
if(TC==138){
PWM16_2_WritePeriod(M1);
PWM16_3_WritePeriod(D0);
}
if(TC==139)PWM16_2_WritePeriod(SILENT);
if(TC==140)PWM16_2_WritePeriod(M1);
if(TC==141)PWM16_2_WritePeriod(SILENT);
if(TC==142){
PWM16_2_WritePeriod(F1);
PWM16_3_WritePeriod(SILENT);
}
if(TC==143)PWM16_2_WritePeriod(SILENT);
if(TC==144)PWM16_2_WritePeriod(F1);
if(TC==145)PWM16_2_WritePeriod(SILENT);
if(TC==146){
PWM16_2_WritePeriod(M1);
PWM16_3_WritePeriod(D0);
}
if(TC==150){
PWM16_2_WritePeriod(L1);
PWM16_3_WritePeriod(SILENT);
}
if(TC==154){
PWM16_2_WritePeriod(D1);
PWM16_3_WritePeriod(D0);
}
if(TC==158){
PWM16_2_WritePeriod(SILENT);
PWM16_3_WritePeriod(SILENT);
}
if(TC==162)PWM16_3_WritePeriod(D0);
if(TC==163)PWM16_3_WritePeriod(SILENT);
if(TC==164)PWM16_3_WritePeriod(D0);
if(TC==165)PWM16_3_WritePeriod(SILENT);
if(TC==166)PWM16_3_WritePeriod(L0);
if(TC==167)PWM16_3_WritePeriod(SILENT);
if(TC==168)PWM16_3_WritePeriod(L0);
if(TC==169)PWM16_3_WritePeriod(SILENT);
if(TC==170)PWM16_3_WritePeriod(M0);
if(TC==171)PWM16_3_WritePeriod(SILENT);
if(TC==172)PWM16_3_WritePeriod(M0);
if(TC==173)PWM16_3_WritePeriod(SILENT);
if(TC==174)PWM16_3_WritePeriod(F0);
if(TC==175)PWM16_3_WritePeriod(SILENT);
if(TC==176)PWM16_3_WritePeriod(F0);
if(TC==177)PWM16_3_WritePeriod(SILENT);
if(TC==178)PWM16_3_WritePeriod(M0);
if(TC==182)PWM16_3_WritePeriod(L0);
if(TC==186)PWM16_3_WritePeriod(D0);
if(TC==190)PWM16_3_WritePeriod(SILENT);

}
void main(void)
{
  // M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts
   // Insert your main routine code here.
   M8C_EnableGInt;
   PWM16_1_Start();
   PWM16_2_Start();
   PWM16_3_Start();
   Timer16_1_EnableInt();
   Timer16_1_Start();
   
}

考察

タイムカウントを使用しまして、PWM16を3つ使用しました。その際に、タイムカウントをカウントしていくたびに音域を変化させていき、音が重なるところでは、複数のPWM16が作動します。
「カエルの歌」を採用していますが、カエルの歌の終盤では、音が重なるところで「ミ・ファ・ソ・ラ・ソ・ファ・ミ」と「ド・休・ド・休・レ・休・レ・休・ミ
・休・ファ・休・ファ・ミ・レ・ド」というテンポが異なる場面がある。そこで、最もゆっくりのリズムのところをタイムカンウトが4変化するときに変化させるすると、「ドーーー」と「ド休ド休」テンポが合わせられるようになる。そのようなことを考慮した。
機器「CY8C27443-24PXI」は、GNDが2つしか搭載されていないので、GNDをジャンパー線を用いてタコ足にしなければならない。

<参考にした作品>
チーム1715
チーム1439

  • 最終更新:2017-07-11 14:15:26

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

認証パスワード