diff --git a/stepmania/src/RageSound.cpp b/stepmania/src/RageSound.cpp index 98f892c0bb..4e55918e0b 100644 --- a/stepmania/src/RageSound.cpp +++ b/stepmania/src/RageSound.cpp @@ -100,8 +100,6 @@ RageSound::RageSound(const RageSound &cpy) stream.Sample = NULL; original = cpy.original; - full_buf = cpy.full_buf; - big = cpy.big; m_StartSample = cpy.m_StartSample; m_LengthSamples = cpy.m_LengthSamples; StopMode = cpy.StopMode; @@ -112,11 +110,8 @@ RageSound::RageSound(const RageSound &cpy) speed_input_samples = cpy.speed_input_samples; speed_output_samples = cpy.speed_output_samples; - if(big) - { - stream.buf.reserve(internal_buffer_size); - stream.Sample = cpy.stream.Sample->Copy(); - } + stream.buf.reserve(internal_buffer_size); + stream.Sample = cpy.stream.Sample->Copy(); /* Load() won't work on a copy if m_sFilePath is already set, so * copy this down here. */ @@ -136,8 +131,6 @@ void RageSound::Unload() m_sFilePath = ""; stream.buf.clear(); - - full_buf.erase(); } /* This is called upon fatal failure. Replace the sound with silence. */ @@ -146,13 +139,10 @@ void RageSound::Fail(CString reason) delete stream.Sample; stream.Sample = NULL; - big = false; - - full_buf.erase(); - /* XXX untested + /* XXX * full_buf.append(0, 1024); should be OK, but VC6 is broken ... */ basic_string empty(1024, 0); - full_buf.insert(full_buf.end(), empty.begin(), empty.end()); +// full_buf.insert(full_buf.end(), empty.begin(), empty.end()); position = 0; LOG->Warn("Decoding %s failed: %s", @@ -181,9 +171,7 @@ bool RageSound::Load(CString sSoundFilePath, int precache) RageException::Throw( "RageSoundManager::RageSoundManager: error opening sound %s: %s", sSoundFilePath.GetString(), NewSample->GetError().c_str()); - /* Try to decode into full_buf. */ - big = true; - + /* Try to precache. */ if(precache) { SoundReader_Preload *Preload = new SoundReader_Preload; @@ -196,7 +184,6 @@ bool RageSound::Load(CString sSoundFilePath, int precache) delete Preload; } stream.Sample = NewSample; -// stream.Sample->SetPosition_Accurate(0); return true; } @@ -220,21 +207,14 @@ void RageSound::SetLengthSeconds(float secs) void RageSound::Update(float delta) { - if(playing && big && delta) + if(playing && delta) FillBuf(int(delta * samplerate * samplesize)); } /* Return the number of bytes available in the input buffer. */ int RageSound::Bytes_Available() const { - if(big) - return stream.buf.size(); - - unsigned byte_pos = position * samplesize; /* samples -> bytes */ - if(byte_pos > full_buf.size()) - return 0; /* eof */ - - return full_buf.size() - byte_pos; + return stream.buf.size(); } #include @@ -303,9 +283,6 @@ int RageSound::FillBuf(int bytes) { LockMut(SOUNDMAN->lock); - if(!big) - return 0; /* prebuffer is already fully loaded */ - ASSERT(stream.Sample); bool got_something = false; @@ -381,19 +358,12 @@ int RageSound::GetData(char *buffer, int size) got = min(got, size); if(buffer) memset(buffer, 0, got); - } else if(big) { + } else { /* Feed data out of our streaming buffer. */ ASSERT(stream.Sample); got = min(int(stream.buf.size()), size); if(buffer) stream.buf.read(buffer, got); - } else { - /* Feed data out of our full buffer. */ - int byte_pos = position * samplesize; - got = min(int(full_buf.size())-byte_pos, size); - got = max(got, 0); - if(buffer) - memcpy(buffer, full_buf.data()+byte_pos, got); } return got; @@ -562,22 +532,17 @@ void RageSound::Stop() float RageSound::GetLengthSeconds() { - if(big) { - ASSERT(stream.Sample); - int len = stream.Sample->GetLength(); + ASSERT(stream.Sample); + int len = stream.Sample->GetLength(); - if(len < 0) - { - LOG->Warn("GetLengthSeconds failed on %s: %s", - GetLoadedFilePath().GetString(), stream.Sample->GetError().c_str() ); - return -1; - } - - return len / 1000.f; /* ms -> secs */ - } else { - /* We have the whole file loaded; just return the position. */ - return full_buf.size() / (float(samplerate)*samplesize); + if(len < 0) + { + LOG->Warn("GetLengthSeconds failed on %s: %s", + GetLoadedFilePath().GetString(), stream.Sample->GetError().c_str() ); + return -1; } + + return len / 1000.f; /* ms -> secs */ } float RageSound::GetPositionSeconds() const @@ -685,19 +650,6 @@ bool RageSound::SetPositionSamples( int samples ) int ms = int(float(samples) * 1000.f / samplerate); ms = max(ms, 0); - if(!big) { - /* Just make sure the position is in range. */ - if(position*samplesize < int(full_buf.size())) - return true; - - /* We were told to seek beyond EOF. This could be a truncated file - * or invalid data. Warn about it and jump back to the beginning. */ - LOG->Warn("SetPositionSamples: %i ms is beyond EOF in %s", - ms, GetLoadedFilePath().GetString()); - position = 0; - return false; - } - stream.buf.clear(); ASSERT(stream.Sample); diff --git a/stepmania/src/RageSound.h b/stepmania/src/RageSound.h index 410107af61..bdffe2849c 100644 --- a/stepmania/src/RageSound.h +++ b/stepmania/src/RageSound.h @@ -82,9 +82,6 @@ public: float GetPlaybackRate() const { return float(speed_input_samples) / speed_output_samples; } bool IsPlaying() const { return playing; } CString GetLoadedFilePath() const { return m_sFilePath; } - - /* Query only: */ - bool IsStreaming() const { return big; } private: /* If we were copied from another RageSound, this will point to it; otherwise @@ -98,13 +95,6 @@ private: } stream; int FillBuf(int bytes); - /* These are only used when big == false: */ - basic_string full_buf; - - /* If true, we're streaming data through sample and buf. If false, the entire - * file is pre-loaded into full_buf. */ - bool big; - /* Sound blocks we've sent out recently through GetPCM. We keep track * of each block for the last four calls of GetPCM. */ struct pos_map_t { diff --git a/stepmania/src/RageSoundReader_Preload.cpp b/stepmania/src/RageSoundReader_Preload.cpp index 41fedfe7e1..be31f3a25a 100644 --- a/stepmania/src/RageSoundReader_Preload.cpp +++ b/stepmania/src/RageSoundReader_Preload.cpp @@ -5,6 +5,7 @@ const int channels = 2; const int samplesize = 2 * channels; /* 16-bit */ const int samplerate = 44100; +/* If a sound is smaller than this, we'll load it entirely into memory. */ const int max_prebuf_size = 1024*256; int SoundReader_Preload::total_samples() const diff --git a/stepmania/src/ScreenTestSound.cpp b/stepmania/src/ScreenTestSound.cpp index c71b10dc0d..9d8cc92691 100644 --- a/stepmania/src/ScreenTestSound.cpp +++ b/stepmania/src/ScreenTestSound.cpp @@ -90,7 +90,6 @@ void ScreenTestSound::UpdateText(int n) "%s\n" "%s\n" "(%s)\n" - "%s\n" "%s", n+1, fn.GetString(), s[n].s.IsPlaying()? "Playing":"Stopped", @@ -100,7 +99,6 @@ void ScreenTestSound::UpdateText(int n) "Continue until stopped": "Loop", pos.size()? pos.GetString(): "none playing", - s[n].s.IsStreaming()? "Streaming":"Preloaded", selected == n? "^^^^^^":"" )); }