//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},
//*/
//返回(2)
{17, 255, 0},
{11, 0, 0}, {10, 0, 0}
};

//0~8 发音
//9 休止符
//10 无条件跳转并计数
//11 无条件停
//12 计数器开关
//13 计数器重设
//14 计数器归零跳转
//15 计数器归零停
//16 重设时间单位
//17 标记符号
//18 寻标操作并计数
//19 设置偏移音调
//20 设置不发音时间
//21 计数器归零寻标
//22 噪声,最大65毫秒

//---------------------------------------------------------------------------------------------------------------------------------------------------------------
int bf(int axis1, int axis2, int sj)
{
tone(FMP, pgm_read_word(&FREQ[axis1][axis2 + movingkey]), SJDW * sj - skiptime);
delay(SJDW * sj);
}

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]);
if ((pgm_read_byte(&MUSICPROGRAM[i][0]) == 17) && (findingflag == searching))
{
pc = i + 1;
if ((counterenab == 1) && (count == 1)) loopcounter--;
marknow = findingflag;
break;
}
}
}
int noise(int sj, int cxsj)
{
int thistime;
unsigned int alltime = 0;
char state = 0;
while (alltime < (1000 * cxsj))
{
if (state == 0)
{
state = 1;
digitalWrite(FMP, HIGH);
}
else
{
state = 0;
digitalWrite(FMP, LOW);
}
thistime = random(20) * 50;
delayMicroseconds(thistime);
alltime += thistime;
}
delay(sj * SJDW - cxsj);
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void setup() {
// put your setup code here, to run once:
if (EEPROM.read(0) == 65) FMP = 12;
#ifdef enabser
Serial.begin(9600);
#endif
//Serial.print(EEPROM.read(0));
pinMode(FMP, OUTPUT);
delay(1000);
}

void loop() {
// put your main code here, to run repeatedly:
pc = 0;
loopcounter = 65535;
//counterenab = 1;
stopplay = 0;
while (1)
{
#ifdef enabser
if (Serial.available() >= 2)
{
int fd;
fd = Serial.read() * 256 + Serial.read();
//Serial.print(int(fd[0]));
//Serial.print(int(fd[1]));
if (fd != marknow) xunbiao(fd, 0);
stopplay = 0;
counterenab = 0;
}
#endif
if (stopplay == 0)
{
unsigned char aaa[3];
for (int i = 0; i < 3; i++)
{
aaa[i] = pgm_read_byte(&MUSICPROGRAM[pc][i]);
}
pc++;
if (aaa[0] <= 8) bf(aaa[0], aaa[1], aaa[2]);
if (aaa[0] == 9) delay(SJDW * aaa[2]);
if (aaa[0] == 10)
{
pc = (aaa[1] * 256) + aaa[2];
if (counterenab == 1) loopcounter--;
}
if (aaa[0] == 11) stopplay = 1;
if (aaa[0] == 12) counterenab = aaa[1];
if (aaa[0] == 13) loopcounter = (aaa[1] * 256) + aaa[2];
if ((aaa[0] == 14) && ( loopcounter == 0) && (counterenab == 1)) pc = (aaa[1] * 256) + aaa[2];
if ((aaa[0] == 15) && ( loopcounter == 0) && (counterenab == 1)) stopplay = 1;
if (aaa[0] == 16) SJDW = (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)
{
skiptime = (aaa[1] * 256) + aaa[2];
}
if ((aaa[0] == 21) && ( loopcounter == 0) && (counterenab == 1))
{
int finding = (aaa[1] * 256) + aaa[2];
xunbiao(finding, 0);
}
if (aaa[0] == 22) noise(aaa[2], aaa[1]);
}
}
}

Prev |
Pg.: 1 2 3 4


Back to home | File page

Subscribe | Register | Login | N