diff --git a/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPlugin.C b/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPlugin.C index 9161b16..63afb56 100644 --- a/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPlugin.C +++ b/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPlugin.C @@ -122,7 +122,7 @@ void DiskWriterPlugin::Execute() if (t<-1) t=-1; Buffer[on]=lrintf(t*SHRT_MAX); on++; - + t=GetInput(1,n); if (t>1) t=1; if (t<-1) t=-1; @@ -141,12 +141,15 @@ void DiskWriterPlugin::ExecuteCommands() { switch(m_AudioCH->GetCommand()) { - case OPENWAV : + case OPENWAV : + if (m_Wav.GetSamplerate() != GetHostInfo()->SAMPLERATE) { + m_Wav.SetSamplerate(GetHostInfo()->SAMPLERATE); + } m_Wav.Open(m_GUIArgs.Name,WavFile::WRITE, WavFile::STEREO); break; case CLOSEWAV : m_Wav.Close(); break; case RECORD : m_Recording=true; break; - case STOP : m_Recording=false; break; + case STOP : m_Recording=false; break; default : break; } } diff --git a/SpiralSound/RiffWav.C b/SpiralSound/RiffWav.C index c41ff01..587a14d 100644 --- a/SpiralSound/RiffWav.C +++ b/SpiralSound/RiffWav.C @@ -27,7 +27,7 @@ #include #include -//#define TRACE_OUT +#define TRACE_OUT using namespace std; @@ -66,36 +66,48 @@ int WavFile::Open(string FileName, Mode mode, Channels channels) m_Header.RiffName[1]='I'; m_Header.RiffName[2]='F'; m_Header.RiffName[3]='F'; - + m_Header.RiffFileLength=HEADERLEN; // bzzt - wrong - + m_Header.RiffTypeName[0]='W'; m_Header.RiffTypeName[1]='A'; m_Header.RiffTypeName[2]='V'; m_Header.RiffTypeName[3]='E'; - + m_Header.FmtName[0]='f'; m_Header.FmtName[1]='m'; m_Header.FmtName[2]='t'; m_Header.FmtName[3]=' '; - + m_Header.FmtLength=0x00000010; // length of fmt data (16 bytes) m_Header.FmtTag=0x0001; // Format tag: 1 = PCM - if (channels==STEREO) m_Header.FmtChannels=2; - else m_Header.FmtChannels=1; + if (channels==STEREO) m_Header.FmtChannels=2; + else m_Header.FmtChannels=1; m_Header.FmtSamplerate=WavFile::m_Samplerate; - + m_Header.FmtBitsPerSample=16; + m_Header.FmtBlockAlign=m_Header.FmtChannels*m_Header.FmtBitsPerSample/8; m_Header.FmtBytesPerSec=m_Header.FmtSamplerate*m_Header.FmtBlockAlign; - m_Header.FmtBlockAlign=m_Header.FmtChannels*m_Header.FmtBitsPerSample/8; - m_DataHeader.DataName[0]='d'; + m_DataHeader.DataName[0]='d'; m_DataHeader.DataName[1]='a'; m_DataHeader.DataName[2]='t'; m_DataHeader.DataName[3]='a'; - + m_DataHeader.DataLengthBytes=0; - + + #ifdef TRACE_OUT + cerr<16) { fseek(m_Stream,m_Header.FmtLength-16,SEEK_CUR); } - + fread(&m_DataHeader,sizeof(DataHeader),1,m_Stream); SWAPINT(m_DataHeader.DataLengthBytes); - while (m_DataHeader.DataName[0]!='d' || - m_DataHeader.DataName[1]!='a' || - m_DataHeader.DataName[2]!='t' || + while (m_DataHeader.DataName[0]!='d' || + m_DataHeader.DataName[1]!='a' || + m_DataHeader.DataName[2]!='t' || m_DataHeader.DataName[3]!='a') { // crawl through the rest of the propriatory headers // if we need to to try and get to the data header if (feof(m_Stream) || fseek(m_Stream,-(sizeof(DataHeader)-1),SEEK_CUR)==-1) - { - cerr<<"WavFile: File open error, wrong format ["<