// sound.c #include #include #include "addrs.h" #define DFILE 2 #define MVOL 127 #define SVOL 96 typedef struct { char *fname; void *addr; CdlFILE finfo; } FILE_INFO; static FILE_INFO dfile[DFILE] = { {"\\DATA\\SOUND\\STD0.VH;1", (void *)STD0_VH, 0}, {"\\DATA\\SOUND\\STD0.VB;1", (void *)STD0_VB, 0}, }; short vab, seq; void datafile_read(); void datafile_search(); void init_music(); void play_music(); void stop_music(); /* test void main() { datafile_search(); datafile_read(); init_music(); play_music(); while (1); } */ // retrieve vab file from CD-ROM void datafile_search() { int i, j; for (i = 0; i < DFILE; i++) { for (j = 0; j < 10; j++) { if (CdSearchFile(&(dfile[i].finfo), dfile[i].fname) != 0) break; else printf("%s not found.\n", dfile[i].fname); } } } void datafile_read() { int i, j; int cnt; for (i = 0; i < DFILE; i++) { for (j = 0; j < 10; j++) { CdReadFile(dfile[i].fname, dfile[i].addr, dfile[i].finfo.size); while ( (cnt = CdReadSync(1, 0)) > 0 ) VSync(0); if (cnt == 0) break; } } } void init_music() { vab = SsVabTransfer( (u_char *)STD0_VH, (u_char *)STD0_VB, -1, 1 ); if (vab < 0) { printf("SsVabTransfer failed (%d)\n", vab); return; } seq = SsSeqOpen( (u_long *)MUSIC_SEQ, vab ); if (seq < 0) { printf("SsSeqOpen failed (%d)\n",seq); return; } } void play_music() { SsSetMVol(MVOL, MVOL); SsSeqSetVol(seq, SVOL, SVOL); SsSeqPlay(seq, SSPLAY_PLAY, SSPLAY_INFINITY); } void stop_music() { SsSeqStop(seq); VSync(0); VSync(0); SsSeqClose(seq); SsVabClose(vab); }