📄 music.h
字号:
//=======================
uint8 WAVTICKsp=84;
#define pang_buf_size 256
uint8 pang_buf[pang_buf_size];
uint8 pang_buf_sw=off;
uint8 copy_sd_buf_sw=off;
uint8 next_music_sw ;
//=====================
typedef struct
{
uint8 riff[4];
uint32 file_len;
uint8 wave[4];
uint8 fmt[4];
uint8 unknow1[4];
//20====================
uint16 format_tag;
uint16 channels;
uint32 sample_rate;
//28====================
uint32 avg_bytes_per_sec;
uint16 block_align;
uint16 bits_per_sample;
//36==================
uint8 data[4];
uint32 data_len;
//44
uint8 data_block[468];
} WAV_RIFF;
typedef struct
{
DATA_POSIT DirPosit;
uint16 sample_rate;
} WAVFILEHANDLE;
WAVFILEHANDLE WavFileHd={{dir_org_clusId,0,0,ok},16000};
//读取BPB数据结构
void ReadWavInf(uint8 * inf)
//********************************************************************************************
{ uint8 i;
uint16 j;
WAV_RIFF* RIFF = (WAV_RIFF*)inf; //1
//获取参数
/*i=(RIFF->sample_rate)/1000;
j=255-((164*8)/i);
sp=j;*/
WavFileHd.sample_rate=RIFF->sample_rate;
if(RIFF->sample_rate==8000) WAVTICKsp=86;
else if(RIFF->sample_rate==16000) WAVTICKsp=173;
else {i=(RIFF->sample_rate)/1000;//2.75us差
j=255-((166*8)/i);
WAVTICKsp=j;}
}
//======================
volatile uint16 ic=0;
SIGNAL(SIG_OVERFLOW2)
{
//uint8 i;
TCNT2=WAVTICKsp;
if(ic<(512-pang_buf_size)) {OCR1AL=sd_buf[ic];ic++;/**/if(pang_buf_sw==off) {OSRdyTbl |= (0x01<<1);}}
else {
OCR1AL=pang_buf[ic-(512-pang_buf_size)];ic++;
/**/if(copy_sd_buf_sw==off) {OSRdyTbl |= (0x01<<1);}if(ic>=512) {ic=0;pang_buf_sw=off;copy_sd_buf_sw=off;}
}
}
#define stop 0
#define ck 1
#define ck_8 2
#define ck_64 3
#define ck_256 4
#define ck_1024 5
#define cnt_down 6
#define cnt_up 7
//=====================
#define music_off() TCCR2=stop
#define music_on() TCCR2=ck_8
//easy but it is urgl
void init_t2(void)
{
TCCR2=ck_8;
TIMSK|=(1<<6);//SREG|=0x80;
TCNT0=84;
}
void MusicPlayerSev(DATA_POSIT * dir_posit)
{ WavFileHd.DirPosit=* dir_posit;
music_off(); F_handle=Dir_play_next(&(BmpFileHd.DirPosit),"?.BMP");draw1pic(1,1);music_on();
F_handle=Dir_play_next(&(WavFileHd.DirPosit),"?.WAV");
Read_current_File_one_sec(&F_handle);ReadWavInf(sd_buf);
next_music_sw=off;
while(1)
{
if(MouseMsg){
if(MouseMsg&(1<<RightBtn)) {Key1SW=off;}
else next_music_sw=on;//have a mouse mesage
MouseMsg=0;}//always do it clr the msg
if(Key0SW) {next_music_sw=on;Key0SW=off;}
if(Key1SW==off) {music_off();break;}
//=========================================
//================================
cli();
uint16 j=ic;
sei();
if(j<(512-pang_buf_size-10) && pang_buf_sw==off)
{CopyBytes(&sd_buf[512-pang_buf_size],&pang_buf[0],pang_buf_size);
pang_buf_sw=on;}
if(j>(512-pang_buf_size) && copy_sd_buf_sw==off )
{
clr(LedSDRd);
uint8 i= Read_current_File_one_sec(&F_handle);copy_sd_buf_sw=on;
set(LedSDRd);
if(i==error || next_music_sw==on) {
music_off(); F_handle=Dir_play_next(&(BmpFileHd.DirPosit),"?.BMP");draw1pic(1,1);music_on();
F_handle=Dir_play_next(&(WavFileHd.DirPosit),"?.WAV");
Read_current_File_one_sec(&F_handle);ReadWavInf(sd_buf);
next_music_sw=off;}//end one sing ,next
}
//==========================
OSTaskSuspend(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -