From 7bf9f6f89caa0df5f8d1497a724be8cc2c28406d Mon Sep 17 00:00:00 2001 From: aj_genius Date: Fri, 12 Dec 2003 03:16:14 +0000 Subject: [PATCH] finished libsndfile support and removed references to RiffWav in plugins that don't use it. --- .../DiskWriterPlugin/DiskWriterPlugin.C | 8 +- .../Plugins/DiskWriterPlugin/Makefile.in | 2 +- SpiralSound/Plugins/JackPlugin/JackPlugin.h | 1 - SpiralSound/Plugins/JackPlugin/JackPlugin.pro | 2 - SpiralSound/Plugins/JackPlugin/Makefile.in | 9 - .../Plugins/JoystickPlugin/JoystickPlugin.pro | 2 - SpiralSound/Plugins/MatrixPlugin/Makefile.in | 1 - .../Plugins/MatrixPlugin/MatrixPlugin.C | 1 - .../PoshSamplerPlugin/PoshSamplerPlugin.C | 51 ---- SpiralSound/Plugins/SeqPlugin/Makefile.in | 8 - SpiralSound/Plugins/SeqPlugin/SeqPlugin.C | 1 - SpiralSound/Plugins/SeqPlugin/SeqPlugin.pro | 2 - .../Plugins/SequencerPlugin/Makefile.in | 8 - .../Plugins/SequencerPlugin/SequencerPlugin.C | 1 - .../SpiralLoopPlugin/SpiralLoopPlugin.C | 52 ---- .../Plugins/StreamPlugin/StreamPlugin.C | 157 ++--------- .../Plugins/StreamPlugin/StreamPlugin.h | 11 - SpiralSound/RiffWav.C | 257 ++++++++++++++++++ SpiralSound/RiffWav.h | 54 +++- 19 files changed, 326 insertions(+), 302 deletions(-) diff --git a/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPlugin.C b/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPlugin.C index dd72122..2c25418 100644 --- a/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPlugin.C +++ b/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPlugin.C @@ -110,9 +110,8 @@ SpiralGUIType *DiskWriterPlugin::CreateGUI() void DiskWriterPlugin::Execute() { - int Bps = m_GUIArgs.BitsPerSample/8; if(m_Recording && m_Wav.IsOpen()) - { + { int on=0; float LeftBuffer[host->BUFSIZE], RightBuffer[host->BUFSIZE]; @@ -123,9 +122,8 @@ void DiskWriterPlugin::Execute() RightBuffer[n]=GetInput(1,n); } - // stereo Bps * bufsize - m_Wav.Save(LeftBuffer, RightBuffer, host->BUFSIZE); - } + m_Wav.Save(LeftBuffer, RightBuffer, host->BUFSIZE); + } } void DiskWriterPlugin::ExecuteCommands() diff --git a/SpiralSound/Plugins/DiskWriterPlugin/Makefile.in b/SpiralSound/Plugins/DiskWriterPlugin/Makefile.in index 9d161a4..d6f6a98 100644 --- a/SpiralSound/Plugins/DiskWriterPlugin/Makefile.in +++ b/SpiralSound/Plugins/DiskWriterPlugin/Makefile.in @@ -11,7 +11,7 @@ CXXFLAGS= @CXXFLAGS@ INCPATH = -I/usr/X11R6/include LINK = g++ -shared LFLAGS = -LIBS = @FLTK_LIBS@ +LIBS = @FLTK_LIBS@ @SFLIBS@ MOC = moc UIC = diff --git a/SpiralSound/Plugins/JackPlugin/JackPlugin.h b/SpiralSound/Plugins/JackPlugin/JackPlugin.h index a43e3b1..9417603 100644 --- a/SpiralSound/Plugins/JackPlugin/JackPlugin.h +++ b/SpiralSound/Plugins/JackPlugin/JackPlugin.h @@ -17,7 +17,6 @@ */ #include "../SpiralPlugin.h" -#include "../../RiffWav.h" #include #include diff --git a/SpiralSound/Plugins/JackPlugin/JackPlugin.pro b/SpiralSound/Plugins/JackPlugin/JackPlugin.pro index 435a826..9cece96 100644 --- a/SpiralSound/Plugins/JackPlugin/JackPlugin.pro +++ b/SpiralSound/Plugins/JackPlugin/JackPlugin.pro @@ -4,7 +4,6 @@ HEADERS = ../SpiralPlugin.h \ ../Widgets/Fl_DragBar.H \ ../Widgets/Fl_LED_Button.H \ ../../Sample.h \ - ../../RiffWav.h \ JackPlugin.h \ JackPluginGUI.h @@ -14,7 +13,6 @@ SOURCES = ../SpiralPlugin.C \ ../Widgets/Fl_DragBar.cxx \ ../Widgets/Fl_LED_Button.cxx \ ../../Sample.C \ - ../../RiffWav.C \ JackPlugin.C \ JackPluginGUI.C diff --git a/SpiralSound/Plugins/JackPlugin/Makefile.in b/SpiralSound/Plugins/JackPlugin/Makefile.in index 335ada2..df61186 100644 --- a/SpiralSound/Plugins/JackPlugin/Makefile.in +++ b/SpiralSound/Plugins/JackPlugin/Makefile.in @@ -46,7 +46,6 @@ HEADERS = JackPlugin.h \ ../SpiralPluginGUI.h \ ../../ChannelHandler.h \ ../../Sample.h \ - ../../RiffWav.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_LED_Button.H \ ../../../GUI/Widgets/SpiralGUI.H @@ -56,7 +55,6 @@ SOURCES = JackPlugin.C \ ../SpiralPluginGUI.C \ ../../ChannelHandler.C \ ../../Sample.C \ - ../../RiffWav.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_LED_Button.cxx \ ../../../GUI/Widgets/SpiralGUI.C @@ -66,7 +64,6 @@ OBJECTS = JackPlugin.o \ ../SpiralPluginGUI.o \ ../../ChannelHandler.o \ ../../Sample.o \ - ../../RiffWav.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_LED_Button.o \ ../../../GUI/Widgets/SpiralGUI.o @@ -152,17 +149,12 @@ install: ../../Sample.o: ../../Sample.C \ ../../Sample.h -../../RiffWav.o: ../../RiffWav.C \ - ../../RiffWav.h \ - ../../Sample.h - JackPlugin.o: JackPlugin.C \ JackPlugin.h \ JackPluginGUI.h \ ../SpiralPluginGUI.h \ ../SpiralPlugin.h \ ../../Sample.h \ - ../../RiffWav.h \ SpiralIcon.xpm JackPluginGUI.o: JackPluginGUI.C \ @@ -171,7 +163,6 @@ JackPluginGUI.o: JackPluginGUI.C \ ../SpiralPluginGUI.h \ ../SpiralPlugin.h \ ../../Sample.h \ - ../../RiffWav.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_LED_Button.H \ ../../../GUI/Widgets/SpiralGUI.H diff --git a/SpiralSound/Plugins/JoystickPlugin/JoystickPlugin.pro b/SpiralSound/Plugins/JoystickPlugin/JoystickPlugin.pro index 63f3a5c..b845cc6 100644 --- a/SpiralSound/Plugins/JoystickPlugin/JoystickPlugin.pro +++ b/SpiralSound/Plugins/JoystickPlugin/JoystickPlugin.pro @@ -3,7 +3,6 @@ HEADERS = ../SpiralPlugin.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_DragBar.H \ ../../Sample.h \ - ../../RiffWav.h \ JoystickPlugin.h \ JoystickPluginGUI.h @@ -12,7 +11,6 @@ SOURCES = ../SpiralPlugin.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ - ../../RiffWav.C \ JoystickPlugin.C \ JoystickPluginGUI.C diff --git a/SpiralSound/Plugins/MatrixPlugin/Makefile.in b/SpiralSound/Plugins/MatrixPlugin/Makefile.in index ed80abc..8db3745 100644 --- a/SpiralSound/Plugins/MatrixPlugin/Makefile.in +++ b/SpiralSound/Plugins/MatrixPlugin/Makefile.in @@ -154,7 +154,6 @@ MatrixPlugin.o: MatrixPlugin.C \ ../SpiralPlugin.h \ ../../Sample.h \ SpiralIcon.xpm \ - ../../RiffWav.h \ ../../NoteTable.h MatrixPluginGUI.o: MatrixPluginGUI.C \ diff --git a/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C b/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C index bb96d63..ba07d7a 100644 --- a/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C +++ b/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C @@ -19,7 +19,6 @@ #include "MatrixPluginGUI.h" #include #include "SpiralIcon.xpm" -#include "../../RiffWav.h" #include "../../NoteTable.h" using namespace std; diff --git a/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.C b/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.C index f746f3c..32111e7 100644 --- a/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.C +++ b/SpiralSound/Plugins/PoshSamplerPlugin/PoshSamplerPlugin.C @@ -399,56 +399,6 @@ void PoshSamplerPlugin::StreamIn(istream &s) void PoshSamplerPlugin::LoadSample(int n, const string &Name) { -#ifdef USE_LIBSNDFILE - SNDFILE *m_FileHandle = NULL; - SF_INFO m_FileInfo; - - m_FileInfo.format = 0; - - m_FileHandle = sf_open (Name.c_str(), SFM_READ, &m_FileInfo); - - if (m_FileHandle == NULL) - { - cerr<<"PoshSamplerPlugin: File ["<Allocate(m_FileInfo.frames); - - float *TempBuf = new float[m_FileInfo.frames*m_FileInfo.channels]; - if (m_FileInfo.frames*m_FileInfo.channels!= sf_read_float(m_FileHandle, TempBuf, m_FileInfo.frames*m_FileInfo.channels)) - { - cerr<<"PoshSamplerPlugin: File ["<1) // mix the channels into a mono buffer - { - for (int j=0; jSet(i,value); - } else - m_SampleVec[i]->Set(i,TempBuf[i]); - - } - - delete[] TempBuf; - - sf_close(m_FileHandle); - m_FileHandle = NULL; - - m_SampleDescVec[n]->SampleRate=m_FileInfo.samplerate; - m_SampleDescVec[n]->Stereo=(m_FileInfo.channels > 1); - m_SampleDescVec[n]->Pitch *= m_SampleDescVec[n]->SampleRate/(float)m_HostInfo->SAMPLERATE; - m_SampleDescVec[n]->LoopEnd=m_SampleVec[n]->GetLength()-1; -#else WavFile Wav; if (Wav.Open(Name,WavFile::READ)) { @@ -460,7 +410,6 @@ void PoshSamplerPlugin::LoadSample(int n, const string &Name) m_SampleDescVec[n]->Pitch *= m_SampleDescVec[n]->SampleRate/(float)m_HostInfo->SAMPLERATE; m_SampleDescVec[n]->LoopEnd=m_SampleVec[n]->GetLength()-1; } -#endif } void PoshSamplerPlugin::SaveSample(int n, const string &Name) diff --git a/SpiralSound/Plugins/SeqPlugin/Makefile.in b/SpiralSound/Plugins/SeqPlugin/Makefile.in index 7496143..a693ec3 100644 --- a/SpiralSound/Plugins/SeqPlugin/Makefile.in +++ b/SpiralSound/Plugins/SeqPlugin/Makefile.in @@ -44,7 +44,6 @@ HEADERS = SeqPlugin.h \ ../SpiralPluginGUI.h \ ../../ChannelHandler.h \ ../../Sample.h \ - ../../RiffWav.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_EventMap.h \ ../Widgets/Fl_SEvent.h \ @@ -55,7 +54,6 @@ SOURCES = SeqPlugin.C \ ../SpiralPluginGUI.C \ ../../ChannelHandler.C \ ../../Sample.C \ - ../../RiffWav.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_EventMap.C \ ../Widgets/Fl_SEvent.C \ @@ -66,7 +64,6 @@ OBJECTS = SeqPlugin.o \ ../SpiralPluginGUI.o \ ../../ChannelHandler.o \ ../../Sample.o \ - ../../RiffWav.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_EventMap.o \ ../Widgets/Fl_SEvent.o \ @@ -158,10 +155,6 @@ install: ../../Sample.o: ../../Sample.C \ ../../Sample.h -../../RiffWav.o: ../../RiffWav.C \ - ../../RiffWav.h \ - ../../Sample.h - SeqPlugin.o: SeqPlugin.C \ SeqPlugin.h \ SeqPluginGUI.h \ @@ -169,7 +162,6 @@ SeqPlugin.o: SeqPlugin.C \ ../SpiralPlugin.h \ ../../Sample.h \ SpiralIcon.xpm \ - ../../RiffWav.h \ ../../NoteTable.h SeqPluginGUI.o: SeqPluginGUI.C \ diff --git a/SpiralSound/Plugins/SeqPlugin/SeqPlugin.C b/SpiralSound/Plugins/SeqPlugin/SeqPlugin.C index da51ac9..aac4590 100644 --- a/SpiralSound/Plugins/SeqPlugin/SeqPlugin.C +++ b/SpiralSound/Plugins/SeqPlugin/SeqPlugin.C @@ -19,7 +19,6 @@ #include "SeqPluginGUI.h" #include #include "SpiralIcon.xpm" -#include "../../RiffWav.h" #include "../../NoteTable.h" using namespace std; diff --git a/SpiralSound/Plugins/SeqPlugin/SeqPlugin.pro b/SpiralSound/Plugins/SeqPlugin/SeqPlugin.pro index b745c3d..60b96c4 100644 --- a/SpiralSound/Plugins/SeqPlugin/SeqPlugin.pro +++ b/SpiralSound/Plugins/SeqPlugin/SeqPlugin.pro @@ -5,7 +5,6 @@ HEADERS = ../SpiralPlugin.h \ ../Widgets/Fl_EventMap.h \ ../Widgets/Fl_SEvent.h \ ../../Sample.h \ - ../../RiffWav.h \ SeqPlugin.h \ SeqPluginGUI.h @@ -16,7 +15,6 @@ SOURCES = ../SpiralPlugin.C \ ../Widgets/Fl_EventMap.C \ ../Widgets/Fl_SEvent.C \ ../../Sample.C \ - ../../RiffWav.C \ SeqPlugin.C \ SeqPluginGUI.C diff --git a/SpiralSound/Plugins/SequencerPlugin/Makefile.in b/SpiralSound/Plugins/SequencerPlugin/Makefile.in index 7a3bf40..01936f2 100644 --- a/SpiralSound/Plugins/SequencerPlugin/Makefile.in +++ b/SpiralSound/Plugins/SequencerPlugin/Makefile.in @@ -44,7 +44,6 @@ HEADERS = SequencerPlugin.h \ ../SpiralPluginGUI.h \ ../../ChannelHandler.h \ ../../Sample.h \ - ../../RiffWav.h \ ../Widgets/Fl_Knob.H \ ../Widgets/Fl_EventMap.h \ ../Widgets/Fl_SEvent.h \ @@ -55,7 +54,6 @@ SOURCES = SequencerPlugin.C \ ../SpiralPluginGUI.C \ ../../ChannelHandler.C \ ../../Sample.C \ - ../../RiffWav.C \ ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_EventMap.C \ ../Widgets/Fl_SEvent.C \ @@ -66,7 +64,6 @@ OBJECTS = SequencerPlugin.o \ ../SpiralPluginGUI.o \ ../../ChannelHandler.o \ ../../Sample.o \ - ../../RiffWav.o \ ../Widgets/Fl_Knob.o \ ../Widgets/Fl_EventMap.o \ ../Widgets/Fl_SEvent.o \ @@ -158,17 +155,12 @@ install: ../../Sample.o: ../../Sample.C \ ../../Sample.h -../../RiffWav.o: ../../RiffWav.C \ - ../../RiffWav.h \ - ../../Sample.h - SequencerPlugin.o: SequencerPlugin.C \ SequencerPlugin.h \ SequencerPluginGUI.h \ ../SpiralPluginGUI.h \ ../SpiralPlugin.h \ ../../Sample.h \ - ../../RiffWav.h \ ../../NoteTable.h \ SpiralIcon.xpm diff --git a/SpiralSound/Plugins/SequencerPlugin/SequencerPlugin.C b/SpiralSound/Plugins/SequencerPlugin/SequencerPlugin.C index cdd8556..4532073 100644 --- a/SpiralSound/Plugins/SequencerPlugin/SequencerPlugin.C +++ b/SpiralSound/Plugins/SequencerPlugin/SequencerPlugin.C @@ -19,7 +19,6 @@ #include "SequencerPluginGUI.h" #include #include "SpiralIcon.xpm" -#include "../../RiffWav.h" #include "../../NoteTable.h" using namespace std; diff --git a/SpiralSound/Plugins/SpiralLoopPlugin/SpiralLoopPlugin.C b/SpiralSound/Plugins/SpiralLoopPlugin/SpiralLoopPlugin.C index bf82dd9..4d870b4 100644 --- a/SpiralSound/Plugins/SpiralLoopPlugin/SpiralLoopPlugin.C +++ b/SpiralSound/Plugins/SpiralLoopPlugin/SpiralLoopPlugin.C @@ -21,12 +21,6 @@ #include "SpiralIcon.xpm" #include "../../NoteTable.h" -#include "../../../config.h" - -#ifdef USE_LIBSNDFILE -#include -#endif - #include "../../RiffWav.h" using namespace std; @@ -275,51 +269,6 @@ void SpiralLoopPlugin::LoadExternalFiles(const string &Dir) void SpiralLoopPlugin::LoadWav(const char *Filename) { -#ifdef USE_LIBSNDFILE - SNDFILE *m_FileHandle = NULL; - SF_INFO m_FileInfo; - - m_FileInfo.format = 0; - - m_FileHandle = sf_open (Filename, SFM_READ, &m_FileInfo); - - if (m_FileHandle == NULL) - { - cerr<<"SpiralLoopPlugin: File ["<1) // mix the channels into a mono buffer - { - for (int j=0; j -#include "../../../config.h" - -#ifdef USE_LIBSNDFILE -#include -#endif - #include "../../RiffWav.h" using namespace std; @@ -60,9 +54,6 @@ string SpiralPlugin_GetGroupName() /////////////////////////////////////////////////////// StreamPlugin::StreamPlugin() : -#ifdef USE_LIBSNDFILE -m_File (NULL), -#endif m_SampleRate (44100), m_SampleSize (256), m_StreamPos (0), @@ -98,11 +89,6 @@ m_Mode(STOPM) StreamPlugin::~StreamPlugin() { -#ifdef USE_LIBSNDFILE - if (m_File) - sf_close(m_File); - m_File = NULL; -#endif } PluginInfo &StreamPlugin::Initialise(const HostInfo *Host) @@ -116,93 +102,6 @@ SpiralGUIType *StreamPlugin::CreateGUI() { } void StreamPlugin::Execute() { -#ifdef USE_LIBSNDFILE - if (m_File) { - for (int n=0; nBUFSIZE; n++) { - bool FinTrig = false; - float CVPitch = GetInput(0, n)*10.0f; - if (GetInput (1, n) > 0) m_Mode = PLAYM; - if (GetInput (2, n) > 0) { - m_Mode = STOPM; - m_Pos = 0; - m_GlobalPos = 0; - m_StreamPos = 0; - } - - bool DoLoadChunk = false; - - if (m_Pos<0) { - m_Pos = m_SampleSize - 1; - m_StreamPos -= m_SampleSize; - FinTrig = m_StreamPos < 0; - if (FinTrig) { - m_StreamPos = m_FileInfo.frames - m_SampleSize; - m_GlobalPos = m_StreamPos; - } - DoLoadChunk = true; - } - else if (m_Pos >= m_SampleSize) { - m_Pos = 0; - m_StreamPos += m_SampleSize; - FinTrig = m_StreamPos >= m_FileInfo.frames; - if (FinTrig) { - m_StreamPos = 0; - m_GlobalPos = 0; - } - DoLoadChunk = true; - } - - if (DoLoadChunk) { - if ((m_FileInfo.frames - m_StreamPos) < 256) - m_SampleSize = m_FileInfo.frames - m_StreamPos; - else - m_SampleSize = 256; - - - if (sf_seek(m_File, m_StreamPos, SEEK_SET)==-1) - { - cerr<<"StreamPlugin: File ["<1) - m_SampleR.Set(n,TempBuf[n*m_FileInfo.channels+1]); - } - } - - delete[] TempBuf; - } - - if (FinTrig) SetOutput (2, n, 1); - else SetOutput (2, n, 0); - if (m_Mode==PLAYM) { - SetOutput (0, n, m_SampleL[m_Pos] * m_GUIArgs.Volume); - SetOutput (1, n, m_SampleR[m_Pos] * m_GUIArgs.Volume); - m_Pos += m_GUIArgs.PitchMod + CVPitch; - m_GlobalPos += m_GUIArgs.PitchMod + CVPitch; - } - else { - SetOutput (0, n, 0); - SetOutput (1, n, 0); - } - } - m_GUIArgs.TimeOut = m_GlobalPos / (float)m_SampleRate; - m_GUIArgs.PlayOut = m_Mode==PLAYM; - } -#else if (m_File.IsOpen()) { for (int n=0; nBUFSIZE; n++) { bool FinTrig = false; @@ -214,7 +113,8 @@ void StreamPlugin::Execute() { m_GlobalPos = 0; m_StreamPos = 0; } - if (m_Pos<0) { + + if (m_Pos<0) { m_Pos = m_SampleSize - 1; m_StreamPos -= m_SampleSize; FinTrig = m_StreamPos < 0; @@ -223,6 +123,12 @@ void StreamPlugin::Execute() { m_GlobalPos = m_StreamPos; } m_File.SeekToChunk (m_StreamPos); + + if ((m_File.GetSize() - m_StreamPos) < 256) + m_SampleSize = m_File.GetSize() - m_StreamPos; + else + m_SampleSize = 256; + m_File.LoadChunk (m_SampleSize, m_SampleL, m_SampleR); } else if (m_Pos >= m_SampleSize) { @@ -234,8 +140,15 @@ void StreamPlugin::Execute() { m_GlobalPos = 0; } m_File.SeekToChunk (m_StreamPos); + + if ((m_File.GetSize() - m_StreamPos) < 256) + m_SampleSize = m_File.GetSize() - m_StreamPos; + else + m_SampleSize = 256; + m_File.LoadChunk (m_SampleSize, m_SampleL, m_SampleR); } + if (FinTrig) SetOutput (2, n, 1); else SetOutput (2, n, 0); if (m_Mode==PLAYM) { @@ -252,7 +165,6 @@ void StreamPlugin::Execute() { m_GUIArgs.TimeOut = m_GlobalPos / (float)m_SampleRate; m_GUIArgs.PlayOut = m_Mode==PLAYM; } -#endif } void StreamPlugin::ExecuteCommands() { @@ -287,59 +199,28 @@ void StreamPlugin::SetTime (void) { void StreamPlugin::OpenStream (void) { m_StreamPos = 0; m_GlobalPos = 0; -#ifdef USE_LIBSNDFILE - m_FileInfo.format = 0; - - if (m_File != NULL) - { - sf_close(m_File); - m_File = NULL; - } - - m_File = sf_open (m_GUIArgs.FileName, SFM_READ, &m_FileInfo); - if (m_File == NULL) - { - cerr<<"StreamPlugin: File ["<SAMPLERATE; - if (m_FileInfo.channels>1) { - m_Pitch *= 2; - m_GUIArgs.MaxTime = GetLength(); - } - else m_GUIArgs.MaxTime = GetLength() / 2; -#else - if (m_File.IsOpen ()) m_File.Close (); - m_File.Open (m_GUIArgs.FileName, WavFile::READ); - m_SampleL.Allocate (m_SampleSize); - m_SampleR.Allocate (m_SampleSize); m_Pitch = m_SampleRate / (float)m_HostInfo->SAMPLERATE; if (m_File.IsStereo ()) { m_Pitch *= 2; m_GUIArgs.MaxTime = GetLength(); } else m_GUIArgs.MaxTime = GetLength() / 2; -#endif } float StreamPlugin::GetLength (void) { -#ifdef USE_LIBSNDFILE - if (m_FileInfo.channels>1) return m_FileInfo.frames / (float)m_FileInfo.samplerate; - else return m_FileInfo.frames / (float)m_FileInfo.samplerate * 2; -#else if (m_File.IsStereo()) return m_File.GetSize() / (float)m_File.GetSamplerate (); else return m_File.GetSize() / (float)m_File.GetSamplerate () * 2; -#endif } void StreamPlugin::StreamOut (ostream &s) { diff --git a/SpiralSound/Plugins/StreamPlugin/StreamPlugin.h b/SpiralSound/Plugins/StreamPlugin/StreamPlugin.h index 85dde08..e5711cc 100644 --- a/SpiralSound/Plugins/StreamPlugin/StreamPlugin.h +++ b/SpiralSound/Plugins/StreamPlugin/StreamPlugin.h @@ -20,12 +20,6 @@ #include "../../RiffWav.h" #include -#include "../../../config.h" - -#ifdef USE_LIBSNDFILE -#include -#endif - #ifndef StreamPLUGIN #define StreamPLUGIN @@ -45,12 +39,7 @@ class StreamPlugin : public SpiralPlugin { float GetVolume (void) { return m_GUIArgs.Volume; } float GetPitch (void) { return m_GUIArgs.PitchMod; } private: -#ifdef USE_LIBSNDFILE - SNDFILE *m_File; - SF_INFO m_FileInfo; -#else WavFile m_File; -#endif Sample m_SampleL, m_SampleR; int m_SampleRate, m_SampleSize, m_StreamPos; float m_GlobalPos, m_Pitch, m_SamplePos, m_Pos; diff --git a/SpiralSound/RiffWav.C b/SpiralSound/RiffWav.C index d952ec7..418339d 100644 --- a/SpiralSound/RiffWav.C +++ b/SpiralSound/RiffWav.C @@ -31,6 +31,7 @@ using namespace std; +#ifndef USE_LIBSNDFILE const int HEADERLEN = (4+24+8); #if __BYTE_ORDER == BIG_ENDIAN @@ -87,9 +88,59 @@ static void write_float_as_32bit_float(float v, FILE *file) SWAPFLOAT(v); fwrite(((char*) &v),4,1,file); } +#endif int WavFile::Open(string FileName, Mode mode, Channels channels) { +#ifdef USE_LIBSNDFILE + if (m_FileHandle!=NULL) + { + cerr<<"WavFile: File already open ["<1) // mix the channels into a mono buffer + { + #ifdef TRACE_OUT + cerr<<"WavFile::Load - Channels = "<1) // mix the channels into a mono buffer { #ifdef TRACE_OUT @@ -425,10 +601,50 @@ int WavFile::Load(Sample &data) } return 1; +#endif } int WavFile::Load(short *data) { +#ifdef USE_LIBSNDFILE + if (m_FileInfo.channels>1) // mix the channels into a mono buffer + { + #ifdef TRACE_OUT + cerr<<"WavFile::Load - Channels = "<1) // mix the channels into a mono buffer { #ifdef TRACE_OUT @@ -480,10 +696,23 @@ int WavFile::Load(short *data) } return 0; +#endif } int WavFile::SeekToChunk(int Pos) { +#ifdef USE_LIBSNDFILE + if (m_CurSeekPos==Pos) return 0; + m_CurSeekPos=Pos; + + if (sf_seek(m_FileHandle, m_CurSeekPos, SEEK_SET)==-1) + { + cerr<<"WavFile::SeekToChunk: Seek error"<1) + rdata.Set(n,TempBuf[n*m_FileInfo.channels+1]); + } + } + + delete[] TempBuf; + + return 1; +#else int c = m_Header.FmtChannels; int SizeBytes = NumSamples * 2 * c; // 2 bytes per sample per channel short *TempBuf = new short[NumSamples * c]; @@ -533,4 +789,5 @@ int WavFile::LoadChunk(int NumSamples, Sample &ldata, Sample &rdata) delete[] TempBuf; return 1; +#endif } diff --git a/SpiralSound/RiffWav.h b/SpiralSound/RiffWav.h index b48514c..4d974c5 100644 --- a/SpiralSound/RiffWav.h +++ b/SpiralSound/RiffWav.h @@ -16,14 +16,21 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include - #ifndef WAVFILE #define WAVFILE +#include + #include #include "Sample.h" +#include "../config.h" + +#ifdef USE_LIBSNDFILE +#include +#endif + +#ifndef USE_LIBSNDFILE #if __APPLE__ // this is the traditional way of setting 2 bytes alignment // else the apple compiler might use 4, or even 8 @@ -55,38 +62,68 @@ struct DataHeader #if __APPLE__ #pragma options align=reset #endif +#endif class WavFile { public: +#ifdef USE_LIBSNDFILE + WavFile() : m_FileHandle(NULL), m_BitsPerSample(16), m_CurSeekPos(0) {m_FileInfo.samplerate = 44100; m_FileInfo.format = 0;} +#else WavFile() : m_Stream(NULL), m_Samplerate(44100), m_BitsPerSample(16), m_DataStart(0) {} +#endif ~WavFile() {Close();} enum Mode{READ,WRITE}; enum Channels{MONO,STEREO}; - int Open(std::string FileName, Mode mode, Channels channels=MONO); + int Open(std::string FileName, Mode mode=READ, Channels channels=MONO); int Close(); + int Save(Sample &data); - int Load(Sample &data); int Save(short *data, int Bytes); - int Load(short *data); - int Save(float *left, float *right, int Length); + + int Load(Sample &data); + int Load(short *data); int SeekToChunk(int Pos); int LoadChunk(int NumSamples, Sample &ldata, Sample &rdata); + +#ifdef USE_LIBSNDFILE + int GetSize() {return m_FileInfo.frames;} // in samples + + void SetSamplerate(int s) { m_FileInfo.samplerate=s; } + int GetSamplerate() { return m_FileInfo.samplerate; } + + void SetBitsPerSample(int s) { m_BitsPerSample=s; } + int GetBitsPerSample() { return m_BitsPerSample; } + + bool IsStereo() { return (m_FileInfo.channels > 1); } + bool IsOpen() { return m_FileHandle!=NULL; } + bool Recording() {return (m_FileHandle!=NULL);} +#else int GetSize(); // in samples - bool Recording() {return (m_Stream!=NULL);} + void SetSamplerate(int s) { m_Samplerate=s; } int GetSamplerate() { return m_Header.FmtSamplerate; } + void SetBitsPerSample(int s) { m_BitsPerSample=s; } int GetBitsPerSample() { return m_Header.FmtBitsPerSample; } + bool IsStereo() { return (m_Header.FmtChannels==2); } bool IsOpen() { return m_Stream!=NULL; } - + bool Recording() {return (m_Stream!=NULL);} +#endif private: +#ifdef USE_LIBSNDFILE + SNDFILE *m_FileHandle; + SF_INFO m_FileInfo; + + int m_BitsPerSample; + sf_count_t m_CurSeekPos; +#else FILE *m_Stream; int m_Samplerate; int m_BitsPerSample; @@ -96,6 +133,7 @@ private: CanonicalWavHeader m_Header; DataHeader m_DataHeader; +#endif }; #endif