--- np2/sound/rhythmc.c 2004/02/18 20:11:37 1.8 +++ np2/sound/rhythmc.c 2005/02/09 20:11:35 1.10 @@ -5,18 +5,20 @@ #include "rhythm.h" -static const char file_2608bd[] = "2608_bd.wav"; -static const char file_2608sd[] = "2608_sd.wav"; -static const char file_2608top[] = "2608_top.wav"; -static const char file_2608hh[] = "2608_hh.wav"; -static const char file_2608tom[] = "2608_tom.wav"; -static const char file_2608rim[] = "2608_rim.wav"; +static const OEMCHAR file_2608bd[] = OEMTEXT("2608_bd.wav"); +static const OEMCHAR file_2608sd[] = OEMTEXT("2608_sd.wav"); +static const OEMCHAR file_2608top[] = OEMTEXT("2608_top.wav"); +static const OEMCHAR file_2608hh[] = OEMTEXT("2608_hh.wav"); +static const OEMCHAR file_2608tom[] = OEMTEXT("2608_tom.wav"); +static const OEMCHAR file_2608rim[] = OEMTEXT("2608_rim.wav"); -static const char *rhythmfile[6] = { +static const OEMCHAR *rhythmfile[6] = { file_2608bd, file_2608sd, file_2608top, file_2608hh, file_2608tom, file_2608rim}; typedef struct { + UINT rate; + UINT pcmexist; PMIXDAT pcm[6]; UINT vol; UINT voltbl[96]; @@ -28,13 +30,10 @@ static RHYTHMCFG rhythmcfg; void rhythm_initialize(UINT rate) { UINT i; - char path[MAX_PATH]; ZeroMemory(&rhythmcfg, sizeof(rhythmcfg)); - for (i=0; i<6; i++) { - getbiospath(path, rhythmfile[i], sizeof(path)); - pcmmix_regfile(rhythmcfg.pcm + i, path, rate); - } + rhythmcfg.rate = rate; + for (i=0; i<96; i++) { rhythmcfg.voltbl[i] = (UINT)(32768.0 * pow(2.0, (double)i * (-3.0) / 40.0)); @@ -55,6 +54,19 @@ void rhythm_deinitialize(void) { } } +static void rhythm_load(void) { + + int i; + OEMCHAR path[MAX_PATH]; + + for (i=0; i<6; i++) { + if (rhythmcfg.pcm[i].sample == NULL) { + getbiospath(path, rhythmfile[i], NELEMENTS(path)); + pcmmix_regfile(rhythmcfg.pcm + i, path, rhythmcfg.rate); + } + } +} + UINT rhythm_getcaps(void) { UINT ret; @@ -83,6 +95,7 @@ void rhythm_bind(RHYTHM rhy) { UINT i; + rhythm_load(); rhy->hdr.enable = 0x3f; for (i=0; i<6; i++) { rhy->trk[i].data = rhythmcfg.pcm[i];