diff --git a/panda/src/audio/audio_linux_traits.h b/panda/src/audio/audio_linux_traits.h new file mode 100644 index 0000000000..61d299454d --- /dev/null +++ b/panda/src/audio/audio_linux_traits.h @@ -0,0 +1,88 @@ +// Filename: audio_linux_traits.h +// Created by: cary (02Oct00) +// +//////////////////////////////////////////////////////////////////// + +#ifndef __AUDIO_LINUX_TRAITS_H__ +#define __AUDIO_LINUX_TRAITS_H__ + +#include "audio_trait.h" + +typedef unsigned char byte; + +class EXPCL_PANDA Buffer { +private: + byte* _data; + unsigned long _size; + unsigned long _pos; + bool _done; +public: + INLINE Buffer(byte* data, unsigned long size) : _data(data), _size(size), + _pos(0), _done(false) {} + INLINE byte* get_buffer(byte* buf) { + memcpy(buf, &_data[_pos], audio_buffer_size); + _pos += audio_buffer_size; + if (_pos > _size) { + _pos -= _size; + memcpy(&buf[audio_buffer_size-_pos-1], zero_buffer, _pos); + _done = true; + } + return buf; + } + INLINE bool is_done(void) const { + return _done; + } + INLINE unsigned long get_size(void) const { + return _size + } + INLINE void reset(void) { + _done = false; + _pos = 0; + } +}; + +class EXPCL_PANDA LinuxSample : public AudioTraits::SampleClass { +private: + Buffer* _data; +public: + INLINE LinuxSample(Buffer*); + virtual ~LinuxSample(void); + + virtual float length(void); + virtual AudioTraits::SampleClass::SampleStatus status(void); + + static void destroy(AudioTraits::SampleClass*); +public: + // used by the loader + static LinuxSample* load_raw(byte*, unsigned long) + // used by the players + INLINE Buffer* get_data(void); +}; + +class EXPCL_PANDA LinuxMusic : public AudioTraits::MusicClass { +public: + INLINE LinuxMusic(void); + virtual ~LinuxMusic(void); + + virtual AudioTraits::MusicClass::MusicStatus status(void); +}; + +class EXPCL_PANDA LinuxPlayer : public AudioTraits::PlayerClass { +public: + INLINE LinuxPlayer(void); + virtual ~LinuxPlayer(void); + + virtual void play_sample(AudioTraits::SampleClass*); + virtual void play_music(AudioTraits::MusicClass*); + virtual void set_volume(AudioTraits::SampleClass*, int); + virtual void set_volume(AudioTraits::MusicClass*, int); +public: + // used by the readers + static LinuxPlayer* get_instance(void); +private: + static LinuxPlayer* _global_instance; +}; + +#include "audio_linux_traits.I" + +#endif /* __AUDIO_LINUX_TRAITS_H__ */