⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aflibaudio.h

📁 一个共享源码的音频库2
💻 H
字号:
/* * Copyright: (C) 1999-2001 Bruce W. Forsberg * *   This library is free software; you can redistribute it and/or *   modify it under the terms of the GNU Lesser General Public *   License as published by the Free Software Foundation; either *   version 2.1 of the License, or any later version. * *   This library 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 *   Lesser General Public License for more details. * *   You should have received a copy of the GNU Lesser General Public *   License along with this library; if not, write to the Free Software *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA * *   Bruce Forsberg  forsberg@tns.net * */#ifndef _AFLIBAUDIO_H#define _AFLIBAUDIO_H#ifdef HAVE_CONFIG_H#include <config.h>#endif#include "aflib.h"#include "aflibChain.h"#include "aflibMemCache.h"#include "aflibConfig.h"#include <list>/*! \class aflibAudio    \brief Main base class for all audio objects to be placed in a chain.      This is the Base class that all objects will use that want to be used     as audio objects with this library. It inherts functionality from the     aflibChain class so that these objects can be used in a chain. It is also     derived from aflibMemCache class. This provides memory caching for an     object.     Two constructors are provided. A constructor with no parameters is     provided that derived classes should call that can be used as the     start of a chain. A mixing class for instance makes no sense to     have a default contructor since it can't be used as the start of a     chain. Most often the start of a chain will be a file or device     object. The second constructor takes an aflibAudio object. This should     be called by a derived class that could have a parent audio object     feeding it. This will more than likely be almost all objects.     Function compute_segment is pure virtual so that all derived classes will     have to implement it. There is no implementation in this base class.     This is the function that derived classes implement that will do the     work. This function will be passed a list of aflibData objects. One     for each parent of the object. The order in the list is the same as     the order from the getParents function. It will also be passed the position     of the data. When done the function should return AFLIB_SUCCESS if     success.     Function process is defined in this base class and should not be overriden except     in certain circumstances. Such as an audio class with more than 1 input     that needs special requirements. It provides the functionality to push     data throught the chain. The user application can call process from any     element in the chain. It will work its way back through the chain and     when it gets to the start will start an aflibData object through the     chain until arriving at and processing this object. This function might     be the ideal place in the future to enable threading. */class aflibData;class aflibAudioSampleRateCvt;class aflibAudioMixer;class aflibAudio : public aflibChain, public aflibMemCache {public:   virtual   ~aflibAudio();   void   enable(bool enable);   bool   getEnable() const;   void   enableDataSizeConversion(bool enable);   void   enableEndianConversion(bool enable);   void   enableSampleRateConversion(bool enable);   void   enableChannelsConversion(bool enable);   virtual void   setInputConfig(const aflibConfig& cfg);   virtual const aflibConfig&   getInputConfig() const;   virtual void   setOutputConfig(const aflibConfig& cfg);   virtual const aflibConfig&   getOutputConfig() const;   //! Returns the name of the derived class, must be implemented by derived class.   virtual const char *   getName() const { return "aflibAudio";};   //! Work function, must be implemented by derived class.   virtual aflibStatus   compute_segment(      list<aflibData *>& ,      long long ){ return AFLIB_SUCCESS;};   virtual aflibData *   process(      aflibStatus& ret_status,      long long position,      int& num_samples,      bool free_memory = TRUE);protected:   aflibAudio();   aflibAudio(aflibAudio& audio);   aflibAudio*    convertSampleRate(aflibAudio&  parent);   aflibAudio*    convertChannels(aflibAudio&  parent);   void   convertData(aflibData& data);   void   examineChain();   bool   checkChain(const aflibAudio * audio) const;   void   preprocessChain(      aflibAudio * audio,      aflibAudio * child);   // "is" functions that indicate what formats an object supports   virtual bool   isDataSizeSupported(aflib_data_size size);   virtual bool   isEndianSupported(aflib_data_endian end);   virtual bool   isSampleRateSupported(int& rate);   virtual bool   isChannelsSupported(int& channels);   inline void   incrementLevel() {_level++;};   inline void   decrementLevel() {_level--;};private:bool     _enable;bool     _enable_data_size;bool     _enable_endian;bool     _enable_sample_rate;bool     _enable_channels;aflibConfig _cfg_input;aflibConfig _cfg_output;aflibAudioSampleRateCvt  * _cvt;aflibAudioMixer  * _mix;static int  _level;};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -