void native_midi_start(NativeMidiSong *song) { MMRESULT merr; MIDIPROPTIMEDIV mptd; native_midi_stop(); if (!hMidiStream) { merr=midiStreamOpen(&hMidiStream,&MidiDevice,1,(DWORD)&MidiProc,0,CALLBACK_FUNCTION); if (merr!=MMSYSERR_NOERROR) { hMidiStream=0; return; } //midiStreamStop(hMidiStream); currentsong=song; currentsong->NewPos=0; currentsong->MusicPlaying=1; mptd.cbStruct=sizeof(MIDIPROPTIMEDIV); mptd.dwTimeDiv=currentsong->ppqn; merr=midiStreamProperty(hMidiStream,(LPBYTE)&mptd,MIDIPROP_SET | MIDIPROP_TIMEDIV); BlockOut(song); merr=midiStreamRestart(hMidiStream); } }
void native_midi_start(NativeMidiSong *song, int loops) { native_midi_stop(); song->store->Connect(&synth); song->store->SetLoops(loops); song->store->Start(); currentSong = song; }
void native_midi_start(NativeMidiSong *song) { MMRESULT merr; memset(&wfm,0,sizeof(wfm)); wfm.wfx.wFormatTag=WAVE_FORMAT_MIDI; wfm.wfx.nChannels=1; wfm.wfx.nSamplesPerSec=32; wfm.wfx.nAvgBytesPerSec=32; wfm.wfx.nBlockAlign=sizeof(WAVEFORMAT_MIDI_MESSAGE); wfm.wfx.wBitsPerSample=16; wfm.wfx.cbSize=WAVEFORMAT_MIDI_EXTRASIZE; wfm.USecPerQuarterNote=9600000; // Force each tick to be 1/10 sec //wfm.TicksPerQuarterNote = 96; wfm.USecPerQuarterNote=263157; //+- wfm.TicksPerQuarterNote=800;//480; /*wfm.USecPerQuarterNote=500000; //Wrong wfm.TicksPerQuarterNote=4;*/ native_midi_stop(); if (!hMidiStream) { merr = waveOutOpen(&hMidiStream, WAVE_MAPPER, (LPWAVEFORMATEX)&wfm, (DWORD)MidiProc, 0, CALLBACK_FUNCTION); if (merr!=MMSYSERR_NOERROR) { hMidiStream=0; return; } //midiStreamStop(hMidiStream); currentsong=song; currentsong->NewPos=0; currentsong->MusicPlaying=1; /*mptd.cbStruct=sizeof(MIDIPROPTIMEDIV); mptd.dwTimeDiv=currentsong->ppqn; merr=midiStreamProperty(hMidiStream,(LPBYTE)&mptd,MIDIPROP_SET | MIDIPROP_TIMEDIV);*/ BlockOut(song); merr=waveOutReset(hMidiStream); } }
/* Halt playing of music */ static void music_internal_halt(void) { switch (music_playing->type) { #ifdef CMD_MUSIC case MUS_CMD: MusicCMD_Stop(music_playing->data.cmd); break; #endif #ifdef WAV_MUSIC case MUS_WAV: WAVStream_Stop(); break; #endif #ifdef MODPLUG_MUSIC case MUS_MODPLUG: modplug_stop(music_playing->data.modplug); break; #endif #ifdef MOD_MUSIC case MUS_MOD: MOD_stop(music_playing->data.module); break; #endif #ifdef MID_MUSIC case MUS_MID: #ifdef USE_NATIVE_MIDI if ( native_midi_ok ) { native_midi_stop(); goto skip; } #endif #ifdef USE_FLUIDSYNTH_MIDI if ( fluidsynth_ok ) { fluidsynth_stop(music_playing->data.fluidsynthmidi); goto skip; } #endif #ifdef USE_TIMIDITY_MIDI if ( timidity_ok ) { Timidity_Stop(); goto skip; } #endif break; #endif #ifdef OGG_MUSIC case MUS_OGG: OGG_stop(music_playing->data.ogg); break; #endif #ifdef FLAC_MUSIC case MUS_FLAC: FLAC_stop(music_playing->data.flac); break; #endif #ifdef MP3_MUSIC case MUS_MP3: smpeg.SMPEG_stop(music_playing->data.mp3); break; #endif #ifdef MP3_MAD_MUSIC case MUS_MP3_MAD: mad_stop(music_playing->data.mp3_mad); break; #endif default: /* Unknown music type?? */ return; } skip: music_playing->fading = MIX_NO_FADING; music_playing = NULL; }