チーム205A

課題名

外出自粛カラオケ

研究者名

2-14-040 名越 裕貴
2-14-041 西村 匡弘

概要

PWM_UART_2のラボを参考に、シリアルケーブルで接続しているPCからの入力に応じて4種類の曲が流れるようにした。また、メロディーに沿ってパネルに歌詞が表示され、カラオケのように歌うことができる機能を追加した。流すことのできる曲と、メロディーライン部分のソースコードの参考元は以下の通りである。

楽曲 参考元
Amazing Grace 自作
カエルの歌 チーム1347
きらきら星 チーム2017
London Bridge is falling down 自作

ソースコード参考元チーム2049


使用器具

・PSoC基盤
・USB-Serial変換ケーブル
・スピーカー
・PSoCMiniProg
・ジャンパー2本

配線及びソースコード

配線
205A-haisen.png
Global Resources
205A-global resouces.png
PWM16_1
205A-PWM16-1.png
Timer16_1
205A-Timer16-1.png
Counter8
205A-counter8.png
UART
205A-uart.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; // Pulse Width
int SILENT=0, c=243, D=217, L=193, M=182, F=162, S=145, Ra=136, R=129,C=121;
int DD=108, LL=96,MM=91,FF=81,SS=72,RRa=68,RR=64,CC=61;
int TC=-4; //Time Count
int choicesong = 0;//1 -> Amazing Grace ; 2 -> きらきら星 ; 3 -> カエルの歌 4 -> London Bridge is falling down

void myISR(void){

TC += 1;
if (choicesong == 1){//Amazing Grace

Amazing Grace

else if (choicesong == 2){//キラキラ星

きらきら星

else if (choicesong == 3){//カエルの歌

カエルの歌

else if (choicesong == 4){//London Bridge is falling down

London Bridge is falling down

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  
    
  UART_CPutString("\r\n鳴らしたい曲の番号を入力してください \r\n");
  UART_CPutString("\r\n1 -> Amazing Grace \r\n");
  UART_CPutString("\r\n2 -> きらきら星 \r\n");
  UART_CPutString("\r\n3 -> カエルの歌 \r\n");
  UART_CPutString("\r\n4 -> London Bridge is falling down \r\n");
  
  PWM16_1_Start();
  Timer16_1_EnableInt();
  Timer16_1_Start();
  PWM16_1_WritePulseWidth(PW);
  LCD_1_Start();
  while (1){
       if(UART_bCmdCheck()) {
          // Wait for command    
            if(strPtr = UART_szGetParam()) {
          // More than delimiter?  
              UART_PutString(strPtr);             // Print out command   
              UART_CPutString("\r\n曲を変えたい場合はその番号を入力してください\r\n");
              if (*strPtr == '1'){
                  S=153; Ra=136; 
                  DD=115; LL=102; MM=91;SS=77;
                  choicesong = 1;
                  TC = -4;
              }
              else if (*strPtr == '2'){
                  D=229; L=204; M=182; F=172; S=153; R=136;
                  choicesong = 2;
                  TC = -4;
              }
              else if (*strPtr == '3'){
                  D=229; L=204; M=182; F=172; S=153; R=136; C=121; DD=115;
                  choicesong = 3;
                  TC = -4;
              }
              else if (*strPtr == '4'){
                  D=229; L=204; M=182; F=172; S=153; R=136; C=121; DD=115;
                  choicesong = 4;
                  TC = -4;
              }
          }
          UART_CmdReset();
      }
  }

}


考察

今回自作した曲はそれぞれテンポの違う曲だが、割込みの頻度を変えることで工夫することが出来る。
歌詞の表示方法として実際のカラオケのように、歌う部分を先に表示させて実際に歌いやすくしている。
また歌った部分は必要ないので消して、歌う部分が上にくる仕様にしている。
曲はさらに追加することが可能なので、実際に追加するとソースコードが莫大であり、曲によってテンポが違うので、現実的ではないが、本物のようなカラオケが出来るようになると考えられる。

  • 最終更新:2020-11-24 17:05:49

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

認証パスワード