SPEAKER練習問題
[SPEARKER練習問題1]
3オクターブ分のドレミファソラシドを演奏する.For文を使うこと.
[解答例]
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
#include "NolibM.h"
volatile struct EPWM_REGS *ePWM[] =
{ &EPwm1Regs, //intentional: (ePWM[0] not used)
&EPwm1Regs,
&EPwm2Regs,
&EPwm3Regs,
&EPwm4Regs,
&EPwm5Regs,
&EPwm6Regs,
&EPwm7Regs
};
void main(void)
{
int i;
initNolibM(); //初期化
while(1) // 無限ループ
{/*------------------↓↓↓ここから書き換える↓↓↓--------------------*/
for(i=1;i<4;i++)
{
beep(DO/i,D1,250);
wait(250);
beep(RE/i,D1,250);
wait(250);
beep(MI/i,D1,250);
wait(250);
beep(FA/i,D1,250);
wait(250);
beep(SO/i,D1,125);
wait(62);
beep(RA/i,D1,125);
wait(250);
beep(SHI/i,D1,125);
wait(250);
beep(DO/2/i,D1,125);
wait(250);
}
}/*------------------↑↑↑書き換えるのはここまで↑↑↑-----------------*/
}
[SPEARKER練習問題2]
SW1のON/OFFによってONの時に音楽の速度が二倍速に変わる
[解答例]
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
#include "NolibM.h"
volatile struct EPWM_REGS *ePWM[] =
{ &EPwm1Regs, //intentional: (ePWM[0] not used)
&EPwm1Regs,
&EPwm2Regs,
&EPwm3Regs,
&EPwm4Regs,
&EPwm5Regs,
&EPwm6Regs,
&EPwm7Regs
};
void main(void)
{
int i,sp;
initNolibM(); //初期化
while(1) // 無限ループ
{/*------------------↓↓↓ここから書き換える↓↓↓--------------------*/
for(i=1;i<4;i++)
{
if(sw1(ON))
{
sp=2;
}
else
{
sp=1;
}
beep(DO/i,D1,250/sp);
wait(250/sp);
beep(RE/i,D1,250/sp);
wait(250/sp);
beep(MI/i,D1,250/sp);
wait(250/sp);
beep(FA/i,D1,250/sp);
wait(250/sp);
beep(SO/i,D1,125/sp);
wait(62/sp);
beep(RA/i,D1,125/sp);
wait(250/sp);
beep(SHI/i,D1,125/sp);
wait(250/sp);
beep(DO/2/i,D1,125/sp);
wait(250/sp);
}
}/*------------------↑↑↑書き換えるのはここまで↑↑↑-----------------*/
}
[SPEARKER練習問題3]
SW1のON/OFFによって音楽が1オクターブ上がる
[SPEARKER練習問題4]
周波数を連続変化させる、 台形則↓の音を聞いてみる。
beep2(28000,D1)→5s→beep2(15000,D1) →5s→beep2(15000,D1) →5s→beep2(28000,D1)
beep2(28000,D1)→5s→beep2(15000,D1) →5s→beep2(15000,D1) →5s→beep2(28000,D1)
[解答例]
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
#include "NolibM.h"
volatile struct EPWM_REGS *ePWM[] =
{ &EPwm1Regs, //intentional: (ePWM[0] not used)
&EPwm1Regs,
&EPwm2Regs,
&EPwm3Regs,
&EPwm4Regs,
&EPwm5Regs,
&EPwm6Regs,
&EPwm7Regs
};
void main(void)
{
int i,tn;
initNolibM(); //初期化
while(1) // 無限ループ
{/*------------------↓↓↓ここから書き換える↓↓↓--------------------*/
for(tn=28000;tn>15000;tn-=28)
{
beep2(tn,D1);
wait(10);
}
wait(5000);
for(tn=15000;tn<28000;tn+=28)
{
beep2(tn,D1);
wait(10);
}
}
/*------------------↑↑↑書き換えるのはここまで↑↑↑-----------------*/
}
[SPEARKER練習問題5]
配列変数を使って音楽を奏でる
宣言 int playcode[]={DO,RE,MI,FA,SO,RA,SHI}
For文を使ってbeep()を回す
宣言 int playcode[]={DO,RE,MI,FA,SO,RA,SHI}
For文を使ってbeep()を回す
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
#include "NolibM.h"
volatile struct EPWM_REGS *ePWM[] =
{ &EPwm1Regs, //intentional: (ePWM[0] not used)
&EPwm1Regs,
&EPwm2Regs,
&EPwm3Regs,
&EPwm4Regs,
&EPwm5Regs,
&EPwm6Regs,
&EPwm7Regs,
#if (DSP2804x_DEVICE_H)
&EPwm8Regs
#endif
};
void main(void)
{
int i;
int playcode[]={DO,RE,MI,FA,SO,RA,SHI,DO/2};
initNolibM(); //初期化
while(1) // 無限ループ
{/*------------------↓↓↓ここから書き換える↓↓↓--------------------*/
for(i=0;i<8;i++)
{
beep(playcode[i],D1,125);
wait(250);
}
}
/*------------------↑↑↑書き換えるのはここまで↑↑↑-----------------*/
}
[SPEARKER練習問題6]
[ハイレベル]二次元配列を使って音と長さの情報を配列に入れて演奏する。
宣言 int playcode[][]={{DO,250},{RE,250},{MI,125}}
ヒントBeep2()を使う
宣言 int playcode[][]={{DO,250},{RE,250},{MI,125}}
ヒントBeep2()を使う
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
#include "NolibM.h"
volatile struct EPWM_REGS *ePWM[] =
{ &EPwm1Regs, //intentional: (ePWM[0] not used)
&EPwm1Regs,
&EPwm2Regs,
&EPwm3Regs,
&EPwm4Regs,
&EPwm5Regs,
&EPwm6Regs,
&EPwm7Regs
};
void main(void)
{
int i;
int playcode[][2]={{DO,125},{RE,125},{MI,250},{FA,65},{SO,65},{RA,125},{SHI,100},{DO/2,250}};
initNolibM(); //初期化
while(1) // 無限ループ
{/*------------------↓↓↓ここから書き換える↓↓↓--------------------*/
for(i=0;i<8;i++)
{
beep(playcode[i][0],D1,playcode[i][1]);
wait(250);
}
}
/*------------------↑↑↑書き換えるのはここまで↑↑↑-----------------*/
}

