From 655cfea10d2b45fd8c3816d453539d337e2d4e10 Mon Sep 17 00:00:00 2001 From: waxfrenzy Date: Fri, 12 Sep 2003 16:10:56 +0000 Subject: [PATCH] Fixed mono wav trouble in StreamPlugin (RiffWav Seek+LoadChunk) --- .../Plugins/StreamPlugin/StreamPlugin.C | 12 +-- SpiralSound/RiffWav.C | 96 ++++++++----------- 2 files changed, 45 insertions(+), 63 deletions(-) diff --git a/SpiralSound/Plugins/StreamPlugin/StreamPlugin.C b/SpiralSound/Plugins/StreamPlugin/StreamPlugin.C index 8b14479..0d7b403 100644 --- a/SpiralSound/Plugins/StreamPlugin/StreamPlugin.C +++ b/SpiralSound/Plugins/StreamPlugin/StreamPlugin.C @@ -117,10 +117,10 @@ void StreamPlugin::Execute() { FinTrig = m_StreamPos < 0; if (FinTrig) { m_StreamPos = m_File.GetSize() - m_SampleSize; - m_GlobalPos = m_StreamPos; - } + m_GlobalPos = m_StreamPos; + } m_File.SeekToChunk (m_StreamPos); - m_File.LoadChunk (m_SampleSize, m_SampleL, m_SampleR); + m_File.LoadChunk (m_SampleSize, m_SampleL, m_SampleR); } else if (m_Pos >= m_SampleSize) { m_Pos = 0; @@ -190,7 +190,7 @@ void StreamPlugin::OpenStream (void) { m_Pitch = m_SampleRate / (float)m_HostInfo->SAMPLERATE; if (m_File.IsStereo ()) { m_Pitch *= 2; - m_GUIArgs.MaxTime = GetLength(); + m_GUIArgs.MaxTime = GetLength(); } else m_GUIArgs.MaxTime = GetLength() / 2; } @@ -230,7 +230,3 @@ void StreamPlugin::StreamIn(istream &s) { s >> m_GlobalPos; s >> m_Pitch; } - - - - diff --git a/SpiralSound/RiffWav.C b/SpiralSound/RiffWav.C index 587a14d..fdabd25 100644 --- a/SpiralSound/RiffWav.C +++ b/SpiralSound/RiffWav.C @@ -27,7 +27,7 @@ #include #include -#define TRACE_OUT +//#define TRACE_OUT using namespace std; @@ -96,18 +96,6 @@ int WavFile::Open(string FileName, Mode mode, Channels channels) m_DataHeader.DataLengthBytes=0; - #ifdef TRACE_OUT - cerr<1) // mix the channels into a mono buffer + if (m_Header.FmtChannels>1) // mix the channels into a mono buffer { - #ifdef TRACE_OUT + #ifdef TRACE_OUT cerr<<"WavFile::Load - Channels = "<1) // untangle the interleaved data + int c = m_Header.FmtChannels; + int SizeBytes = NumSamples * 2 * c; // 2 bytes per sample per channel + short *TempBuf = new short[NumSamples * c]; + + if (SizeBytes!=(int)fread(TempBuf,1,SizeBytes,m_Stream)) { - int SizeBytes=NumSamples*4; // stereo,16bit - short *TempBuf = new short[NumSamples*2]; - if (SizeBytes!=(int)fread(TempBuf,1,SizeBytes,m_Stream)) - { - cerr<<"WavFile: Read chunk error"<