{6, 2, 4}, {6, 4, 4}, {5, 9, 2}, {5, 7, 2}, {5, 9, 2}, {5, 7, 2}, {6, 0, 4}, {5, 11, 1}, {6, 0, 1}, {5, 11, 2}, {5, 9, 4}, {5, 7, 4},//71
//PART B2
{6, 2, 4}, {6, 4, 2}, {6, 7, 2}, {6, 9, 2}, {6, 7, 2}, {6, 4, 2}, {6, 2, 2}, {5, 9, 4}, {6, 0, 4}, {6, 2, 4}, {6, 4, 4},
{5, 9, 6}, {5, 9, 6}, {5, 7, 4}, {5, 9, 16},//15
//PART E
{9, 0, 2}, {5, 9, 6}, {5, 9, 6}, {5, 7, 4}, {5, 9, 14},//5*/
//{11, 0, 0},

/*
//极乐净土()
{17,0,9},
{16,0,100},{19,0,3},//3
//PART S
{9,0,12},{4,4,2},{4,7,2},{4,9,2},{9,0,4},{4,7,2},{4,9,2},{9,0,4},{4,7,2},
{4,9,2},{5,0,2},{4,7,2},{4,9,2},{4,4,2},{9,0,2},{4,4,2},{4,7,2},{4,9,2},{9,0,4},{4,7,2},{4,9,2},{9,0,4},{4,7,2},
{4,9,2},{5,4,2},{5,0,2},{5,2,2},{4,9,2},{9,0,2},{4,4,2},{4,7,2},{4,9,2},{9,0,4},{4,7,2},{4,9,2},{9,0,4},{4,7,2},
{4,9,2},{5,0,2},{4,7,2},{4,9,2},{4,4,2},{4,7,2},{4,0,2},{4,2,2},{4,4,4},{5,0,4},{4,9,4},{5,4,4},
{5,2,2},{5,4,1},{5,2,1},{5,0,2},{5,2,2},{4,9,4},{9,0,4},//56
//LOOPING
//PART A
{4,9,4},{4,9,4},{4,9,4},{4,9,1},{5,0,1},{5,2,1},{5,4,1},{4,9,4},{4,9,4},{4,9,2},{4,7,2},{4,7,2},{4,9,2},
{4,9,4},{4,9,4},{4,9,4},{4,9,1},{5,0,1},{5,2,1},{5,4,1},{4,9,4},{4,9,4},{4,9,2},{5,5,2},{5,5,2},{5,4,2},
{4,9,4},{4,9,4},{4,9,4},{4,9,1},{5,0,1},{5,2,1},{5,4,1},{4,9,4},{4,9,4},{4,9,2},{4,7,2},{4,7,2},{4,9,2},
{4,9,4},{4,9,4},{4,9,4},{4,9,1},{5,0,1},{5,2,1},{5,4,1},{5,9,6},{4,7,2},{4,7,2},{4,9,2},{4,9,4},//51
//PART X0
{9,0,6},{4,9,2},{4,9,2},{4,7,1},{4,7,3},{4,9,2},{4,7,2},{4,4,2},{4,4,2},{4,7,1},{4,4,3},{9,0,4},
{9,0,6},{4,9,2},{4,9,2},{4,7,2},{4,9,2},{4,11,2},{5,0,4},{4,11,4},{4,9,2},{4,11,1},{4,9,1},{4,7,4},
{9,0,6},{4,9,2},{4,9,2},{4,7,1},{4,7,3},{4,9,2},{4,7,2},{4,4,2},{4,4,2},{4,7,1},{4,4,3},{9,0,2},{4,7,2},
{4,7,2},{4,9,2},{9,0,2},{4,7,2},{4,7,2},{4,9,2},{9,0,2},{4,9,1},{4,11,1},{5,0,4},{5,2,4},{4,9,2},{4,4,2},{4,4,2},{4,7,2},
{4,7,2},{4,9,2},{9,0,2},{5,4,2},{5,2,4},{9,0,2},{4,9,2},{9,0,2},{4,9,2},{4,9,2},{5,4,2},{5,2,4},{9,0,6},
{5,2,2},{5,2,2},{5,1,2},{5,2,2},{5,0,1},{4,9,3},{4,7,4},{4,7,2},{4,7,2},{4,9,2},{4,9,2},{4,4,2},{4,4,2},{4,7,2},
{4,7,2},{4,9,2},{9,0,2},{5,4,2},{5,2,4},{9,0,2},{4,9,2},{9,0,2},{4,9,2},{4,9,2},{5,4,2},{5,2,4},{9,0,6},
{5,2,2},{5,2,2},{5,1,2},{5,2,2},{5,0,1},{4,9,2},{4,4,1},{4,7,4},{4,9,2},{4,9,2},{4,7,2},{4,9,4},{9,0,2},{4,4,1},{4,7,1},未完成
*/
/*/水晶地区()
{17, 1, 4},
{19, 1, 3}, {16, 0, 125},
{3, 9, 4}, {4, 0, 2}, {3, 9, 2}, {4, 4, 4}, {4, 2, 2}, {4, 4, 2},
{4, 6, 4}, {4, 2, 4}, {3, 9, 4}, {3, 9, 2}, {3, 11, 2},
{4, 0, 4}, {4, 2, 2}, {4, 0, 2}, {3, 11, 4}, {4, 0, 2}, {3, 11, 2},
{3, 9, 4}, {4, 0, 4}, {3, 11, 4}, {3, 4, 8},
{22, 15, 1}, {22, 15, 1}, {22, 15, 1}, {22, 15, 1}, {22, 15, 1}, {22, 15, 1}, {22, 15, 1}, {22, 15, 1},
{3, 9, 1}, {9, 0, 1}, {4, 4, 1}, {9, 0, 1}, {4, 2, 1}, {4, 4, 1}, {9, 0, 1}, {4, 7, 1}, {9, 0, 1}, {4, 7, 1}, {4, 4, 1}, {9, 0, 1}, {4, 2, 1}, {9, 0, 1}, {4, 4, 1}, {9, 0, 1},
{3, 9, 1}, {9, 0, 1}, {4, 4, 1}, {9, 0, 1}, {4, 2, 1}, {4, 4, 1}, {9, 0, 1}, {4, 9, 1}, {9, 0, 1}, {4, 9, 1}, {4, 4, 1}, {9, 0, 1}, {4, 2, 1}, {9, 0, 1}, {4, 4, 1}, {9, 0, 1},
//*/

//闹钟
{17,2,0},
{16,0,80},
{5,7,1},{9,0,1},{5,7,1},{9,0,1},{5,7,1},{9,0,1},{5,7,1},{9,0,4},
{18,2,0},

//返回(2)
{17, 255, 0},
{10, 0, 0}
};
//--------------------------------------------------------------------------------------
int musicinit()
{
TCCR0B=0X01;
TCCR0A=0X02;
GTCCR=0X00;
TIMSK0=0X02;
sei();
}

int bf(unsigned char axis1,unsigned char axis2,unsigned int notetime/*,char wait*/);
int scoredelay(unsigned int fulltime);
int xunbiao(int findingflag, char count);
int musiccontinue()
{
if (stopplay == 0)
{
unsigned char aaa[3];
for (int i = 0; i < 3; i++)
{
aaa[i] = pgm_read_byte(&MUSICPROGRAM[scorepointer][i]);
}
scorepointer++;
if (aaa[0] <= 8) bf(aaa[0], aaa[1], aaa[2]);
if (aaa[0] == 9) scoredelay(unittime * aaa[2]);
if (aaa[0] == 10)
{
scorepointer = (aaa[1] * 256) + aaa[2];
if (scoreloop == 1) scoreloopcounter--;
}
if (aaa[0] == 11) stopplay = 1;
if (aaa[0] == 12) scoreloop = aaa[1];
if (aaa[0] == 13) scoreloopcounter = (aaa[1] * 256) + aaa[2];
if ((aaa[0] == 14) && ( scoreloopcounter == 0) && (scoreloop == 1)) scorepointer = (aaa[1] * 256) + aaa[2];
if ((aaa[0] == 15) && ( scoreloopcounter == 0) && (scoreloop == 1)) stopplay = 1;
if (aaa[0] == 16) unittime = (aaa[1] * 256) + aaa[2];
//=17:标记不操作
if (aaa[0] == 18)
{
int finding = (aaa[1] * 256) + aaa[2];
xunbiao(finding, 1);
}
if (aaa[0] == 19)
{
if (aaa[1] == 1) movingkey = aaa[2];
else movingkey = (-aaa[2]);
}
if (aaa[0] == 20)
{
unvdumbtime = (aaa[1] * 256) + aaa[2];
}
if ((aaa[0] == 21) && ( scoreloopcounter == 0) && (scoreloop == 1))
{
int finding = (aaa[1] * 256) + aaa[2];
xunbiao(finding, 0);
}
//if (aaa[0] == 22) noise(aaa[2], aaa[1]);
}
}

int sqarewave(unsigned int fulltime,unsigned int lcdumbtime,unsigned char fpxs,unsigned char jstop)
{
long tclksofall,tclksofdumb,tclksofbzq;
tclksofall=F_CPU/1000*fulltime;
tclksofdumb=F_CPU/1000*lcdumbtime;
tclksofbzq=pgm_read_word(&fpxsb[fpxs])*jstop;
// ^^^^----罪魁祸首,应该是word,写成了byte
//20220411:上一版代码有问题,已修复
beepcounter=tclksofall/tclksofbzq;
dumbthres=tclksofdumb/tclksofbzq;
TCCR0B=(TCCR0B&0xf8)|fpxs;
OCR0A=jstop;
}

int scoredelay(unsigned int fulltime)
{
beepcounter=fulltime;
dumbthres=fulltime;
TCCR0B=(TCCR0B&0xf8)|0x03;
OCR0A=125;
}

int bf(unsigned char axis1,unsigned char axis2,unsigned int notetime/*,char wait*/)
{
char keyweiz=(axis1*12)+axis2;
keyweiz=keyweiz+movingkey;
axis1=keyweiz/12;
axis2=keyweiz%12;
char lcjstop=pgm_read_byte(&halfzq[pgm_read_byte(&ygdyb[axis1][1])][axis2]);
char lcfpxs=pgm_read_byte(&ygdyb[axis1][0]);
sqarewave(notetime*unittime,unvdumbtime,lcfpxs,lcjstop);
/*if(wait==1)
{
while(beepcounter!=0);
}*/
}

int xunbiao(int findingflag, char count)
{
int searching;
for (unsigned int i = 0; i < MUSICLENGTH; i++)
{
searching = (pgm_read_byte(&MUSICPROGRAM[i][1]) * 256) + pgm_read_byte(&MUSICPROGRAM[i][2]);

Prev | Next
Pg.: 1 2 3 4 5 6


Back to home | File page

Subscribe | Register | Login | N