工具

音频 BassSampleManager

采样播放(依赖 bass)

Audio.h · BassSampleManager · 需要链接 bass

创建与销毁

构造时 BASS_Init;析构释放 sample / stream。

BassSampleManager(uint32_t freq = 44100);
~BassSampleManager();
static constexpr int32_t numChannels = 128;

音量与静音回调

Process 内读取这些回调。可挂到游戏主音量 / 静音。

struct {
    std::function<bool()> mute;
    std::function<uint8_t()> masterVolume; // 0..127
    std::function<bool()> playPause;       // true=可播
    std::function<bool()> stop;
} settings;

加载采样

uint32_t LoadSample(std::string const& file, uint32_t loopStart = 0, int32_t loopEnd = -1);
void LoadAllSamplesFromFolder(std::string const& path);
void FeedSample(std::string const& name, void* buffer, uint32_t length);
uint32_t CreateSample(std::string const& name, uint32_t channels, uint32_t freq);

取采样与清空

BassSample* GetSample(std::string const& name);
BassSample* GetSample(uint32_t sample);
void ClearSamples();

播放入队

可按名称或 id 入队。

uint32_t AddSampleToQueue(uint8_t vol, uint32_t freq, std::string const& sample, bool loop, CVector const& pos, uint32_t framesToPlay = 8, bool is3d = true);
uint32_t AddSampleToQueue(uint8_t vol, uint32_t freq, uint32_t sample, bool loop, CVector const& pos, uint32_t framesToPlay = 8, bool is3d = true);
void AddSampleToQueue(BassQueue const& queue);

每帧处理队列

必须每帧 Process 才会出声。

void Process();
void ClearQueue();
uint32_t FindAvailableChannel();
void StopAllChannels();

通道细调

一般用「入队 + Process」即可。需要细控时:

void StartChannel(uint32_t channel);
void StopChannel(uint32_t channel);
void ResetChannel(uint32_t channel);
bool InitialiseChannel(uint32_t channel, uint32_t sample);
void SetChannel3D(uint32_t channel, bool on);
void SetChannel3DPosition(uint32_t channel, float x, float y, float z);
// … 见头文件:频率、循环、混响、长度等

On this page