From 79bc52d8704cbed0cc3c046d9d92175059973b0a Mon Sep 17 00:00:00 2001 From: aj_genius Date: Sat, 31 Jan 2004 13:02:53 +0000 Subject: [PATCH] Added Streaming code too version and save state, and update GUI on load --- .../DiskWriterPlugin/DiskWriterPlugin.C | 54 +++++++++ .../DiskWriterPlugin/DiskWriterPlugin.h | 9 +- .../DiskWriterPlugin/DiskWriterPluginGUI.C | 109 +++++++++++------- .../DiskWriterPlugin/DiskWriterPluginGUI.h | 38 +++--- 4 files changed, 151 insertions(+), 59 deletions(-) diff --git a/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPlugin.C b/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPlugin.C index b875d46..d949c54 100644 --- a/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPlugin.C +++ b/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPlugin.C @@ -85,6 +85,8 @@ DiskWriterPlugin::DiskWriterPlugin() m_GUIArgs.Recording = false; m_GUIArgs.TimeRecorded = 0; + m_Version = 2; + m_AudioCH->RegisterData("Filename",ChannelHandler::INPUT,m_GUIArgs.Name,256); m_AudioCH->Register("BitsPerSample",&m_GUIArgs.BitsPerSample,ChannelHandler::INPUT); m_AudioCH->Register("Stereo",&m_GUIArgs.Stereo,ChannelHandler::INPUT); @@ -154,3 +156,55 @@ void DiskWriterPlugin::ExecuteCommands() } } } + +void DiskWriterPlugin::StreamOut (ostream &s) +{ + s << m_Version << " " << m_GUIArgs.BitsPerSample << " " << m_GUIArgs.Stereo << " "; +} + +void DiskWriterPlugin::StreamIn (istream &s) +{ + char Test; + int Version, BitsPerSample, Stereo; + + //originally DiskWriter had NO streaming code whatsover + // so to test if this is an old patch we must + // read ahead and find out what the first char + // of the next line is + + s.seekg (2, ios_base::cur );//skip to next line + Test = s.peek();//peek first char + s.seekg (-2, ios_base::cur );//jump back to prior line + + //This test works because if the char + // of the next line isn't a version number + // it will only be 'D', ' ', #13, or '-' + if ( (Test >= '0') && (Test <= '9') ) + { + s >> Version; + } + else + { + //No Version, so use Version 1 + Version = 1; + } + + switch (Version) + { + case 2: + { + s >> BitsPerSample >> Stereo; + m_GUIArgs.BitsPerSample = BitsPerSample; + m_GUIArgs.Stereo = Stereo; + } + break; + + case 1: + { + //use original fixed defaults + m_GUIArgs.BitsPerSample = 16; + m_GUIArgs.Stereo = true; + } + break; + } +} diff --git a/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPlugin.h b/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPlugin.h index d00639e..fd0171e 100644 --- a/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPlugin.h +++ b/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPlugin.h @@ -33,8 +33,12 @@ public: virtual SpiralGUIType* CreateGUI(); virtual void Execute(); virtual void ExecuteCommands(); - virtual void StreamOut(std::ostream &s) {} - virtual void StreamIn(std::istream &s) {} + + virtual void StreamOut(std::ostream &s); + virtual void StreamIn(std::istream &s); + + int GetBitsPerSample() { return m_GUIArgs.BitsPerSample; } + bool GetStereo() { return m_GUIArgs.Stereo; } enum GUICommands {NONE,OPENWAV,CLOSEWAV,RECORD,STOP}; struct GUIArgs @@ -48,6 +52,7 @@ public: private: GUIArgs m_GUIArgs; + int m_Version; WavFile m_Wav; }; diff --git a/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPluginGUI.C b/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPluginGUI.C index 95cacd4..63b0b52 100644 --- a/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPluginGUI.C +++ b/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPluginGUI.C @@ -29,17 +29,17 @@ SpiralPluginGUI(w,h,o,ch) m_16bits->type (FL_RADIO_BUTTON); m_16bits->labelsize(10); m_16bits->set(); - m_16bits->callback((Fl_Callback*)cb_16bits); + m_16bits->callback((Fl_Callback*)cb_16bits, this); m_24bits = new Fl_LED_Button (0, 38, 23, 23, "24bit"); m_24bits->type (FL_RADIO_BUTTON); m_24bits->labelsize(10); - m_24bits->callback((Fl_Callback*)cb_24bits); + m_24bits->callback((Fl_Callback*)cb_24bits, this); m_32bits = new Fl_LED_Button (0, 61, 23, 23, "32bit"); m_32bits->type (FL_RADIO_BUTTON); m_32bits->labelsize(10); - m_32bits->callback((Fl_Callback*)cb_32bits); + m_32bits->callback((Fl_Callback*)cb_32bits, this); // 7 seg displays for (int dis=0; dis<4; dis++) { @@ -55,7 +55,7 @@ SpiralPluginGUI(w,h,o,ch) m_Stereo->type (1); m_Stereo->value (1); m_Stereo->labelsize(12); - m_Stereo->callback((Fl_Callback*)cb_Stereo); + m_Stereo->callback((Fl_Callback*)cb_Stereo, this); Open = new Fl_Button(0, 85, 75, 20, "Open"); Open->type(1); @@ -63,7 +63,7 @@ SpiralPluginGUI(w,h,o,ch) Open->color (Info->GUI_COLOUR); Open->selection_color (Info->GUI_COLOUR); Open->labelsize(10); - Open->callback((Fl_Callback*)cb_Open); + Open->callback((Fl_Callback*)cb_Open, this); Record = new Fl_Button(85, 85, 75, 20, "Record"); Record->type(1); @@ -71,7 +71,7 @@ SpiralPluginGUI(w,h,o,ch) Record->color (Info->GUI_COLOUR); Record->selection_color (Info->GUI_COLOUR); Record->labelsize(10); - Record->callback((Fl_Callback*)cb_Record); + Record->callback((Fl_Callback*)cb_Record, this); end(); } @@ -104,12 +104,45 @@ void DiskWriterPluginGUI::Update() redraw(); } -void DiskWriterPluginGUI::UpdateValues (SpiralPlugin *o) { -} +void DiskWriterPluginGUI::UpdateValues (SpiralPlugin *o) +{ + DiskWriterPlugin* Plugin = (DiskWriterPlugin*)o; + + switch (Plugin->GetBitsPerSample()) + { + case 32 : + { + m_32bits->value(1); + m_24bits->value(0); + m_16bits->value(0); + } + break; + + case 24 : + { + m_32bits->value(0); + m_24bits->value(1); + m_16bits->value(0); + } + break; + + case 16 : + default: + { + m_32bits->value(0); + m_24bits->value(0); + m_16bits->value(1); + } + } + m_Stereo->value(Plugin->GetStereo()); + + redraw(); +} + //// Callbacks //// -inline void DiskWriterPluginGUI::cb_Open_i(Fl_Button* o, void* v) +inline void DiskWriterPluginGUI::cb_Open_i(Fl_Button* o) { if (o->value()) { @@ -134,50 +167,44 @@ inline void DiskWriterPluginGUI::cb_Open_i(Fl_Button* o, void* v) } } -void DiskWriterPluginGUI::cb_Open(Fl_Button* o, void* v) -{ ((DiskWriterPluginGUI*)(o->parent()))->cb_Open_i(o,v); } - -inline void DiskWriterPluginGUI::cb_Record_i(Fl_Button* o, void* v) +inline void DiskWriterPluginGUI::cb_Record_i(Fl_Button* o) { - if (o->value()) m_GUICH->SetCommand(DiskWriterPlugin::RECORD); - else m_GUICH->SetCommand(DiskWriterPlugin::STOP); + if (o->value()) + { + m_GUICH->SetCommand(DiskWriterPlugin::RECORD); + } + else + { + m_GUICH->SetCommand(DiskWriterPlugin::STOP); + } } -void DiskWriterPluginGUI::cb_Record(Fl_Button* o, void* v) -{ ((DiskWriterPluginGUI*)(o->parent()))->cb_Record_i(o,v); } -inline void DiskWriterPluginGUI::cb_16bits_i(Fl_Button* o, void* v) +inline void DiskWriterPluginGUI::cb_16bits_i(Fl_Button* o) { - m_GUICH->Set("BitsPerSample",16); + m_GUICH->Set("BitsPerSample",16); } -void DiskWriterPluginGUI::cb_16bits(Fl_Button* o, void* v) -{ ((DiskWriterPluginGUI*)(o->parent()))->cb_16bits_i(o,v); } -inline void DiskWriterPluginGUI::cb_24bits_i(Fl_Button* o, void* v) +inline void DiskWriterPluginGUI::cb_24bits_i(Fl_Button* o) { - m_GUICH->Set("BitsPerSample",24); + m_GUICH->Set("BitsPerSample",24); } -void DiskWriterPluginGUI::cb_24bits(Fl_Button* o, void* v) -{ ((DiskWriterPluginGUI*)(o->parent()))->cb_24bits_i(o,v); } -inline void DiskWriterPluginGUI::cb_32bits_i(Fl_Button* o, void* v) +inline void DiskWriterPluginGUI::cb_32bits_i(Fl_Button* o) { - m_GUICH->Set("BitsPerSample",32); + m_GUICH->Set("BitsPerSample",32); } -void DiskWriterPluginGUI::cb_32bits(Fl_Button* o, void* v) -{ ((DiskWriterPluginGUI*)(o->parent()))->cb_32bits_i(o,v); } -inline void DiskWriterPluginGUI::cb_Stereo_i(Fl_Button* o, void* v) +inline void DiskWriterPluginGUI::cb_Stereo_i(Fl_Button* o) { - m_GUICH->Set("Stereo",o->value()); + m_GUICH->Set("Stereo",o->value()); } -void DiskWriterPluginGUI::cb_Stereo(Fl_Button* o, void* v) -{ ((DiskWriterPluginGUI*)(o->parent()))->cb_Stereo_i(o,v); } - -const string DiskWriterPluginGUI::GetHelpText(const string &loc){ - return string("") - + "One way of recording your creations to disk. First open a file\n" - + "you wish to save to, then hit record to start recording.\n" - + "You are able to stop and restart recording without closing the\n" - + "file, which should make life a little easier if you are doing\n" - + "things like recording lots of little samples."; + +const string DiskWriterPluginGUI::GetHelpText(const string &loc) +{ + return string("") + + "One way of recording your creations to disk. First open a file\n" + + "you wish to save to, then hit record to start recording.\n" + + "You are able to stop and restart recording without closing the\n" + + "file, which should make life a little easier if you are doing\n" + + "things like recording lots of little samples."; } diff --git a/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPluginGUI.h b/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPluginGUI.h index 50deabc..5856eea 100644 --- a/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPluginGUI.h +++ b/SpiralSound/Plugins/DiskWriterPlugin/DiskWriterPluginGUI.h @@ -52,22 +52,28 @@ private: Fl_SevenSeg *m_Display[4]; - //// Callbacks //// - - inline void cb_Record_i(Fl_Button* o, void* v); - static void cb_Record(Fl_Button* o, void* v); - inline void cb_Open_i(Fl_Button* o, void* v); - static void cb_Open(Fl_Button* o, void* v); - - inline void cb_16bits_i(Fl_Button* o, void* v); - static void cb_16bits(Fl_Button* o, void* v); - inline void cb_24bits_i(Fl_Button* o, void* v); - static void cb_24bits(Fl_Button* o, void* v); - inline void cb_32bits_i(Fl_Button* o, void* v); - static void cb_32bits(Fl_Button* o, void* v); - - inline void cb_Stereo_i(Fl_Button* o, void* v); - static void cb_Stereo(Fl_Button* o, void* v); + + //// Inline Callbacks //// + + inline void cb_Record_i(Fl_Button* o); + inline void cb_Open_i(Fl_Button* o); + + inline void cb_16bits_i(Fl_Button* o); + inline void cb_24bits_i(Fl_Button* o); + inline void cb_32bits_i(Fl_Button* o); + + inline void cb_Stereo_i(Fl_Button* o); + + + //// Static Callbacks //// + static void cb_Record(Fl_Button* o, DiskWriterPluginGUI* plugin) { plugin->cb_Record_i(o); } + static void cb_Open (Fl_Button* o, DiskWriterPluginGUI* plugin) { plugin->cb_Open_i(o); } + + static void cb_16bits(Fl_Button* o, DiskWriterPluginGUI* plugin) { plugin->cb_16bits_i(o); } + static void cb_24bits(Fl_Button* o, DiskWriterPluginGUI* plugin) { plugin->cb_24bits_i(o); } + static void cb_32bits(Fl_Button* o, DiskWriterPluginGUI* plugin) { plugin->cb_32bits_i(o); } + + static void cb_Stereo(Fl_Button* o, DiskWriterPluginGUI* plugin) { plugin->cb_Stereo_i(o); } }; #endif