82 lines
1.7 KiB
Plaintext
82 lines
1.7 KiB
Plaintext
I1 *cur_song=NULL;
|
|
TssStruct *cur_song_tss=NULL;
|
|
U8 music_octive;
|
|
double music_note_len;
|
|
U1 music_note_map[7]={0,2,3,5,7,8,10};
|
|
|
|
public double music_tempo,music_stacatto_factor=1.0;
|
|
|
|
I1 *MusicSetOctive(I1 *st)
|
|
{
|
|
I1 ch=*st++;
|
|
while (ch>='0' && ch<='9') {
|
|
music_octive=ch-'0';
|
|
ch=*st++;
|
|
}
|
|
return --st;
|
|
}
|
|
|
|
I1 *MusicSetNoteLen(I1 *st)
|
|
{
|
|
BoolU4 cont=TRUE;
|
|
do {
|
|
switch (*st++) {
|
|
case 'w': music_note_len=4.0; break;
|
|
case 'h': music_note_len=2.0; break;
|
|
case 'q': music_note_len=1.0; break;
|
|
case 'e': music_note_len=0.5; break;
|
|
case 's': music_note_len=0.25; break;
|
|
case 't': music_note_len=2.0*music_note_len/3.0; break;
|
|
case '.': music_note_len=1.5*music_note_len; break;
|
|
default:
|
|
st--;
|
|
cont=FALSE;
|
|
}
|
|
} while (cont);
|
|
return st;
|
|
}
|
|
|
|
public void Play(I1 *st,I1 *words=NULL)
|
|
{
|
|
I1 *word;
|
|
U8 note,i=0;
|
|
double f;
|
|
while (*st) {
|
|
st=MusicSetOctive(st);
|
|
st=MusicSetNoteLen(st);
|
|
st=MusicSetOctive(st);
|
|
if (!*st) break;
|
|
note=*st++-'A';
|
|
if (note<7) {
|
|
note=music_note_map[note];
|
|
if (*st=='b') {
|
|
note--;
|
|
st++;
|
|
} else if (*st=='#') {
|
|
note++;
|
|
st++;
|
|
}
|
|
f=2.0`(6+music_octive+(note-3)/12.0);
|
|
} else
|
|
f=0;
|
|
if (words) {
|
|
if (word=PointAtListEntry(i++,words))
|
|
if (StrCmp(word," "))
|
|
PutS(word);
|
|
}
|
|
Sound(f);
|
|
Sleep(1000*music_stacatto_factor*music_note_len/music_tempo);
|
|
Sound(0);
|
|
Sleep(1000*(1.0-music_stacatto_factor)*music_note_len/music_tempo);
|
|
}
|
|
}
|
|
|
|
void ResetMusicSettings()
|
|
{
|
|
music_stacatto_factor=1.0;
|
|
music_tempo=2.5;
|
|
music_octive=3;
|
|
music_note_len=1.0;
|
|
}
|
|
|
|
ResetMusicSettings; |