use libxmp instead

This commit is contained in:
Nishi 2026-05-27 23:51:37 +09:00
commit 6f8ee4c7ae
26 changed files with 333 additions and 4039 deletions

View file

@ -1,10 +1,35 @@
#ifndef __FISHBONE_SOUND_H__
#define __FISHBONE_SOUND_H__
#define FB_SOUND_DECL(prefix) \
class prefix##SoundLoader; \
class prefix##Sound
#define FB_SOUND_DEF(prefix) \
class prefix##SoundLoader : public SoundLoader { \
public: \
Sound* open(Mixer* mixer, void* buffer, size_t size); \
int read(Sound* sound, short* buffer, size_t frames); \
void seek(Sound* sound, size_t pos); \
}; \
\
class prefix##Sound : public Sound { \
public: \
prefix##Sound(Mixer* mixer, prefix##SoundLoader* loader, struct Sound::Impl* impl) \
: Sound(mixer, loader, impl){}; \
~prefix##Sound(); \
}
#define FB_SOUND_LOADERS LOADER(XMP)
namespace fishbone {
class SoundDriver;
class SoundLoader;
class Sound;
#define LOADER(X) FB_SOUND_DECL(X);
FB_SOUND_LOADERS
#undef LOADER
}; // namespace fishbone
#include <fishbone/machdep.h>
@ -27,21 +52,43 @@ namespace fishbone {
SoundLoader();
~SoundLoader();
virtual Sound* open(void* buffer, size_t size);
virtual Sound* open(Mixer* mixer, void* buffer, size_t size);
virtual int read(Sound* sound, short* buffer, size_t frames);
virtual void seek(Sound* sound, size_t pos);
};
class Sound {
public:
struct Impl;
Impl* impl;
private:
SoundLoader* loader;
Mixer* mixer;
protected:
bool loop;
bool paused;
public:
Sound(SoundLoader* loader);
Sound(Mixer* mixer, SoundLoader* loader, struct Impl* impl);
int read(short* buffer, size_t frames);
int read(short* buffer, size_t frames);
void seek(size_t pos);
void resume();
void pause();
void pauseNoLock(); /* do NOT use this! */
bool isPaused();
void setLoop(bool v);
bool isLoop();
int rate;
int channels;
};
#define LOADER(X) FB_SOUND_DEF(X);
FB_SOUND_LOADERS
#undef LOADER
}; // namespace fishbone
#endif