Ejemplo n.º 1
0
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;
}
Ejemplo n.º 3
0
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);
	}
}
Ejemplo n.º 4
0
/* 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;
}