mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-29 00:06:44 -04:00
rev for playing state
This commit is contained in:
parent
6984fca9dd
commit
eed2cb7fa5
@ -3,15 +3,19 @@
|
|||||||
//
|
//
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
INLINE LinuxSample::LinuxSample(Buffer* b) : _data(b) {
|
INLINE LinuxSample::LinuxSample(Buffer* b) : AudioTraits::SampleClass(),
|
||||||
|
_data(b) {
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE Buffer* LinuxSample::get_data(void) {
|
INLINE Buffer* LinuxSample::get_data(void) {
|
||||||
return _data;
|
return _data;
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE LinuxMusic::LinuxMusic(void) {
|
INLINE LinuxMusic::LinuxMusic(void) : AudioTraits::MusicClass() {
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE LinuxPlayer::LinuxPlayer(void) {
|
INLINE LinuxPlaying::LinuxPlaying(void) : AudioTraits::PlayingClass() {
|
||||||
|
}
|
||||||
|
|
||||||
|
INLINE LinuxPlayer::LinuxPlayer(void) : AudioTraits::PlayerClass() {
|
||||||
}
|
}
|
||||||
|
@ -243,6 +243,10 @@ AudioTraits::SampleClass::SampleStatus LinuxSample::status(void) {
|
|||||||
return AudioTraits::SampleClass::READY;
|
return AudioTraits::SampleClass::READY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LinuxPlaying* LinuxSample::get_state(void) {
|
||||||
|
return new LinuxPlaying();
|
||||||
|
}
|
||||||
|
|
||||||
void LinuxSample::destroy(AudioTraits::SampleClass* sample) {
|
void LinuxSample::destroy(AudioTraits::SampleClass* sample) {
|
||||||
delete sample;
|
delete sample;
|
||||||
}
|
}
|
||||||
@ -259,6 +263,21 @@ AudioTraits::MusicClass::MusicStatus LinuxMusic::status(void) {
|
|||||||
return AudioTraits::MusicClass::READY;
|
return AudioTraits::MusicClass::READY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LinuxPlaying* LinuxMusic::get_state(void) {
|
||||||
|
return new LinuxPlaying();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LinuxMusic::destroy(AudioTraits::MusicClass* music) {
|
||||||
|
delete music;
|
||||||
|
}
|
||||||
|
|
||||||
|
LinuxPlaying::~LinuxPlaying(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
AudioTraits::PlayingClass::PlayingStatus LinuxPlaying::status(void) {
|
||||||
|
return AudioTraits::PlayingClass::BAD;
|
||||||
|
}
|
||||||
|
|
||||||
LinuxPlayer* LinuxPlayer::_global_instance = (LinuxPlayer*)0L;
|
LinuxPlayer* LinuxPlayer::_global_instance = (LinuxPlayer*)0L;
|
||||||
|
|
||||||
LinuxPlayer::~LinuxPlayer(void) {
|
LinuxPlayer::~LinuxPlayer(void) {
|
||||||
|
@ -57,6 +57,8 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class LinuxPlaying;
|
||||||
|
|
||||||
class EXPCL_PANDA LinuxSample : public AudioTraits::SampleClass {
|
class EXPCL_PANDA LinuxSample : public AudioTraits::SampleClass {
|
||||||
private:
|
private:
|
||||||
Buffer* _data;
|
Buffer* _data;
|
||||||
@ -67,10 +69,11 @@ public:
|
|||||||
virtual float length(void);
|
virtual float length(void);
|
||||||
virtual AudioTraits::SampleClass::SampleStatus status(void);
|
virtual AudioTraits::SampleClass::SampleStatus status(void);
|
||||||
|
|
||||||
static void destroy(AudioTraits::SampleClass*);
|
|
||||||
public:
|
public:
|
||||||
// used by the loader
|
// used by the loader
|
||||||
static LinuxSample* load_raw(byte*, unsigned long);
|
static LinuxSample* load_raw(byte*, unsigned long);
|
||||||
|
virtual LinuxPlaying* get_state(void);
|
||||||
|
static void destroy(AudioTraits::SampleClass*);
|
||||||
// used by the players
|
// used by the players
|
||||||
INLINE Buffer* get_data(void);
|
INLINE Buffer* get_data(void);
|
||||||
};
|
};
|
||||||
@ -81,6 +84,17 @@ public:
|
|||||||
virtual ~LinuxMusic(void);
|
virtual ~LinuxMusic(void);
|
||||||
|
|
||||||
virtual AudioTraits::MusicClass::MusicStatus status(void);
|
virtual AudioTraits::MusicClass::MusicStatus status(void);
|
||||||
|
public:
|
||||||
|
virtual LinuxPlaying* get_state(void);
|
||||||
|
static void destroy(AudioTraits::MusicClass*);
|
||||||
|
};
|
||||||
|
|
||||||
|
class EXPCL_PANDA LinuxPlaying : public AudioTraits::PlayingClass {
|
||||||
|
public:
|
||||||
|
INLINE LinuxPlaying(void);
|
||||||
|
virtual ~LinuxPlaying(void);
|
||||||
|
|
||||||
|
virtual AudioTraits::PlayingClass::PlayingStatus status(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
class EXPCL_PANDA LinuxPlayer : public AudioTraits::PlayerClass {
|
class EXPCL_PANDA LinuxPlayer : public AudioTraits::PlayerClass {
|
||||||
|
@ -156,6 +156,10 @@ MikModSample* MikModSample::load_wav(Filename filename) {
|
|||||||
return new MikModSample(sample);
|
return new MikModSample(sample);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MikModPlaying* MikModSample::get_state(void) {
|
||||||
|
return new MikModPlaying();
|
||||||
|
}
|
||||||
|
|
||||||
void MikModSample::destroy(AudioTraits::SampleClass* sample) {
|
void MikModSample::destroy(AudioTraits::SampleClass* sample) {
|
||||||
delete sample;
|
delete sample;
|
||||||
}
|
}
|
||||||
@ -197,6 +201,10 @@ MikModMidi* MikModMidi::load_midi(Filename) {
|
|||||||
return new MikModMidi();
|
return new MikModMidi();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MikModPlaying* MikModMidi::get_state(void) {
|
||||||
|
return new MikModPlaying();
|
||||||
|
}
|
||||||
|
|
||||||
void MikModMidi::destroy(AudioTraits::MusicClass* music) {
|
void MikModMidi::destroy(AudioTraits::MusicClass* music) {
|
||||||
delete music;
|
delete music;
|
||||||
}
|
}
|
||||||
@ -205,6 +213,12 @@ AudioTraits::MusicClass::MusicStatus MikModMidi::status(void) {
|
|||||||
return READY;
|
return READY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MikModPlaying::MikModPlaying(void) : AudioTraits::PlayingClass() {
|
||||||
|
}
|
||||||
|
|
||||||
|
MikModPlaying::~MikModPlaying(void) {
|
||||||
|
}
|
||||||
|
|
||||||
MikModSamplePlayer* MikModSamplePlayer::_global_instance =
|
MikModSamplePlayer* MikModSamplePlayer::_global_instance =
|
||||||
(MikModSamplePlayer*)0L;
|
(MikModSamplePlayer*)0L;
|
||||||
|
|
||||||
|
@ -14,6 +14,8 @@
|
|||||||
#include <filename.h>
|
#include <filename.h>
|
||||||
#include <mikmod.h>
|
#include <mikmod.h>
|
||||||
|
|
||||||
|
class MikModPlaying;
|
||||||
|
|
||||||
class EXPCL_PANDA MikModSample : public AudioTraits::SampleClass {
|
class EXPCL_PANDA MikModSample : public AudioTraits::SampleClass {
|
||||||
private:
|
private:
|
||||||
SAMPLE* _sample;
|
SAMPLE* _sample;
|
||||||
@ -28,6 +30,7 @@ public:
|
|||||||
public:
|
public:
|
||||||
// used by the readers
|
// used by the readers
|
||||||
static MikModSample* load_wav(Filename);
|
static MikModSample* load_wav(Filename);
|
||||||
|
virtual MikModPlaying* get_state(void);
|
||||||
static void destroy(AudioTraits::SampleClass*);
|
static void destroy(AudioTraits::SampleClass*);
|
||||||
// used by the players
|
// used by the players
|
||||||
virtual void set_voice(int);
|
virtual void set_voice(int);
|
||||||
@ -57,8 +60,15 @@ public:
|
|||||||
// used by the readers
|
// used by the readers
|
||||||
static MikModMidi* load_midi(Filename);
|
static MikModMidi* load_midi(Filename);
|
||||||
static void destroy(AudioTraits::MusicClass*);
|
static void destroy(AudioTraits::MusicClass*);
|
||||||
|
virtual MikModPlaying* get_state(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class EXPCL_PANDA MikModPlaying : public AudioTraits::PlayingClass {
|
||||||
|
public:
|
||||||
|
MikModPlaying(void);
|
||||||
|
~MikModPlaying(void);
|
||||||
|
}
|
||||||
|
|
||||||
class EXPCL_PANDA MikModSamplePlayer : public AudioTraits::PlayerClass {
|
class EXPCL_PANDA MikModSamplePlayer : public AudioTraits::PlayerClass {
|
||||||
public:
|
public:
|
||||||
MikModSamplePlayer(void);
|
MikModSamplePlayer(void);
|
||||||
|
@ -3,11 +3,14 @@
|
|||||||
//
|
//
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
INLINE NullSample::NullSample(void) {
|
INLINE NullSample::NullSample(void) : AudioTraits::SampleClass() {
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE NullMusic::NullMusic(void) {
|
INLINE NullMusic::NullMusic(void) : AudioTraits::MusicClass() {
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE NullPlayer::NullPlayer(void) {
|
INLINE NullPlaying::NullPlaying(void) : AudioTraits::PlayingClass() {
|
||||||
|
}
|
||||||
|
|
||||||
|
INLINE NullPlayer::NullPlayer(void) : AudioTraits::PlayerClass() {
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,9 @@ AudioTraits::MusicClass::MusicStatus NullMusic::status(void) {
|
|||||||
return READY;
|
return READY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NullPlaying::~NullPlaying(void) {
|
||||||
|
}
|
||||||
|
|
||||||
NullPlayer::~NullPlayer(void) {
|
NullPlayer::~NullPlayer(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,6 +11,8 @@
|
|||||||
#ifndef __AUDIO_NULL_TRAITS_H__
|
#ifndef __AUDIO_NULL_TRAITS_H__
|
||||||
#define __AUDIO_NULL_TRAITS_H__
|
#define __AUDIO_NULL_TRAITS_H__
|
||||||
|
|
||||||
|
class NullPlaying;
|
||||||
|
|
||||||
class EXPCL_PANDA NullSample : public AudioTraits::SampleClass {
|
class EXPCL_PANDA NullSample : public AudioTraits::SampleClass {
|
||||||
public:
|
public:
|
||||||
INLINE NullSample(void);
|
INLINE NullSample(void);
|
||||||
@ -28,6 +30,12 @@ public:
|
|||||||
virtual AudioTraits::MusicClass::MusicStatus status(void);
|
virtual AudioTraits::MusicClass::MusicStatus status(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class EXPCL_PANDA NullPlaying : public AudioTraits::PlayingClass {
|
||||||
|
public:
|
||||||
|
INLINE NullPlaying(void);
|
||||||
|
virtual ~NullPlaying(void);
|
||||||
|
};
|
||||||
|
|
||||||
class EXPCL_PANDA NullPlayer : public AudioTraits::PlayerClass {
|
class EXPCL_PANDA NullPlayer : public AudioTraits::PlayerClass {
|
||||||
public:
|
public:
|
||||||
INLINE NullPlayer(void);
|
INLINE NullPlayer(void);
|
||||||
|
@ -78,6 +78,7 @@ AudioSample* AudioPool::ns_load_sample(Filename filename) {
|
|||||||
}
|
}
|
||||||
audio_cat.info() << "Loading sample " << filename << "\n";
|
audio_cat.info() << "Loading sample " << filename << "\n";
|
||||||
AudioTraits::SampleClass* sample = (AudioTraits::SampleClass*)0L;
|
AudioTraits::SampleClass* sample = (AudioTraits::SampleClass*)0L;
|
||||||
|
AudioTraits::PlayingClass* state = (AudioTraits::PlayingClass*)0L;
|
||||||
AudioTraits::PlayerClass* player = (AudioTraits::PlayerClass*)0L;
|
AudioTraits::PlayerClass* player = (AudioTraits::PlayerClass*)0L;
|
||||||
AudioTraits::DeleteSampleFunc* destroy = (AudioTraits::DeleteSampleFunc*)0L;
|
AudioTraits::DeleteSampleFunc* destroy = (AudioTraits::DeleteSampleFunc*)0L;
|
||||||
string ext = filename.get_extension();
|
string ext = filename.get_extension();
|
||||||
@ -89,16 +90,16 @@ AudioSample* AudioPool::ns_load_sample(Filename filename) {
|
|||||||
<< "'" << endl;
|
<< "'" << endl;
|
||||||
return (AudioSample*)0L;
|
return (AudioSample*)0L;
|
||||||
}
|
}
|
||||||
(*((*sli).second))(&sample, &player, &destroy, filename);
|
(*((*sli).second))(&sample, &state, &player, &destroy, filename);
|
||||||
if ((sample == (AudioTraits::SampleClass*)0L) ||
|
if ((sample == (AudioTraits::SampleClass*)0L) ||
|
||||||
|
(state == (AudioTraits::PlayingClass*)0L) ||
|
||||||
(player == (AudioTraits::PlayerClass*)0L) ||
|
(player == (AudioTraits::PlayerClass*)0L) ||
|
||||||
(destroy == (AudioTraits::DeleteSampleFunc*)0L)) {
|
(destroy == (AudioTraits::DeleteSampleFunc*)0L)) {
|
||||||
audio_cat->error() << "could not load '" << filename << "'" << endl;
|
audio_cat->error() << "could not load '" << filename << "'" << endl;
|
||||||
return (AudioSample*)0L;
|
return (AudioSample*)0L;
|
||||||
}
|
}
|
||||||
PT(AudioSample) the_sample = new AudioSample(sample,
|
PT(AudioSample) the_sample = new AudioSample(sample, state, player, destroy,
|
||||||
(AudioTraits::PlayingClass*)0L,
|
filename);
|
||||||
player, destroy, filename);
|
|
||||||
_samples[filename] = the_sample;
|
_samples[filename] = the_sample;
|
||||||
return the_sample;
|
return the_sample;
|
||||||
}
|
}
|
||||||
@ -178,6 +179,7 @@ AudioMusic* AudioPool::ns_load_music(Filename filename) {
|
|||||||
}
|
}
|
||||||
audio_cat.info() << "Loading music " << filename << "\n";
|
audio_cat.info() << "Loading music " << filename << "\n";
|
||||||
AudioTraits::MusicClass* music = (AudioTraits::MusicClass*)0L;
|
AudioTraits::MusicClass* music = (AudioTraits::MusicClass*)0L;
|
||||||
|
AudioTraits::PlayingClass* state = (AudioTraits::PlayingClass*)0L;
|
||||||
AudioTraits::PlayerClass* player = (AudioTraits::PlayerClass*)0L;
|
AudioTraits::PlayerClass* player = (AudioTraits::PlayerClass*)0L;
|
||||||
AudioTraits::DeleteMusicFunc* destroy = (AudioTraits::DeleteMusicFunc*)0L;
|
AudioTraits::DeleteMusicFunc* destroy = (AudioTraits::DeleteMusicFunc*)0L;
|
||||||
string ext = filename.get_extension();
|
string ext = filename.get_extension();
|
||||||
@ -189,16 +191,16 @@ AudioMusic* AudioPool::ns_load_music(Filename filename) {
|
|||||||
<< "'" << endl;
|
<< "'" << endl;
|
||||||
return (AudioMusic*)0L;
|
return (AudioMusic*)0L;
|
||||||
}
|
}
|
||||||
(*((*sli).second))(&music, &player, &destroy, filename);
|
(*((*sli).second))(&music, &state, &player, &destroy, filename);
|
||||||
if ((music == (AudioTraits::MusicClass*)0L) ||
|
if ((music == (AudioTraits::MusicClass*)0L) ||
|
||||||
|
(state == (AudioTraits::PlayingClass*)0L) ||
|
||||||
(player == (AudioTraits::PlayerClass*)0L) ||
|
(player == (AudioTraits::PlayerClass*)0L) ||
|
||||||
(destroy == (AudioTraits::DeleteMusicFunc*)0L)) {
|
(destroy == (AudioTraits::DeleteMusicFunc*)0L)) {
|
||||||
audio_cat->error() << "could not load '" << filename << "'" << endl;
|
audio_cat->error() << "could not load '" << filename << "'" << endl;
|
||||||
return (AudioMusic*)0L;
|
return (AudioMusic*)0L;
|
||||||
}
|
}
|
||||||
PT(AudioMusic) the_music = new AudioMusic(music,
|
PT(AudioMusic) the_music = new AudioMusic(music, state, player, destroy,
|
||||||
(AudioTraits::PlayingClass*)0L,
|
filename);
|
||||||
player, destroy, filename);
|
|
||||||
_music[filename] = the_music;
|
_music[filename] = the_music;
|
||||||
return the_music;
|
return the_music;
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,7 @@ private:
|
|||||||
MusicMap _music;
|
MusicMap _music;
|
||||||
public:
|
public:
|
||||||
typedef void SampleLoadFunc(AudioTraits::SampleClass**,
|
typedef void SampleLoadFunc(AudioTraits::SampleClass**,
|
||||||
|
AudioTraits::PlayingClass**,
|
||||||
AudioTraits::PlayerClass**,
|
AudioTraits::PlayerClass**,
|
||||||
AudioTraits::DeleteSampleFunc**, Filename);
|
AudioTraits::DeleteSampleFunc**, Filename);
|
||||||
|
|
||||||
@ -47,6 +48,7 @@ public:
|
|||||||
static void register_sample_loader(const string&, SampleLoadFunc*);
|
static void register_sample_loader(const string&, SampleLoadFunc*);
|
||||||
|
|
||||||
typedef void MusicLoadFunc(AudioTraits::MusicClass**,
|
typedef void MusicLoadFunc(AudioTraits::MusicClass**,
|
||||||
|
AudioTraits::PlayingClass**,
|
||||||
AudioTraits::PlayerClass**,
|
AudioTraits::PlayerClass**,
|
||||||
AudioTraits::DeleteMusicFunc**, Filename);
|
AudioTraits::DeleteMusicFunc**, Filename);
|
||||||
|
|
||||||
|
@ -3,14 +3,16 @@
|
|||||||
//
|
//
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
INLINE WinSample::WinSample(void) : _channel(NULL), _data(NULL), _len(0) {
|
INLINE WinSample::WinSample(void) : AudioTraits::SampleClass(), _channel(NULL),
|
||||||
|
_data(NULL), _len(0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE LPDIRECTSOUNDBUFFER WinSample::get_channel(void) {
|
INLINE LPDIRECTSOUNDBUFFER WinSample::get_channel(void) {
|
||||||
return _channel;
|
return _channel;
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE WinMusic::WinMusic(void) : _performance(NULL), _music(NULL),
|
INLINE WinMusic::WinMusic(void) : AudioTraits::MusicClass(),
|
||||||
|
_performance(NULL), _music(NULL),
|
||||||
_buffer(NULL), _synth(NULL), _data(NULL),
|
_buffer(NULL), _synth(NULL), _data(NULL),
|
||||||
_len(0) {
|
_len(0) {
|
||||||
init();
|
init();
|
||||||
@ -24,5 +26,8 @@ INLINE IDirectMusicSegment* WinMusic::get_music(void) {
|
|||||||
return _music;
|
return _music;
|
||||||
}
|
}
|
||||||
|
|
||||||
INLINE WinPlayer::WinPlayer(void) {
|
INLINE WinPlaying::WinPlaying(void) : AudioTraits::PlayingClass() {
|
||||||
|
}
|
||||||
|
|
||||||
|
INLINE WinPlayer::WinPlayer(void) : AudioTraits::PlayerClass() {
|
||||||
}
|
}
|
||||||
|
@ -443,6 +443,10 @@ WinSample* WinSample::load_raw(unsigned char* data, unsigned long size) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WinPlaying* WinSample::get_state(void) {
|
||||||
|
return new WinPlaying();
|
||||||
|
}
|
||||||
|
|
||||||
void WinSample::destroy(AudioTraits::SampleClass* sample) {
|
void WinSample::destroy(AudioTraits::SampleClass* sample) {
|
||||||
delete sample;
|
delete sample;
|
||||||
}
|
}
|
||||||
@ -638,6 +642,10 @@ WinMusic* WinMusic::load_midi(Filename filename) {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WinPlaying* WinMusic::get_state(void) {
|
||||||
|
return new WinPlaying();
|
||||||
|
}
|
||||||
|
|
||||||
void WinMusic::destroy(AudioTraits::MusicClass* music) {
|
void WinMusic::destroy(AudioTraits::MusicClass* music) {
|
||||||
if (audio_cat->is_debug())
|
if (audio_cat->is_debug())
|
||||||
audio_cat->debug() << "in WinMusic::destroy()" << endl;
|
audio_cat->debug() << "in WinMusic::destroy()" << endl;
|
||||||
@ -646,6 +654,9 @@ void WinMusic::destroy(AudioTraits::MusicClass* music) {
|
|||||||
audio_cat->debug() << "out of WinMusic::destroy()" << endl;
|
audio_cat->debug() << "out of WinMusic::destroy()" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WinPlaying::~WinPlaying(void) {
|
||||||
|
}
|
||||||
|
|
||||||
WinPlayer* WinPlayer::_global_instance = (WinPlayer*)0L;
|
WinPlayer* WinPlayer::_global_instance = (WinPlayer*)0L;
|
||||||
|
|
||||||
WinPlayer::~WinPlayer(void) {
|
WinPlayer::~WinPlayer(void) {
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
#include <dsound.h>
|
#include <dsound.h>
|
||||||
#include <dmusici.h>
|
#include <dmusici.h>
|
||||||
|
|
||||||
|
class WinPlaying;
|
||||||
|
|
||||||
class EXPCL_PANDA WinSample : public AudioTraits::SampleClass {
|
class EXPCL_PANDA WinSample : public AudioTraits::SampleClass {
|
||||||
private:
|
private:
|
||||||
LPDIRECTSOUNDBUFFER _channel;
|
LPDIRECTSOUNDBUFFER _channel;
|
||||||
@ -33,6 +35,7 @@ public:
|
|||||||
void unlock(void);
|
void unlock(void);
|
||||||
static WinSample* load_wav(Filename);
|
static WinSample* load_wav(Filename);
|
||||||
static WinSample* load_raw(unsigned char*, unsigned long);
|
static WinSample* load_raw(unsigned char*, unsigned long);
|
||||||
|
virtual WinPlaying* get_state(void);
|
||||||
static void destroy(AudioTraits::SampleClass*);
|
static void destroy(AudioTraits::SampleClass*);
|
||||||
// these are used by the player
|
// these are used by the player
|
||||||
INLINE LPDIRECTSOUNDBUFFER get_channel(void);
|
INLINE LPDIRECTSOUNDBUFFER get_channel(void);
|
||||||
@ -55,12 +58,19 @@ public:
|
|||||||
virtual AudioTraits::MusicClass::MusicStatus status(void);
|
virtual AudioTraits::MusicClass::MusicStatus status(void);
|
||||||
// these are used by the loaders
|
// these are used by the loaders
|
||||||
static WinMusic* load_midi(Filename);
|
static WinMusic* load_midi(Filename);
|
||||||
|
virtual WinPlaying* get_state(void);
|
||||||
static void destroy(AudioTraits::MusicClass*);
|
static void destroy(AudioTraits::MusicClass*);
|
||||||
// these are used by the players
|
// these are used by the players
|
||||||
INLINE IDirectMusicPerformance* get_performance(void);
|
INLINE IDirectMusicPerformance* get_performance(void);
|
||||||
INLINE IDirectMusicSegment* get_music(void);
|
INLINE IDirectMusicSegment* get_music(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class EXPCL_PANDA WinPlaying : public AudioTraits::PlayingClass {
|
||||||
|
public:
|
||||||
|
INLINE WinPlaying(void);
|
||||||
|
~WinPlaying(void);
|
||||||
|
};
|
||||||
|
|
||||||
class EXPCL_PANDA WinPlayer : public AudioTraits::PlayerClass {
|
class EXPCL_PANDA WinPlayer : public AudioTraits::PlayerClass {
|
||||||
public:
|
public:
|
||||||
INLINE WinPlayer(void);
|
INLINE WinPlayer(void);
|
||||||
|
@ -19,11 +19,13 @@ void AudioDestroyMidi(AudioTraits::MusicClass* music) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AudioLoadMidi(AudioTraits::MusicClass** music,
|
void AudioLoadMidi(AudioTraits::MusicClass** music,
|
||||||
|
AudioTraits::PlayingClass** state,
|
||||||
AudioTraits::PlayerClass** player,
|
AudioTraits::PlayerClass** player,
|
||||||
AudioTraits::DeleteMusicFunc** destroy, Filename filename) {
|
AudioTraits::DeleteMusicFunc** destroy, Filename filename) {
|
||||||
*music = MikModMidi::load_midi(filename);
|
*music = MikModMidi::load_midi(filename);
|
||||||
if (*music == (AudioTraits::MusicClass*)0L)
|
if (*music == (AudioTraits::MusicClass*)0L)
|
||||||
return;
|
return;
|
||||||
|
*state = *music->get_state();
|
||||||
*player = MikModMidiPlayer::get_instance();
|
*player = MikModMidiPlayer::get_instance();
|
||||||
*destroy = AudioDestroyMidi;
|
*destroy = AudioDestroyMidi;
|
||||||
}
|
}
|
||||||
@ -39,31 +41,35 @@ void AudioDestroyMidi(AudioTraits::MusicClass* music) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AudioLoadMidi(AudioTraits::MusicClass** music,
|
void AudioLoadMidi(AudioTraits::MusicClass** music,
|
||||||
|
AudioTraits::PlayingClass** state,
|
||||||
AudioTraits::PlayerClass** player,
|
AudioTraits::PlayerClass** player,
|
||||||
AudioTraits::DeleteMusicFunc** destroy, Filename filename) {
|
AudioTraits::DeleteMusicFunc** destroy, Filename filename) {
|
||||||
*music = WinMusic::load_midi(filename);
|
*music = WinMusic::load_midi(filename);
|
||||||
if (*music == (AudioTraits::MusicClass*)0L)
|
if (*music == (AudioTraits::MusicClass*)0L)
|
||||||
return;
|
return;
|
||||||
|
*state = *music->get_state();
|
||||||
*player = WinPlayer::get_instance();
|
*player = WinPlayer::get_instance();
|
||||||
*destroy = AudioDestroyMidi;
|
*destroy = AudioDestroyMidi;
|
||||||
audio_cat->debug() << "sanity check: music = " << (void*)*music
|
|
||||||
<< " player = " << (void*)*player << " destroy = "
|
|
||||||
<< (void*)*destroy << endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* AUDIO_USE_WIN32 */
|
#else /* AUDIO_USE_WIN32 */
|
||||||
|
|
||||||
#ifdef AUDIO_USE_LINUX
|
#ifdef AUDIO_USE_LINUX
|
||||||
|
|
||||||
|
#include "audio_linux_traits.h"
|
||||||
|
|
||||||
void AudioDestroyMidi(AudioTraits::MusicClass* music) {
|
void AudioDestroyMidi(AudioTraits::MusicClass* music) {
|
||||||
delete music;
|
LinuxMusic::destroy(music);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioLoadMidi(AudioTraits::MusicClass** music,
|
void AudioLoadMidi(AudioTraits::MusicClass** music,
|
||||||
|
AudioTraits::PlayingClass** state,
|
||||||
AudioTraits::PlayerClass** player,
|
AudioTraits::PlayerClass** player,
|
||||||
AudioTraits::DeleteMusicFunc** destroy, Filename) {
|
AudioTraits::DeleteMusicFunc** destroy, Filename) {
|
||||||
audio_cat->warning() << "linux doesn't support reading midi data yet"
|
audio_cat->warning() << "linux doesn't support reading midi data yet"
|
||||||
<< endl;
|
<< endl;
|
||||||
*music = (AudioTraits::MusicClass*)0L;
|
*music = (AudioTraits::MusicClass*)0L;
|
||||||
|
*state = (AudioTraits::PlayingClass*)0L;
|
||||||
*player = (AudioTraits::PlayerClass*)0L;
|
*player = (AudioTraits::PlayerClass*)0L;
|
||||||
*destroy = AudioDestroyMidi;
|
*destroy = AudioDestroyMidi;
|
||||||
}
|
}
|
||||||
@ -80,9 +86,11 @@ void AudioDestroyMidi(AudioTraits::MusicClass* music) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AudioLoadMidi(AudioTraits::MusicClass** music,
|
void AudioLoadMidi(AudioTraits::MusicClass** music,
|
||||||
|
AudioTraits::PlayingClass** state,
|
||||||
AudioTraits::PlayerClass** player,
|
AudioTraits::PlayerClass** player,
|
||||||
AudioTraits::DeleteMusicFunc** destroy, Filename) {
|
AudioTraits::DeleteMusicFunc** destroy, Filename) {
|
||||||
*music = new NullMusic();
|
*music = new NullMusic();
|
||||||
|
*state = new NullPlaying();
|
||||||
*player = new NullPlayer();
|
*player = new NullPlayer();
|
||||||
*destroy = AudioDestroyMidi;
|
*destroy = AudioDestroyMidi;
|
||||||
}
|
}
|
||||||
|
@ -386,11 +386,13 @@ void AudioDestroySt(AudioTraits::SampleClass* sample) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AudioLoadSt(AudioTraits::SampleClass** sample,
|
void AudioLoadSt(AudioTraits::SampleClass** sample,
|
||||||
|
AudioTraits::PlayingClass** state,
|
||||||
AudioTraits::PlayerClass** player,
|
AudioTraits::PlayerClass** player,
|
||||||
AudioTraits::DeleteSampleFunc** destroy, Filename) {
|
AudioTraits::DeleteSampleFunc** destroy, Filename) {
|
||||||
audio_cat->warning() << "MikMod doesn't support reading raw data yet"
|
audio_cat->warning() << "MikMod doesn't support reading raw data yet"
|
||||||
<< endl;
|
<< endl;
|
||||||
*sample = (AudioTraits::SampleClass*)0L;
|
*sample = (AudioTraits::SampleClass*)0L;
|
||||||
|
*state = (AudioTraits::PlayingClass*)0L;
|
||||||
*player = (AudioTraits::PlayerClass*)0L;
|
*player = (AudioTraits::PlayerClass*)0L;
|
||||||
*destroy = AudioDestroySt;
|
*destroy = AudioDestroySt;
|
||||||
}
|
}
|
||||||
@ -402,10 +404,11 @@ void AudioLoadSt(AudioTraits::SampleClass** sample,
|
|||||||
#include "audio_win_traits.h"
|
#include "audio_win_traits.h"
|
||||||
|
|
||||||
void AudioDestroySt(AudioTraits::SampleClass* sample) {
|
void AudioDestroySt(AudioTraits::SampleClass* sample) {
|
||||||
delete sample;
|
WinSample::destroy(sample);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioLoadSt(AudioTraits::SampleClass** sample,
|
void AudioLoadSt(AudioTraits::SampleClass** sample,
|
||||||
|
AudioTraits::PlayingClass** state,
|
||||||
AudioTraits::PlayerClass** player,
|
AudioTraits::PlayerClass** player,
|
||||||
AudioTraits::DeleteSampleFunc** destroy, Filename filename) {
|
AudioTraits::DeleteSampleFunc** destroy, Filename filename) {
|
||||||
#ifdef HAVE_SOXST
|
#ifdef HAVE_SOXST
|
||||||
@ -414,11 +417,13 @@ void AudioLoadSt(AudioTraits::SampleClass** sample,
|
|||||||
read_file(filename, &buf, len);
|
read_file(filename, &buf, len);
|
||||||
if (buf != (unsigned char*)0L) {
|
if (buf != (unsigned char*)0L) {
|
||||||
*sample = WinSample::load_raw(buf, len);
|
*sample = WinSample::load_raw(buf, len);
|
||||||
|
*state = ((WinSample*)(*sample))->get_state();
|
||||||
*player = WinPlayer::get_instance();
|
*player = WinPlayer::get_instance();
|
||||||
*destroy = AudioDestroySt;
|
*destroy = AudioDestroySt;
|
||||||
}
|
}
|
||||||
#else /* HAVE_SOXST */
|
#else /* HAVE_SOXST */
|
||||||
*sample = (AudioTraits::SampleClass*)0L;
|
*sample = (AudioTraits::SampleClass*)0L;
|
||||||
|
*state = (AudioTraits::PlayingClass*)0L;
|
||||||
*player = (AudioTraits::PlayerClass*)0L;
|
*player = (AudioTraits::PlayerClass*)0L;
|
||||||
*destroy = AudioDestroySt;
|
*destroy = AudioDestroySt;
|
||||||
#endif /* HAVE_SOXST */
|
#endif /* HAVE_SOXST */
|
||||||
@ -431,10 +436,11 @@ void AudioLoadSt(AudioTraits::SampleClass** sample,
|
|||||||
#include "audio_linux_traits.h"
|
#include "audio_linux_traits.h"
|
||||||
|
|
||||||
void AudioDestroySt(AudioTraits::SampleClass* sample) {
|
void AudioDestroySt(AudioTraits::SampleClass* sample) {
|
||||||
delete sample;
|
LinuxSample::destroy(sample);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioLoadSt(AudioTraits::SampleClass** sample,
|
void AudioLoadSt(AudioTraits::SampleClass** sample,
|
||||||
|
AudioTraits::PlayingClass** state,
|
||||||
AudioTraits::PlayerClass** player,
|
AudioTraits::PlayerClass** player,
|
||||||
AudioTraits::DeleteSampleFunc** destroy, Filename filename) {
|
AudioTraits::DeleteSampleFunc** destroy, Filename filename) {
|
||||||
#ifdef HAVE_SOXST
|
#ifdef HAVE_SOXST
|
||||||
@ -443,11 +449,13 @@ void AudioLoadSt(AudioTraits::SampleClass** sample,
|
|||||||
read_file(filename, &buf, len);
|
read_file(filename, &buf, len);
|
||||||
if (buf != (byte*)0L) {
|
if (buf != (byte*)0L) {
|
||||||
*sample = LinuxSample::load_raw(buf, len);
|
*sample = LinuxSample::load_raw(buf, len);
|
||||||
|
*state = ((LinuxSample*)(*sample))->get_state();
|
||||||
*player = LinuxPlayer::get_instance();
|
*player = LinuxPlayer::get_instance();
|
||||||
*destroy = AudioDestroySt;
|
*destroy = AudioDestroySt;
|
||||||
}
|
}
|
||||||
#else /* HAVE_SOXST */
|
#else /* HAVE_SOXST */
|
||||||
*sample = (AudioTraits::SampleClass*)0L;
|
*sample = (AudioTraits::SampleClass*)0L;
|
||||||
|
*state = (AudioTraits::PlayingClass*)0L;
|
||||||
*player = (AudioTraits::PlayerClass*)0L;
|
*player = (AudioTraits::PlayerClass*)0L;
|
||||||
*destroy = AudioDestroySt;
|
*destroy = AudioDestroySt;
|
||||||
#endif /* HAVE_SOXST */
|
#endif /* HAVE_SOXST */
|
||||||
@ -465,9 +473,11 @@ void AudioDestroySt(AudioTraits::SampleClass* sample) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AudioLoadSt(AudioTraits::SampleClass** sample,
|
void AudioLoadSt(AudioTraits::SampleClass** sample,
|
||||||
|
AudioTraits::PlayingClass** state,
|
||||||
AudioTraits::PlayerClass** player,
|
AudioTraits::PlayerClass** player,
|
||||||
AudioTraits::DeleteSampleFunc** destroy, Filename) {
|
AudioTraits::DeleteSampleFunc** destroy, Filename) {
|
||||||
*sample = new NullSample();
|
*sample = new NullSample();
|
||||||
|
*state = new NullPlaying();
|
||||||
*player = new NullPlayer();
|
*player = new NullPlayer();
|
||||||
*destroy = AudioDestroySt;
|
*destroy = AudioDestroySt;
|
||||||
}
|
}
|
||||||
|
@ -20,11 +20,13 @@ void AudioDestroyWav(AudioTraits::SampleClass* sample) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AudioLoadWav(AudioTraits::SampleClass** sample,
|
void AudioLoadWav(AudioTraits::SampleClass** sample,
|
||||||
|
AudioTraits::PlayingClass** state,
|
||||||
AudioTraits::PlayerClass** player,
|
AudioTraits::PlayerClass** player,
|
||||||
AudioTraits::DeleteSampleFunc** destroy, Filename filename) {
|
AudioTraits::DeleteSampleFunc** destroy, Filename filename) {
|
||||||
*sample = MikModSample::load_wav(filename);
|
*sample = MikModSample::load_wav(filename);
|
||||||
if (*sample == (AudioTraits::SampleClass*)0L)
|
if (*sample == (AudioTraits::SampleClass*)0L)
|
||||||
return;
|
return;
|
||||||
|
*state = *sample->get_state();
|
||||||
*player = MikModSamplePlayer::get_instance();
|
*player = MikModSamplePlayer::get_instance();
|
||||||
*destroy = AudioDestroyWav;
|
*destroy = AudioDestroyWav;
|
||||||
}
|
}
|
||||||
@ -40,11 +42,13 @@ void AudioDestroyWav(AudioTraits::SampleClass* sample) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AudioLoadWav(AudioTraits::SampleClass** sample,
|
void AudioLoadWav(AudioTraits::SampleClass** sample,
|
||||||
|
AudioTraits::PlayingClass** state,
|
||||||
AudioTraits::PlayerClass** player,
|
AudioTraits::PlayerClass** player,
|
||||||
AudioTraits::DeleteSampleFunc** destroy, Filename filename) {
|
AudioTraits::DeleteSampleFunc** destroy, Filename filename) {
|
||||||
*sample = WinSample::load_wav(filename);
|
*sample = WinSample::load_wav(filename);
|
||||||
if (*sample == (AudioTraits::SampleClass*)0L)
|
if (*sample == (AudioTraits::SampleClass*)0L)
|
||||||
return;
|
return;
|
||||||
|
*state = *sample->get_state();
|
||||||
*player = WinPlayer::get_instance();
|
*player = WinPlayer::get_instance();
|
||||||
*destroy = AudioDestroyWav;
|
*destroy = AudioDestroyWav;
|
||||||
}
|
}
|
||||||
@ -53,14 +57,20 @@ void AudioLoadWav(AudioTraits::SampleClass** sample,
|
|||||||
|
|
||||||
#ifdef AUDIO_USE_LINUX
|
#ifdef AUDIO_USE_LINUX
|
||||||
|
|
||||||
|
#include "audio_linux_traits.h"
|
||||||
|
|
||||||
void AudioDestroyWav(AudioTraits::SampleClass* sample) {
|
void AudioDestroyWav(AudioTraits::SampleClass* sample) {
|
||||||
delete sample;
|
LinuxSample::destroy(sample);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioLoadWav(AudioTraits::SampleClass** sample,
|
void AudioLoadWav(AudioTraits::SampleClass** sample,
|
||||||
|
AudioTraits::PlayingClass** state,
|
||||||
AudioTraits::PlayerClass** player,
|
AudioTraits::PlayerClass** player,
|
||||||
AudioTraits::DeleteSampleFunc** destroy, Filename) {
|
AudioTraits::DeleteSampleFunc** destroy, Filename) {
|
||||||
|
audio_cat->error() << "Linux driver does not natively support WAV."
|
||||||
|
<< " Try the 'st' loader." << endl;
|
||||||
*sample = (AudioTraits::SampleClass*)0L;
|
*sample = (AudioTraits::SampleClass*)0L;
|
||||||
|
*state = (AudioTraits::PlayingClass*)0L;
|
||||||
*player = (AudioTraits::PlayerClass*)0L;
|
*player = (AudioTraits::PlayerClass*)0L;
|
||||||
*destroy = AudioDestroyWav;
|
*destroy = AudioDestroyWav;
|
||||||
}
|
}
|
||||||
@ -77,11 +87,11 @@ void AudioDestroyWav(AudioTraits::SampleClass* sample) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AudioLoadWav(AudioTraits::SampleClass** sample,
|
void AudioLoadWav(AudioTraits::SampleClass** sample,
|
||||||
|
AudioTraits::PlayingClass** state,
|
||||||
AudioTraits::PlayerClass** player,
|
AudioTraits::PlayerClass** player,
|
||||||
AudioTraits::DeleteSampleFunc** destroy, Filename) {
|
AudioTraits::DeleteSampleFunc** destroy, Filename) {
|
||||||
audio_cat->error() << "Linux driver does not natively support WAV."
|
|
||||||
<< " Try the 'st' loader." << endl;
|
|
||||||
*sample = new NullSample();
|
*sample = new NullSample();
|
||||||
|
*state = new NullPlaying();
|
||||||
*player = new NullPlayer();
|
*player = new NullPlayer();
|
||||||
*destroy = AudioDestroyWav;
|
*destroy = AudioDestroyWav;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user