int musmidi_cb() { midiobj_t *obj = &prv.midi; switch(obj->st) { case MIDI_START: obj->in_play = TRUE; obj->dev->start(obj->no, obj->dfile->data, obj->dfile->size); obj->st = MIDI_STOPCHECK; break; case MIDI_STOPCHECK: { midiplaystate st; if (NG == obj->dev->getpos(&st)) { obj->st = MIDI_LOOPCHECK; } break; } case MIDI_LOOPCHECK: obj->cnt++; if (obj->loop == 0) { // infinity loop obj->st = MIDI_START; break; } if (--obj->loop == 0) { obj->st = MIDI_STOP; } else { obj->st = MIDI_START; } break; case MIDI_STOP: obj->dev->stop(); obj->in_play = FALSE; obj->st = MIDI_NOP; if (obj->dfile) { ald_freedata(obj->dfile); obj->dfile = NULL; } break; case MIDI_PAUSE: obj->dev->pause(); obj->st = MIDI_NOP; break; case MIDI_UNPAUSE: obj->dev->unpause(); obj->st = MIDI_STOPCHECK; break; case MIDI_NOP: break; } return OK; }
void commandLL() { int type = sys_getc(); int link_no = getCaliValue(); int *var, _var = 0; int num, i; dridata *dfile = ald_getdata(DRIFILE_DATA, link_no - 1); WORD *data; if (dfile == NULL) { getCaliValue(); getCaliValue(); sysVar[0] = 255; return; } data = (WORD *)dfile->data; switch(type) { case 0: /* T2 */ var = getCaliVariable(); num = getCaliValue(); DEBUG_COMMAND("LL %d,%d,%d,%d:\n",type, link_no, _var, num); if (dfile->size < num * sizeof(WORD)) { WARNING("data shortage (req = %d, result = %d)\n", num, dfile->size/ sizeof(WORD)); /* sysVar[0] = 254; 大嘘*/ /* return; */ num = dfile->size / sizeof(WORD); } for (i = 0; i < num; i++) { #ifdef WORDS_BIGENDIAN *var = swap16(*data); var++; data++; #else *var = *data; var++; data++; #endif } break; case 1: _var = getCaliValue(); num = getCaliValue(); DEBUG_COMMAND_YET("LL1 not yet %d, %d\n", _var, num); sysVar[0] = 255; goto out; break; default: WARNING("Unknown LL command %d\n", type); goto out; } sysVar[0] = 0; out: ald_freedata(dfile); }
/** * pcmlib_{load|mixlr}で読み込んだWAVFILEの解放 * @param wfile: 解放するデータ * @return なし */ void pcmlib_free(WAVFILE *wfile) { if (wfile == NULL) return; if (wfile->dfile) { ald_freedata((dridata *)(wfile->dfile)); } else { g_free(wfile->data); } g_free(wfile); }
// メモリ上で加工できるようロードしてコピー WAVFILE *pcmlib_load_rw(int no) { dridata *dfile; WAVFILE *wfile; dfile = ald_getdata(DRIFILE_WAVE, no -1); if (dfile == NULL) { WARNING("DRIFILE_WAVE fail to open %d\n", no -1); return NULL; } wfile = wav_getinfo(dfile->data); if (wfile) { void *p = g_malloc(wfile->bytes); memcpy(p, wfile->data, wfile->bytes); wfile->data = (BYTE *)p; wfile->dfile = NULL; } ald_freedata(dfile); return wfile; }
/** * 指定の番号の .WAV|.OGG をロードする。 * @param no: DRIファイル番号 * @return: WAVFILE object */ WAVFILE *pcmlib_load(int no) { dridata *dfile; WAVFILE *wfile; dfile = ald_getdata(DRIFILE_WAVE, no -1); if (dfile == NULL) { WARNING("DRIFILE_WAVE fail to open %d\n", no -1); return NULL; } wfile = wav_getinfo(dfile->data); if (wfile == NULL) { wfile = ogg_getinfo(dfile->data, dfile->size); if (wfile == NULL) { WARNING("not .wav or .ogg file\n"); ald_freedata(dfile); return NULL; } } wfile->dfile = dfile; return wfile; }