|
Blender
V2.59
|
00001 /* 00002 * $Id: AUD_SoftwareDevice.h 35141 2011-02-25 10:21:56Z jesterking $ 00003 * 00004 * ***** BEGIN GPL LICENSE BLOCK ***** 00005 * 00006 * Copyright 2009-2011 Jörg Hermann Müller 00007 * 00008 * This file is part of AudaSpace. 00009 * 00010 * Audaspace is free software; you can redistribute it and/or modify 00011 * it under the terms of the GNU General Public License as published by 00012 * the Free Software Foundation; either version 2 of the License, or 00013 * (at your option) any later version. 00014 * 00015 * AudaSpace is distributed in the hope that it will be useful, 00016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 * GNU General Public License for more details. 00019 * 00020 * You should have received a copy of the GNU General Public License 00021 * along with Audaspace; if not, write to the Free Software Foundation, 00022 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00023 * 00024 * ***** END GPL LICENSE BLOCK ***** 00025 */ 00026 00032 #ifndef AUD_SOFTWAREDEVICE 00033 #define AUD_SOFTWAREDEVICE 00034 00035 #include "AUD_IDevice.h" 00036 struct AUD_SoftwareHandle; 00037 class AUD_Mixer; 00038 class AUD_Buffer; 00039 00040 #include <list> 00041 #include <pthread.h> 00042 00051 class AUD_SoftwareDevice : public AUD_IDevice 00052 { 00053 protected: 00057 AUD_DeviceSpecs m_specs; 00058 00062 AUD_Mixer* m_mixer; 00063 00067 void create(); 00068 00072 void destroy(); 00073 00079 void mix(data_t* buffer, int length); 00080 00085 virtual void playing(bool playing)=0; 00086 00087 private: 00091 std::list<AUD_SoftwareHandle*> m_playingSounds; 00092 00096 std::list<AUD_SoftwareHandle*> m_pausedSounds; 00097 00101 bool m_playback; 00102 00106 pthread_mutex_t m_mutex; 00107 00111 float m_volume; 00112 00118 bool isValid(AUD_Handle* handle); 00119 00120 public: 00121 virtual AUD_DeviceSpecs getSpecs() const; 00122 virtual AUD_Handle* play(AUD_IReader* reader, bool keep = false); 00123 virtual AUD_Handle* play(AUD_IFactory* factory, bool keep = false); 00124 virtual bool pause(AUD_Handle* handle); 00125 virtual bool resume(AUD_Handle* handle); 00126 virtual bool stop(AUD_Handle* handle); 00127 virtual bool getKeep(AUD_Handle* handle); 00128 virtual bool setKeep(AUD_Handle* handle, bool keep); 00129 virtual bool seek(AUD_Handle* handle, float position); 00130 virtual float getPosition(AUD_Handle* handle); 00131 virtual AUD_Status getStatus(AUD_Handle* handle); 00132 virtual void lock(); 00133 virtual void unlock(); 00134 virtual float getVolume() const; 00135 virtual void setVolume(float volume); 00136 virtual float getVolume(AUD_Handle* handle); 00137 virtual bool setVolume(AUD_Handle* handle, float volume); 00138 virtual float getPitch(AUD_Handle* handle); 00139 virtual bool setPitch(AUD_Handle* handle, float pitch); 00140 virtual int getLoopCount(AUD_Handle* handle); 00141 virtual bool setLoopCount(AUD_Handle* handle, int count); 00142 virtual bool setStopCallback(AUD_Handle* handle, stopCallback callback = NULL, void* data = NULL); 00143 }; 00144 00145 #endif //AUD_SOFTWAREDEVICE