mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 10:22:45 -04:00
whee
This commit is contained in:
parent
bf0c865d0b
commit
fe6ae687a2
@ -270,24 +270,10 @@ AudioTraits::PlayerClass* LinuxSample::get_player(void) const {
|
|||||||
return LinuxSamplePlayer::get_instance();
|
return LinuxSamplePlayer::get_instance();
|
||||||
}
|
}
|
||||||
|
|
||||||
// REFCOUNT
|
|
||||||
/*
|
|
||||||
AudioTraits::DeleteSoundFunc* LinuxSample::get_destroy(void) const {
|
|
||||||
return LinuxSample::destroy;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
AudioTraits::DeletePlayingFunc* LinuxSample::get_delstate(void) const {
|
AudioTraits::DeletePlayingFunc* LinuxSample::get_delstate(void) const {
|
||||||
return LinuxSamplePlaying::destroy;
|
return LinuxSamplePlaying::destroy;
|
||||||
}
|
}
|
||||||
|
|
||||||
// REFCOUNT
|
|
||||||
/*
|
|
||||||
void LinuxSample::destroy(AudioTraits::SoundClass* sound) {
|
|
||||||
delete sound;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
LinuxSample* LinuxSample::load_raw(byte* data, unsigned long size) {
|
LinuxSample* LinuxSample::load_raw(byte* data, unsigned long size) {
|
||||||
LinuxSample* ret = new LinuxSample(data, size);
|
LinuxSample* ret = new LinuxSample(data, size);
|
||||||
return ret;
|
return ret;
|
||||||
@ -308,24 +294,10 @@ AudioTraits::PlayerClass* LinuxMusic::get_player(void) const {
|
|||||||
return LinuxMusicPlayer::get_instance();
|
return LinuxMusicPlayer::get_instance();
|
||||||
}
|
}
|
||||||
|
|
||||||
// REFCOUNT
|
|
||||||
/*
|
|
||||||
AudioTraits::DeleteSoundFunc* LinuxMusic::get_destroy(void) const {
|
|
||||||
return LinuxMusic::destroy;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
AudioTraits::DeletePlayingFunc* LinuxMusic::get_delstate(void) const {
|
AudioTraits::DeletePlayingFunc* LinuxMusic::get_delstate(void) const {
|
||||||
return LinuxMusicPlaying::destroy;
|
return LinuxMusicPlaying::destroy;
|
||||||
}
|
}
|
||||||
|
|
||||||
// REFCOUNT
|
|
||||||
/*
|
|
||||||
void LinuxMusic::destroy(AudioTraits::SoundClass* music) {
|
|
||||||
delete music;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
LinuxSamplePlaying::~LinuxSamplePlaying(void) {
|
LinuxSamplePlaying::~LinuxSamplePlaying(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -358,9 +330,18 @@ LinuxSamplePlayer::~LinuxSamplePlayer(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void LinuxSamplePlayer::play_sound(AudioTraits::SoundClass*,
|
void LinuxSamplePlayer::play_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass* playing) {
|
AudioTraits::PlayingClass* playing,
|
||||||
|
float start_time) {
|
||||||
initialize();
|
initialize();
|
||||||
LinuxSamplePlaying* lplaying = (LinuxSamplePlaying*)playing;
|
LinuxSamplePlaying* lplaying = (LinuxSamplePlaying*)playing;
|
||||||
|
unsigned long l = lplaying->get_data()->get_size();
|
||||||
|
float factor = ((float)l) / (audio_mix_freq * 2. * sample_size);
|
||||||
|
factor = start_time / factor;
|
||||||
|
if (factor > 1.)
|
||||||
|
factor = 1.;
|
||||||
|
unsigned long p = (unsigned long)(l * factor);
|
||||||
|
p = ( p >> 2 ) << 2; // zero the last 2 bits
|
||||||
|
lplaying->get_data()->reset(p);
|
||||||
buffers.insert(lplaying->get_data());
|
buffers.insert(lplaying->get_data());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -387,7 +368,7 @@ LinuxMusicPlayer::~LinuxMusicPlayer(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void LinuxMusicPlayer::play_sound(AudioTraits::SoundClass*,
|
void LinuxMusicPlayer::play_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*) {
|
AudioTraits::PlayingClass*, float) {
|
||||||
initialize();
|
initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,9 +51,9 @@ public:
|
|||||||
INLINE unsigned long get_size(void) const {
|
INLINE unsigned long get_size(void) const {
|
||||||
return _size;
|
return _size;
|
||||||
}
|
}
|
||||||
INLINE void reset(void) {
|
INLINE void reset(unsigned long p = 0) {
|
||||||
_done = false;
|
_done = false;
|
||||||
_pos = 0;
|
_pos = p;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -70,9 +70,6 @@ public:
|
|||||||
virtual float length(void) const;
|
virtual float length(void) const;
|
||||||
virtual AudioTraits::PlayingClass* get_state(void) const;
|
virtual AudioTraits::PlayingClass* get_state(void) const;
|
||||||
virtual AudioTraits::PlayerClass* get_player(void) const;
|
virtual AudioTraits::PlayerClass* get_player(void) const;
|
||||||
// REFCOUNT
|
|
||||||
// virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
|
|
||||||
// static void destroy(AudioTraits::SoundClass*);
|
|
||||||
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
|
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
|
||||||
public:
|
public:
|
||||||
// used by the loader
|
// used by the loader
|
||||||
@ -90,9 +87,6 @@ public:
|
|||||||
virtual float length(void) const;
|
virtual float length(void) const;
|
||||||
virtual AudioTraits::PlayingClass* get_state(void) const;
|
virtual AudioTraits::PlayingClass* get_state(void) const;
|
||||||
virtual AudioTraits::PlayerClass* get_player(void) const;
|
virtual AudioTraits::PlayerClass* get_player(void) const;
|
||||||
// REFCOUNT
|
|
||||||
// virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
|
|
||||||
// static void destroy(AudioTraits::SoundClass*);
|
|
||||||
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
|
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -123,7 +117,7 @@ public:
|
|||||||
virtual ~LinuxSamplePlayer(void);
|
virtual ~LinuxSamplePlayer(void);
|
||||||
|
|
||||||
virtual void play_sound(AudioTraits::SoundClass*,
|
virtual void play_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*);
|
AudioTraits::PlayingClass*, float);
|
||||||
virtual void stop_sound(AudioTraits::SoundClass*,
|
virtual void stop_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*);
|
AudioTraits::PlayingClass*);
|
||||||
virtual void set_volume(AudioTraits::PlayingClass*, float);
|
virtual void set_volume(AudioTraits::PlayingClass*, float);
|
||||||
@ -140,7 +134,7 @@ public:
|
|||||||
virtual ~LinuxMusicPlayer(void);
|
virtual ~LinuxMusicPlayer(void);
|
||||||
|
|
||||||
virtual void play_sound(AudioTraits::SoundClass*,
|
virtual void play_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*);
|
AudioTraits::PlayingClass*, float);
|
||||||
virtual void stop_sound(AudioTraits::SoundClass*,
|
virtual void stop_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*);
|
AudioTraits::PlayingClass*);
|
||||||
virtual void set_volume(AudioTraits::PlayingClass*, float);
|
virtual void set_volume(AudioTraits::PlayingClass*, float);
|
||||||
|
@ -8,9 +8,9 @@
|
|||||||
// Access: Public, Static
|
// Access: Public, Static
|
||||||
// Description: Play some audio
|
// Description: Play some audio
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
INLINE void AudioManager::play(AudioSound* sound) {
|
INLINE void AudioManager::play(AudioSound* sound, float start_time) {
|
||||||
if (audio_is_active)
|
if (audio_is_active)
|
||||||
get_ptr()->ns_play(sound);
|
get_ptr()->ns_play(sound, start_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
@ -84,10 +84,11 @@ AudioManager* AudioManager::get_ptr(void) {
|
|||||||
// Access: Private
|
// Access: Private
|
||||||
// Description: get the player off the sound, and start it playing
|
// Description: get the player off the sound, and start it playing
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
void AudioManager::ns_play(AudioSound* sound) {
|
void AudioManager::ns_play(AudioSound* sound, float start_time) {
|
||||||
if (sound->status() == AudioSound::PLAYING)
|
if (sound->status() == AudioSound::PLAYING)
|
||||||
this->ns_stop(sound);
|
this->ns_stop(sound);
|
||||||
sound->get_player()->play_sound(sound->get_sound(), sound->get_state());
|
sound->get_player()->play_sound(sound->get_sound(), sound->get_state(),
|
||||||
|
start_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
@ -18,7 +18,7 @@ class EXPCL_PANDA AudioManager {
|
|||||||
private:
|
private:
|
||||||
INLINE AudioManager(void);
|
INLINE AudioManager(void);
|
||||||
|
|
||||||
void ns_play(AudioSound*);
|
void ns_play(AudioSound*, float);
|
||||||
void ns_stop(AudioSound*);
|
void ns_stop(AudioSound*);
|
||||||
void ns_set_loop(AudioSound*, bool);
|
void ns_set_loop(AudioSound*, bool);
|
||||||
bool ns_get_loop(AudioSound*);
|
bool ns_get_loop(AudioSound*);
|
||||||
@ -47,7 +47,7 @@ public:
|
|||||||
static void set_shutdown_func(ShutdownFunc*);
|
static void set_shutdown_func(ShutdownFunc*);
|
||||||
|
|
||||||
PUBLISHED:
|
PUBLISHED:
|
||||||
INLINE static void play(AudioSound*);
|
INLINE static void play(AudioSound*, float = 0.);
|
||||||
INLINE static void stop(AudioSound*);
|
INLINE static void stop(AudioSound*);
|
||||||
INLINE static void set_loop(AudioSound*, bool);
|
INLINE static void set_loop(AudioSound*, bool);
|
||||||
INLINE static bool get_loop(AudioSound*);
|
INLINE static bool get_loop(AudioSound*);
|
||||||
|
@ -145,13 +145,6 @@ AudioTraits::PlayerClass* MikModSample::get_player(void) const {
|
|||||||
return MikModSamplePlayer::get_instance();
|
return MikModSamplePlayer::get_instance();
|
||||||
}
|
}
|
||||||
|
|
||||||
// REFCOUNT
|
|
||||||
/*
|
|
||||||
AudioTraits::DeleteSoundFunc* MikModSample::get_destroy(void) const {
|
|
||||||
return MikModSample::destroy;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
AudioTraits::DeletePlayingFunc* MikModSample::get_delstate(void) const {
|
AudioTraits::DeletePlayingFunc* MikModSample::get_delstate(void) const {
|
||||||
return MikModSamplePlaying::destroy;
|
return MikModSamplePlaying::destroy;
|
||||||
}
|
}
|
||||||
@ -167,13 +160,6 @@ MikModSample* MikModSample::load_wav(Filename filename) {
|
|||||||
return new MikModSample(sample);
|
return new MikModSample(sample);
|
||||||
}
|
}
|
||||||
|
|
||||||
// REFCOUNT
|
|
||||||
/*
|
|
||||||
void MikModSample::destroy(AudioTraits::SoundClass* sample) {
|
|
||||||
delete sample;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
SAMPLE* MikModSample::get_sample(void) {
|
SAMPLE* MikModSample::get_sample(void) {
|
||||||
return _sample;
|
return _sample;
|
||||||
}
|
}
|
||||||
@ -200,24 +186,10 @@ AudioTraits::PlayerClass* MikModMusic::get_player(void) const {
|
|||||||
return MikModFmsynthPlayer::get_instance();
|
return MikModFmsynthPlayer::get_instance();
|
||||||
}
|
}
|
||||||
|
|
||||||
// REFCOUNT
|
|
||||||
/*
|
|
||||||
AudioTraits::DeleteSoundFunc* MikModMusic::get_destroy(void) const {
|
|
||||||
return MikModMusic::destroy;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
AudioTraits::DeletePlayingFunc* MikModMusic::get_delstate(void) const {
|
AudioTraits::DeletePlayingFunc* MikModMusic::get_delstate(void) const {
|
||||||
return MikModMusicPlaying::destroy;
|
return MikModMusicPlaying::destroy;
|
||||||
}
|
}
|
||||||
|
|
||||||
// REFCOUNT
|
|
||||||
/*
|
|
||||||
void MikModMusic::destroy(AudioTraits::SoundClass* music) {
|
|
||||||
delete music;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
MikModMidi::MikModMidi(void) {
|
MikModMidi::MikModMidi(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,24 +213,10 @@ AudioTraits::PlayerClass* MikModMidi::get_player(void) const {
|
|||||||
return MikModMidiPlayer::get_instance();
|
return MikModMidiPlayer::get_instance();
|
||||||
}
|
}
|
||||||
|
|
||||||
// REFCOUNT
|
|
||||||
/*
|
|
||||||
AudioTraits::DeleteSoundFunc* MikModMidi::get_destroy(void) const {
|
|
||||||
return MikModMidi::destroy;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
AudioTraits::DeletePlayingFunc* MikModMidi::get_delstate(void) const {
|
AudioTraits::DeletePlayingFunc* MikModMidi::get_delstate(void) const {
|
||||||
return MikModMidiPlaying::destroy;
|
return MikModMidiPlaying::destroy;
|
||||||
}
|
}
|
||||||
|
|
||||||
// REFCOUNT
|
|
||||||
/*
|
|
||||||
void MikModMidi::destroy(AudioTraits::SoundClass* music) {
|
|
||||||
delete music;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
MikModSamplePlaying::MikModSamplePlaying(AudioTraits::SoundClass* s)
|
MikModSamplePlaying::MikModSamplePlaying(AudioTraits::SoundClass* s)
|
||||||
: AudioTraits::PlayingClass(s) {
|
: AudioTraits::PlayingClass(s) {
|
||||||
}
|
}
|
||||||
@ -322,7 +280,8 @@ MikModSamplePlayer::~MikModSamplePlayer(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MikModSamplePlayer::play_sound(AudioTraits::SoundClass* sample,
|
void MikModSamplePlayer::play_sound(AudioTraits::SoundClass* sample,
|
||||||
AudioTraits::PlayingClass* playing) {
|
AudioTraits::PlayingClass* playing,
|
||||||
|
float) {
|
||||||
if (!have_initialized)
|
if (!have_initialized)
|
||||||
initialize();
|
initialize();
|
||||||
if (!MikMod_Active()) {
|
if (!MikMod_Active()) {
|
||||||
@ -372,7 +331,7 @@ MikModFmsynthPlayer::~MikModFmsynthPlayer(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MikModFmsynthPlayer::play_sound(AudioTraits::SoundClass*,
|
void MikModFmsynthPlayer::play_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*) {
|
AudioTraits::PlayingClass*, float) {
|
||||||
audio_cat->error() << "trying to play a sample with a MikModFmsynthPlayer"
|
audio_cat->error() << "trying to play a sample with a MikModFmsynthPlayer"
|
||||||
<< endl;
|
<< endl;
|
||||||
}
|
}
|
||||||
@ -401,7 +360,7 @@ MikModMidiPlayer::~MikModMidiPlayer(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MikModMidiPlayer::play_sound(AudioTraits::SoundClass*,
|
void MikModMidiPlayer::play_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*) {
|
AudioTraits::PlayingClass*, float) {
|
||||||
audio_cat->error() << "trying to play a sample with a MikModMidiPlayer"
|
audio_cat->error() << "trying to play a sample with a MikModMidiPlayer"
|
||||||
<< endl;
|
<< endl;
|
||||||
}
|
}
|
||||||
|
@ -27,14 +27,10 @@ public:
|
|||||||
virtual float length(void) const;
|
virtual float length(void) const;
|
||||||
virtual AudioTraits::PlayingClass* get_state(void) const;
|
virtual AudioTraits::PlayingClass* get_state(void) const;
|
||||||
virtual AudioTraits::PlayerClass* get_player(void) const;
|
virtual AudioTraits::PlayerClass* get_player(void) const;
|
||||||
// REFCOUNT
|
|
||||||
// virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
|
|
||||||
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
|
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
|
||||||
public:
|
public:
|
||||||
// used by the readers
|
// used by the readers
|
||||||
static MikModSample* load_wav(Filename);
|
static MikModSample* load_wav(Filename);
|
||||||
// REFCOUNT
|
|
||||||
// static void destroy(AudioTraits::SoundClass*);
|
|
||||||
// used by the players
|
// used by the players
|
||||||
virtual SAMPLE* get_sample(void);
|
virtual SAMPLE* get_sample(void);
|
||||||
virtual int get_freq(void);
|
virtual int get_freq(void);
|
||||||
@ -50,9 +46,6 @@ public:
|
|||||||
virtual float length(void) const;
|
virtual float length(void) const;
|
||||||
virtual AudioTraits::PlayingClass* get_state(void) const;
|
virtual AudioTraits::PlayingClass* get_state(void) const;
|
||||||
virtual AudioTraits::PlayerClass* get_player(void) const;
|
virtual AudioTraits::PlayerClass* get_player(void) const;
|
||||||
// REFCOUNT
|
|
||||||
// virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
|
|
||||||
// static void destroy(AudioTraits::SoundClass*);
|
|
||||||
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
|
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -65,9 +58,6 @@ public:
|
|||||||
virtual float length(void) const;
|
virtual float length(void) const;
|
||||||
virtual AudioTraits::PlayingClass* get_state(void) const;
|
virtual AudioTraits::PlayingClass* get_state(void) const;
|
||||||
virtual AudioTraits::PlayerClass* get_player(void) const;
|
virtual AudioTraits::PlayerClass* get_player(void) const;
|
||||||
// REFCOUNT
|
|
||||||
// virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
|
|
||||||
// static void destroy(AudioTraits::SoundClass*);
|
|
||||||
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
|
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
|
||||||
public:
|
public:
|
||||||
// used by the readers
|
// used by the readers
|
||||||
@ -112,7 +102,7 @@ public:
|
|||||||
virtual ~MikModSamplePlayer(void);
|
virtual ~MikModSamplePlayer(void);
|
||||||
|
|
||||||
virtual void play_sound(AudioTraits::SoundClass*,
|
virtual void play_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*);
|
AudioTraits::PlayingClass*, float);
|
||||||
virtual void stop_sound(AudioTraits::SoundClass*,
|
virtual void stop_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*);
|
AudioTraits::PlayingClass*);
|
||||||
virtual void set_volume(AudioTraits::PlayingClass*, float);
|
virtual void set_volume(AudioTraits::PlayingClass*, float);
|
||||||
@ -129,7 +119,7 @@ public:
|
|||||||
virtual ~MikModFmsynthPlayer(void);
|
virtual ~MikModFmsynthPlayer(void);
|
||||||
|
|
||||||
virtual void play_sound(AudioTraits::SoundClass*,
|
virtual void play_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*);
|
AudioTraits::PlayingClass*, float);
|
||||||
virtual void stop_sound(AudioTraits::SoundClass*,
|
virtual void stop_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*);
|
AudioTraits::PlayingClass*);
|
||||||
virtual void set_volume(AudioTraits::PlayingClass*, float);
|
virtual void set_volume(AudioTraits::PlayingClass*, float);
|
||||||
@ -146,7 +136,7 @@ public:
|
|||||||
virtual ~MikModMidiPlayer(void);
|
virtual ~MikModMidiPlayer(void);
|
||||||
|
|
||||||
virtual void play_sound(AudioTraits::SoundClass*,
|
virtual void play_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*);
|
AudioTraits::PlayingClass*, float);
|
||||||
virtual void stop_sound(AudioTraits::SoundClass*,
|
virtual void stop_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*);
|
AudioTraits::PlayingClass*);
|
||||||
virtual void set_volume(AudioTraits::PlayingClass*, float);
|
virtual void set_volume(AudioTraits::PlayingClass*, float);
|
||||||
|
@ -41,24 +41,11 @@ AudioTraits::PlayerClass* NullSound::get_player(void) const {
|
|||||||
return new NullPlayer();
|
return new NullPlayer();
|
||||||
}
|
}
|
||||||
|
|
||||||
// REFCOUNT
|
|
||||||
/*
|
|
||||||
AudioTraits::DeleteSoundFunc* NullSound::get_destroy(void) const {
|
|
||||||
return NullSound::destroy;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
AudioTraits::DeletePlayingFunc* NullSound::get_delstate(void) const {
|
AudioTraits::DeletePlayingFunc* NullSound::get_delstate(void) const {
|
||||||
return NullPlaying::destroy;
|
return NullPlaying::destroy;
|
||||||
}
|
}
|
||||||
|
|
||||||
// REFCOUNT
|
|
||||||
/*
|
|
||||||
void NullSound::destroy(AudioTraits::SoundClass* sound) {
|
|
||||||
delete sound;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
NullPlaying::~NullPlaying(void) {
|
NullPlaying::~NullPlaying(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,7 +63,7 @@ NullPlayer::~NullPlayer(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void NullPlayer::play_sound(AudioTraits::SoundClass*,
|
void NullPlayer::play_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*) {
|
AudioTraits::PlayingClass*, float) {
|
||||||
if (audio_cat->is_debug())
|
if (audio_cat->is_debug())
|
||||||
audio_cat->debug() << "in play sound in Null audio driver" << endl;
|
audio_cat->debug() << "in play sound in Null audio driver" << endl;
|
||||||
}
|
}
|
||||||
|
@ -21,9 +21,6 @@ public:
|
|||||||
virtual float length(void) const;
|
virtual float length(void) const;
|
||||||
virtual AudioTraits::PlayingClass* get_state(void) const;
|
virtual AudioTraits::PlayingClass* get_state(void) const;
|
||||||
virtual AudioTraits::PlayerClass* get_player(void) const;
|
virtual AudioTraits::PlayerClass* get_player(void) const;
|
||||||
// REFCOUNT
|
|
||||||
// virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
|
|
||||||
// static void destroy(AudioTraits::SoundClass*);
|
|
||||||
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
|
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -42,7 +39,7 @@ public:
|
|||||||
virtual ~NullPlayer(void);
|
virtual ~NullPlayer(void);
|
||||||
|
|
||||||
virtual void play_sound(AudioTraits::SoundClass*,
|
virtual void play_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*);
|
AudioTraits::PlayingClass*, float);
|
||||||
virtual void stop_sound(AudioTraits::SoundClass*,
|
virtual void stop_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*);
|
AudioTraits::PlayingClass*);
|
||||||
virtual void set_volume(AudioTraits::PlayingClass*, float);
|
virtual void set_volume(AudioTraits::PlayingClass*, float);
|
||||||
|
@ -24,15 +24,6 @@ AudioTraits::PlayerClass* AudioTraits::SoundClass::get_player(void) const {
|
|||||||
return (AudioTraits::PlayerClass*)0L;
|
return (AudioTraits::PlayerClass*)0L;
|
||||||
}
|
}
|
||||||
|
|
||||||
// REFCOUNT
|
|
||||||
/*
|
|
||||||
AudioTraits::DeleteSoundFunc*
|
|
||||||
AudioTraits::SoundClass::get_destroy(void) const {
|
|
||||||
audio_cat->error() << "In abstract SoundClass::get_destroy!" << endl;
|
|
||||||
return (AudioTraits::DeleteSoundFunc*)0L;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
AudioTraits::DeletePlayingFunc*
|
AudioTraits::DeletePlayingFunc*
|
||||||
AudioTraits::SoundClass::get_delstate(void) const {
|
AudioTraits::SoundClass::get_delstate(void) const {
|
||||||
audio_cat->error() << "In abstract SoundClass::get_delstate!" << endl;
|
audio_cat->error() << "In abstract SoundClass::get_delstate!" << endl;
|
||||||
@ -52,7 +43,7 @@ AudioTraits::PlayerClass::~PlayerClass(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AudioTraits::PlayerClass::play_sound(AudioTraits::SoundClass*,
|
void AudioTraits::PlayerClass::play_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*) {
|
AudioTraits::PlayingClass*, float) {
|
||||||
audio_cat->error() << "In abstract PlayerClass::play_sound!" << endl;
|
audio_cat->error() << "In abstract PlayerClass::play_sound!" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,8 +26,6 @@ public:
|
|||||||
virtual float length(void) const = 0;
|
virtual float length(void) const = 0;
|
||||||
virtual PlayingClass* get_state(void) const = 0;
|
virtual PlayingClass* get_state(void) const = 0;
|
||||||
virtual PlayerClass* get_player(void) const = 0;
|
virtual PlayerClass* get_player(void) const = 0;
|
||||||
// REFCOUNT
|
|
||||||
// virtual DeleteSoundFunc* get_destroy(void) const = 0;
|
|
||||||
virtual DeletePlayingFunc* get_delstate(void) const = 0;
|
virtual DeletePlayingFunc* get_delstate(void) const = 0;
|
||||||
};
|
};
|
||||||
class EXPCL_PANDA PlayingClass {
|
class EXPCL_PANDA PlayingClass {
|
||||||
@ -46,7 +44,7 @@ public:
|
|||||||
PlayerClass(void) {}
|
PlayerClass(void) {}
|
||||||
virtual ~PlayerClass(void);
|
virtual ~PlayerClass(void);
|
||||||
|
|
||||||
virtual void play_sound(SoundClass*, PlayingClass*) = 0;
|
virtual void play_sound(SoundClass*, PlayingClass*, float) = 0;
|
||||||
virtual void stop_sound(SoundClass*, PlayingClass*) = 0;
|
virtual void stop_sound(SoundClass*, PlayingClass*) = 0;
|
||||||
virtual void set_volume(PlayingClass*, float) = 0;
|
virtual void set_volume(PlayingClass*, float) = 0;
|
||||||
};
|
};
|
||||||
|
@ -7,6 +7,14 @@ INLINE WinSample::WinSample(void) : AudioTraits::SoundClass(), _data(NULL),
|
|||||||
_len(0) {
|
_len(0) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
INLINE DWORD WinSample::get_length(void) const {
|
||||||
|
return _len;
|
||||||
|
}
|
||||||
|
|
||||||
|
INLINE WAVEFORMATEX WinSample::get_format(void) const {
|
||||||
|
return _info;
|
||||||
|
}
|
||||||
|
|
||||||
INLINE WinMusic::WinMusic(void) : AudioTraits::SoundClass(),
|
INLINE WinMusic::WinMusic(void) : AudioTraits::SoundClass(),
|
||||||
_performance(NULL), _music(NULL),
|
_performance(NULL), _music(NULL),
|
||||||
_buffer(NULL), _synth(NULL) {
|
_buffer(NULL), _synth(NULL) {
|
||||||
|
@ -183,10 +183,9 @@ WinSample::~WinSample(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
float WinSample::length(void) const {
|
float WinSample::length(void) const {
|
||||||
// DO THIS
|
|
||||||
if (audio_cat->is_debug())
|
if (audio_cat->is_debug())
|
||||||
audio_cat->debug() << "winsample length called" << endl;
|
audio_cat->debug() << "winsample length called" << endl;
|
||||||
return 0.;
|
return _len / (audio_mix_freq * 2. * 2.);
|
||||||
}
|
}
|
||||||
|
|
||||||
AudioTraits::PlayingClass* WinSample::get_state(void) const {
|
AudioTraits::PlayingClass* WinSample::get_state(void) const {
|
||||||
@ -801,7 +800,7 @@ WinSamplePlayer::~WinSamplePlayer(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void WinSamplePlayer::play_sound(AudioTraits::SoundClass* sample,
|
void WinSamplePlayer::play_sound(AudioTraits::SoundClass* sample,
|
||||||
AudioTraits::PlayingClass* play) {
|
AudioTraits::PlayingClass* play, float start_time) {
|
||||||
if (audio_cat->is_debug())
|
if (audio_cat->is_debug())
|
||||||
audio_cat->debug() << "in winsampleplayer play_sound" << endl;
|
audio_cat->debug() << "in winsampleplayer play_sound" << endl;
|
||||||
initialize();
|
initialize();
|
||||||
@ -812,6 +811,15 @@ void WinSamplePlayer::play_sound(AudioTraits::SoundClass* sample,
|
|||||||
LPDIRECTSOUNDBUFFER chan = wplay->get_channel();
|
LPDIRECTSOUNDBUFFER chan = wplay->get_channel();
|
||||||
if (chan) {
|
if (chan) {
|
||||||
chan->Stop();
|
chan->Stop();
|
||||||
|
DWORD l = wsample->get_length();
|
||||||
|
WAVEFORMATEX f = wsample->get_format();
|
||||||
|
float factor = ((float)l) / wsample->get_format().nAvgBytesPerSec;
|
||||||
|
factor = start_time / factor;
|
||||||
|
if (factor > 1.)
|
||||||
|
factor = 1.;
|
||||||
|
DWORD p = (DWORD)(l * factor);
|
||||||
|
p = (p >> 2) << 2; // zero the last 2 bits
|
||||||
|
chan->SetCurrentPosition(p);
|
||||||
HRESULT result = chan->Play(0, 0, 0);
|
HRESULT result = chan->Play(0, 0, 0);
|
||||||
if (FAILED(result))
|
if (FAILED(result))
|
||||||
audio_cat->error() << "sample play failed" << endl;
|
audio_cat->error() << "sample play failed" << endl;
|
||||||
@ -864,7 +872,7 @@ WinMusicPlayer::~WinMusicPlayer(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void WinMusicPlayer::play_sound(AudioTraits::SoundClass* music,
|
void WinMusicPlayer::play_sound(AudioTraits::SoundClass* music,
|
||||||
AudioTraits::PlayingClass*) {
|
AudioTraits::PlayingClass*, float) {
|
||||||
if (audio_cat->is_debug())
|
if (audio_cat->is_debug())
|
||||||
audio_cat->debug() << "in WinMusicPlayer::play_sound()" << endl;
|
audio_cat->debug() << "in WinMusicPlayer::play_sound()" << endl;
|
||||||
initialize();
|
initialize();
|
||||||
|
@ -30,14 +30,14 @@ public:
|
|||||||
virtual float length(void) const;
|
virtual float length(void) const;
|
||||||
virtual AudioTraits::PlayingClass* get_state(void) const;
|
virtual AudioTraits::PlayingClass* get_state(void) const;
|
||||||
virtual AudioTraits::PlayerClass* get_player(void) const;
|
virtual AudioTraits::PlayerClass* get_player(void) const;
|
||||||
// REFCOUNT
|
|
||||||
// virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
|
|
||||||
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
|
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
|
||||||
|
|
||||||
|
// used by play_sound
|
||||||
|
INLINE DWORD get_length(void) const;
|
||||||
|
INLINE WAVEFORMATEX get_format(void) const;
|
||||||
public:
|
public:
|
||||||
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);
|
||||||
// REFCOUNT
|
|
||||||
// static void destroy(AudioTraits::SoundClass*);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class EXPCL_PANDA WinMusic : public AudioTraits::SoundClass {
|
class EXPCL_PANDA WinMusic : public AudioTraits::SoundClass {
|
||||||
@ -46,8 +46,6 @@ private:
|
|||||||
IDirectMusicSegment* _music;
|
IDirectMusicSegment* _music;
|
||||||
IDirectSoundBuffer* _buffer;
|
IDirectSoundBuffer* _buffer;
|
||||||
IDirectMusicPort* _synth;
|
IDirectMusicPort* _synth;
|
||||||
// BYTE* _data;
|
|
||||||
// DWORD _len;
|
|
||||||
|
|
||||||
void init(void);
|
void init(void);
|
||||||
public:
|
public:
|
||||||
@ -57,9 +55,6 @@ public:
|
|||||||
virtual float length(void) const;
|
virtual float length(void) const;
|
||||||
virtual AudioTraits::PlayingClass* get_state(void) const;
|
virtual AudioTraits::PlayingClass* get_state(void) const;
|
||||||
virtual AudioTraits::PlayerClass* get_player(void) const;
|
virtual AudioTraits::PlayerClass* get_player(void) const;
|
||||||
// REFCOUNT
|
|
||||||
// virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
|
|
||||||
// static void destroy(AudioTraits::SoundClass*);
|
|
||||||
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
|
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
|
||||||
// these are used by the loaders
|
// these are used by the loaders
|
||||||
static WinMusic* load_midi(Filename);
|
static WinMusic* load_midi(Filename);
|
||||||
@ -101,7 +96,7 @@ public:
|
|||||||
virtual ~WinSamplePlayer(void);
|
virtual ~WinSamplePlayer(void);
|
||||||
|
|
||||||
virtual void play_sound(AudioTraits::SoundClass*,
|
virtual void play_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*);
|
AudioTraits::PlayingClass*, float);
|
||||||
virtual void stop_sound(AudioTraits::SoundClass*,
|
virtual void stop_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*);
|
AudioTraits::PlayingClass*);
|
||||||
virtual void set_volume(AudioTraits::PlayingClass*, float);
|
virtual void set_volume(AudioTraits::PlayingClass*, float);
|
||||||
@ -118,7 +113,7 @@ public:
|
|||||||
virtual ~WinMusicPlayer(void);
|
virtual ~WinMusicPlayer(void);
|
||||||
|
|
||||||
virtual void play_sound(AudioTraits::SoundClass*,
|
virtual void play_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*);
|
AudioTraits::PlayingClass*, float);
|
||||||
virtual void stop_sound(AudioTraits::SoundClass*,
|
virtual void stop_sound(AudioTraits::SoundClass*,
|
||||||
AudioTraits::PlayingClass*);
|
AudioTraits::PlayingClass*);
|
||||||
virtual void set_volume(AudioTraits::PlayingClass*, float);
|
virtual void set_volume(AudioTraits::PlayingClass*, float);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user