X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftags%2Fsynfigstudio_0_61_03%2Fsynfig-studio%2Fsrc%2Fgtkmm%2Faudiocontainer.h;fp=synfig-studio%2Ftags%2Fsynfigstudio_0_61_03%2Fsynfig-studio%2Fsrc%2Fgtkmm%2Faudiocontainer.h;h=e9ff8d8c98c161d7283ccae447e6d62a7fd3d6ac;hb=da707947f2c5d17050f34debe532902971af6f60;hp=0000000000000000000000000000000000000000;hpb=761e5fbff7ec410ef90050e3125dd21cf11182a9;p=synfig.git diff --git a/synfig-studio/tags/synfigstudio_0_61_03/synfig-studio/src/gtkmm/audiocontainer.h b/synfig-studio/tags/synfigstudio_0_61_03/synfig-studio/src/gtkmm/audiocontainer.h new file mode 100644 index 0000000..e9ff8d8 --- /dev/null +++ b/synfig-studio/tags/synfigstudio_0_61_03/synfig-studio/src/gtkmm/audiocontainer.h @@ -0,0 +1,139 @@ +/* === S Y N F I G ========================================================= */ +/*! \file audiocontainer.h +** \brief Sound info header +** +** $Id: audiocontainer.h,v 1.1.1.1 2005/01/07 03:34:35 darco Exp $ +** +** \legal +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** +** This package is free software; you can redistribute it and/or +** modify it under the terms of the GNU General Public License as +** published by the Free Software Foundation; either version 2 of +** the License, or (at your option) any later version. +** +** This package is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +** General Public License for more details. +** \endlegal +*/ +/* ========================================================================= */ + +/* === S T A R T =========================================================== */ + +#ifndef __SYNFIG_AUDIOCONTAINER_H +#define __SYNFIG_AUDIOCONTAINER_H + +/* === H E A D E R S ======================================================= */ +#include + +#include + +#include +#include + +#include + +/* === M A C R O S ========================================================= */ +const float DEF_DISPLAYSAMPLERATE = 400; +/* === T Y P E D E F S ===================================================== */ + +/* === C L A S S E S & S T R U C T S ======================================= */ + +namespace studio { + +class AudioContainer; + +//Note: Might want to abstract something to share data between profile and parent +class AudioProfile : public etl::shared_object +{ +public: + typedef std::vector SampleProfile; + +private: + SampleProfile samples; + double samplerate; //samples / second of the profile + + //reference our parent for any native sound info + etl::loose_handle parent; + +public: //samples interface + + SampleProfile::const_iterator begin() const {return samples.begin();} + SampleProfile::const_iterator end() const {return samples.end();} + + void clear(); + unsigned int size() const {return samples.size();} + + char operator[](int i) const + { + if(i >= 0 && i < (int)samples.size()) return samples[i]; + else return 0; + } + +public: // + + double get_samplerate() const {return samplerate;} + void set_samplerate(double f) {samplerate = f;} + + double get_offset() const; + + etl::handle get_parent() const; + void set_parent(etl::handle i); + friend class AudioContainer; +}; + +/* Audio container actually implements all the cool stuff + Note: May be a bit to monolithic... +*/ +class AudioContainer : public sigc::trackable, public etl::shared_object +{ + etl::handle prof; + + struct AudioImp; + AudioImp *imp; + + bool profilevalid; //this is only half useful + //it makes it so we don't always have to realloc memory when the file switches... + +public: //structors + + AudioContainer(); + ~AudioContainer(); + +public: //accessor interface + void set_offset(const double &s); + double get_offset() const; + +public: //info gather interface + etl::handle get_profile(float samplerate = DEF_DISPLAYSAMPLERATE); + bool get_current_time(double &out); + +public: //operational interface + bool load(const std::string &filename, const std::string &filedirectory = ""); + void clear(); + + //play functions... + void play(double t); + void stop(); + //Note: this refers to the wrapper concept of the audio, the actual sound may or may not be playing... + bool is_playing() const; + + //scrubbing functions... + void start_scrubbing(double t); + void stop_scrubbing(); + void scrub(double t); //!< if we are not currently scrubbing this will not work + bool is_scrubbing() const; + + double scrub_time() const; + + bool isRunning() const; + bool isPaused() const; +}; + +} // END of namespace studio + +/* === E N D =============================================================== */ + +#endif