Changeset - r22911:fcd57e709c23
[Not reviewed]
master
0 4 0
Niels Martin Hansen - 6 years ago 2018-06-06 18:58:06
nielsm@indvikleren.dk
Change: Improved looping of title song
4 files changed with 8 insertions and 6 deletions:
0 comments (0 inline, 0 general)
src/base_media_base.h
Show inline comments
 
@@ -298,12 +298,13 @@ enum MusicTrackType {
 
struct MusicSongInfo {
 
	char songname[32];       ///< name of song displayed in UI
 
	byte tracknr;            ///< track number of song displayed in UI
 
	const char *filename;    ///< file on disk containing song (when used in MusicSet class, this pointer is owned by MD5File object for the file)
 
	MusicTrackType filetype; ///< decoder required for song file
 
	int cat_index;           ///< entry index in CAT file, for filetype==MTT_MPSMIDI
 
	bool loop;               ///< song should play in a tight loop if possible, never ending
 
	int override_start;      ///< MIDI ticks to skip over in beginning
 
	int override_end;        ///< MIDI tick to end the song at (0 if no override)
 
};
 

	
 
/** All data of a music set. */
 
struct MusicSet : BaseSet<MusicSet, NUM_SONGS_AVAILABLE, false> {
src/music/dmusic.cpp
Show inline comments
 
@@ -829,14 +829,14 @@ static void MidiThreadProc(void *)
 
				_buffer->Flush();
 
			}
 

	
 
			/* end? */
 
			if (current_block == current_file.blocks.size()) {
 
				if (current_segment.loop) {
 
					current_block = 0;
 
					clock->GetTime(&playback_start_time);
 
					current_block = current_segment.start_block;
 
					playback_start_time = block_time - current_file.blocks[current_block].realtime * MIDITIME_TO_REFTIME;
 
				} else {
 
					_playback.do_stop = true;
 
				}
 
				next_timeout = 0;
 
			}
 
		}
 
@@ -1234,13 +1234,13 @@ void MusicDriver_DMusic::PlaySong(const 
 
	ThreadMutexLocker lock(_thread_mutex);
 

	
 
	if (!_playback.next_file.LoadSong(song)) return;
 

	
 
	_playback.next_segment.start = song.override_start;
 
	_playback.next_segment.end = song.override_end;
 
	_playback.next_segment.loop = false;
 
	_playback.next_segment.loop = song.loop;
 

	
 
	_playback.do_start = true;
 
	SetEvent(_thread_event);
 
}
 

	
 

	
src/music/win32_m.cpp
Show inline comments
 
@@ -299,14 +299,14 @@ void CALLBACK TimerCallback(UINT uTimerI
 
		_midi.current_block++;
 
	}
 

	
 
	/* end? */
 
	if (_midi.current_block == _midi.current_file.blocks.size()) {
 
		if (_midi.current_segment.loop) {
 
			_midi.current_block = 0;
 
			_midi.playback_start_time = timeGetTime();
 
			_midi.current_block = _midi.current_segment.start_block;
 
			_midi.playback_start_time = timeGetTime() - _midi.current_file.blocks[_midi.current_block].realtime / 1000;
 
		} else {
 
			_midi.do_stop = true;
 
		}
 
	}
 
}
 

	
 
@@ -319,13 +319,13 @@ void MusicDriver_Win32::PlaySong(const M
 
		LeaveCriticalSection(&_midi.lock);
 
		return;
 
	}
 

	
 
	_midi.next_segment.start = song.override_start;
 
	_midi.next_segment.end = song.override_end;
 
	_midi.next_segment.loop = false;
 
	_midi.next_segment.loop = song.loop;
 

	
 
	DEBUG(driver, 2, "Win32-MIDI: PlaySong: setting flag");
 
	_midi.do_stop = _midi.playing;
 
	_midi.do_start = true;
 

	
 
	if (_midi.timer_id == 0) {
src/music_gui.cpp
Show inline comments
 
@@ -188,12 +188,13 @@ static void DoPlaySong()
 
	char filename[MAX_PATH];
 
	MusicSongInfo songinfo = BaseMusic::GetUsedSet()->songinfo[_music_wnd_cursong - 1]; // copy
 
	if (FioFindFullPath(filename, lastof(filename), BASESET_DIR, songinfo.filename) == NULL) {
 
		FioFindFullPath(filename, lastof(filename), OLD_GM_DIR, songinfo.filename);
 
	}
 
	songinfo.filename = filename; // non-owned pointer
 
	songinfo.loop = (_game_mode == GM_MENU) && (_music_wnd_cursong == 1);
 
	MusicDriver::GetInstance()->PlaySong(songinfo);
 
	SetWindowDirty(WC_MUSIC_WINDOW, 0);
 
}
 

	
 
static void DoStopMusic()
 
{
0 comments (0 inline, 0 general)