allow providing TimingData for music, instead of reading from a file; this
saves an unnecessary file read since song data is already in memory
This commit is contained in:
@@ -10,6 +10,7 @@
|
|||||||
#include "PrefsManager.h"
|
#include "PrefsManager.h"
|
||||||
#include "RageDisplay.h"
|
#include "RageDisplay.h"
|
||||||
#include "AnnouncerManager.h"
|
#include "AnnouncerManager.h"
|
||||||
|
#include "song.h"
|
||||||
|
|
||||||
GameSoundManager *SOUND = NULL;
|
GameSoundManager *SOUND = NULL;
|
||||||
|
|
||||||
@@ -71,9 +72,14 @@ struct MusicToPlay
|
|||||||
{
|
{
|
||||||
CString file, timing_file;
|
CString file, timing_file;
|
||||||
bool HasTiming;
|
bool HasTiming;
|
||||||
|
TimingData timing_data;
|
||||||
bool force_loop;
|
bool force_loop;
|
||||||
float start_sec, length_sec, fade_len;
|
float start_sec, length_sec, fade_len;
|
||||||
bool align_beat;
|
bool align_beat;
|
||||||
|
MusicToPlay()
|
||||||
|
{
|
||||||
|
HasTiming = false;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
CircBuf<MusicToPlay *> g_MusicsToPlay;
|
CircBuf<MusicToPlay *> g_MusicsToPlay;
|
||||||
|
|
||||||
@@ -99,14 +105,11 @@ CHECKPOINT;
|
|||||||
NewMusic->m_Timing = g_Playing->m_Timing;
|
NewMusic->m_Timing = g_Playing->m_Timing;
|
||||||
CHECKPOINT;
|
CHECKPOINT;
|
||||||
|
|
||||||
/* See if we can find timing data. */
|
/* See if we can find timing data, if it's not already loaded. */
|
||||||
ToPlay.HasTiming = false;
|
if( !ToPlay.HasTiming && IsAFile(ToPlay.timing_file) )
|
||||||
CHECKPOINT;
|
|
||||||
|
|
||||||
if( IsAFile(ToPlay.timing_file) )
|
|
||||||
{
|
{
|
||||||
LOG->Trace("Found '%s'", ToPlay.timing_file.c_str());
|
LOG->Trace("Found '%s'", ToPlay.timing_file.c_str());
|
||||||
if( SMLoader::LoadTimingFromFile( ToPlay.timing_file, NewMusic->m_NewTiming ) )
|
if( SMLoader::LoadTimingFromFile( ToPlay.timing_file, ToPlay.timing_data ) )
|
||||||
ToPlay.HasTiming = true;
|
ToPlay.HasTiming = true;
|
||||||
}
|
}
|
||||||
CHECKPOINT;
|
CHECKPOINT;
|
||||||
@@ -192,6 +195,8 @@ CHECKPOINT;
|
|||||||
L.Unlock();
|
L.Unlock();
|
||||||
{
|
{
|
||||||
NewMusic->m_HasTiming = ToPlay.HasTiming;
|
NewMusic->m_HasTiming = ToPlay.HasTiming;
|
||||||
|
if( ToPlay.HasTiming )
|
||||||
|
NewMusic->m_NewTiming = ToPlay.timing_data;
|
||||||
NewMusic->m_TimingDelayed = true;
|
NewMusic->m_TimingDelayed = true;
|
||||||
NewMusic->m_Music->Load( ToPlay.file, false );
|
NewMusic->m_Music->Load( ToPlay.file, false );
|
||||||
|
|
||||||
@@ -483,6 +488,32 @@ void GameSoundManager::PlayMusic( const CString &file, const CString &timing_fil
|
|||||||
StartQueuedSounds();
|
StartQueuedSounds();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameSoundManager::PlayMusic( const CString &file, TimingData *pTiming, bool force_loop, float start_sec, float length_sec, float fade_len, bool align_beat )
|
||||||
|
{
|
||||||
|
MusicToPlay *ToPlay = new MusicToPlay;
|
||||||
|
|
||||||
|
|
||||||
|
ToPlay->file = file;
|
||||||
|
if( pTiming )
|
||||||
|
{
|
||||||
|
ToPlay->HasTiming = true;
|
||||||
|
ToPlay->timing_data = *pTiming;
|
||||||
|
}
|
||||||
|
|
||||||
|
ToPlay->force_loop = force_loop;
|
||||||
|
ToPlay->start_sec = start_sec;
|
||||||
|
ToPlay->length_sec = length_sec;
|
||||||
|
ToPlay->fade_len = fade_len;
|
||||||
|
ToPlay->align_beat = align_beat;
|
||||||
|
|
||||||
|
/* Add the MusicToPlay to the g_MusicsToPlay queue. */
|
||||||
|
if( !g_MusicsToPlay.write( &ToPlay, 1 ) )
|
||||||
|
delete ToPlay;
|
||||||
|
|
||||||
|
if( !g_ThreadedMusicStart )
|
||||||
|
StartQueuedSounds();
|
||||||
|
}
|
||||||
|
|
||||||
void GameSoundManager::HandleSongTimer( bool on )
|
void GameSoundManager::HandleSongTimer( bool on )
|
||||||
{
|
{
|
||||||
LockMut( *g_Mutex );
|
LockMut( *g_Mutex );
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ public:
|
|||||||
|
|
||||||
void PlayMusic( const CString &file, bool force_loop = false, float start_sec = 0, float length_sec = -1, float fade_len = 0, bool align_beat = true ) { PlayMusic( file, "", force_loop, start_sec, length_sec, fade_len, align_beat ); }
|
void PlayMusic( const CString &file, bool force_loop = false, float start_sec = 0, float length_sec = -1, float fade_len = 0, bool align_beat = true ) { PlayMusic( file, "", force_loop, start_sec, length_sec, fade_len, align_beat ); }
|
||||||
void PlayMusic( const CString &file, const CString &timing_file, bool force_loop = false, float start_sec = 0, float length_sec = -1, float fade_len = 0, bool align_beat = true );
|
void PlayMusic( const CString &file, const CString &timing_file, bool force_loop = false, float start_sec = 0, float length_sec = -1, float fade_len = 0, bool align_beat = true );
|
||||||
|
void PlayMusic( const CString &file, TimingData *pTiming, bool force_loop = false, float start_sec = 0, float length_sec = -1, float fade_len = 0, bool align_beat = true );
|
||||||
void StopMusic() { PlayMusic(""); }
|
void StopMusic() { PlayMusic(""); }
|
||||||
CString GetMusicPath() const;
|
CString GetMusicPath() const;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user