dosgame1/audio/AudioPlayer.h

63 lines
1.3 KiB
C++

#ifndef GAME_AUDIOPLAYER_H
#define GAME_AUDIOPLAYER_H
#include "Audio.h"
#include "Music.h"
#include "rad20player.h"
#define AUDIO_CHANNELS 8
#define AUDIO_MAX_PRIORITY 7
#define AUDIO_PLAY_LOOP 0x01
#define AUDIO_PLAY_FIXED_PRIORITY 0x02
class AudioPlayer {
public:
AudioPlayer();
~AudioPlayer();
void playMusic(Music &music);
void stopMusic();
void pauseMusic();
void resumeMusic();
void playAudio(Audio &audio, int priority, int flags = 0);
bool isPlaying(const Audio & audio);
void stopAudio(Audio &audio);
void stopAllAudio();
void generateSamples(uint8_t *buffer, size_t size);
private:
friend class Music;
friend void radPlayerWriteReg(void *p, uint16_t reg, uint8_t data);
friend void audioPlayerOnTimer();
RADPlayer _musicPlayer;
Music *_currentMusic{nullptr};
bool _paused{true};
struct {
Audio *audio{nullptr};
bool loop{false};
} _channels[AUDIO_CHANNELS];
[[nodiscard]] bool isPlaying(const Music &music) const;
void writeOpl(uint16_t reg, uint8_t data) const;
void onTimer();
void generateSamples();
void copySamples();
};
extern AudioPlayer audioPlayer;
#endif //GAME_AUDIOPLAYER_H