mitiru::audio
Audio subsystem: mixer, streaming engine, sound buffers, audio manifest loaders, and the MML editor model.
Audio subsystem: mixer, streaming engine, sound buffers, audio manifest loaders, and the MML editor model.
class IAudioEffect 7
virtual ~IAudioEffect() = defaultvirtual void process(float* samples, int numSamples, int sampleRate) = 0[[nodiscard]] virtual const char* name() const noexcept = 0virtual void setWetDry(float wet)[[nodiscard]] float wetDry() const noexceptvoid setEnabled(bool e) noexcept[[nodiscard]] bool isEnabled() const noexceptclass ReverbEffect : public IAudioEffect 4
[[nodiscard]] const char* name() const noexcept overridevoid setDecay(float d) noexceptvoid setRoomSize(float s) noexceptvoid process(float* samples, int numSamples, [[maybe_unused]] int sampleRate) overrideclass ChorusEffect : public IAudioEffect 4
[[nodiscard]] const char* name() const noexcept overridevoid setRate(float hz) noexceptvoid setDepth(float ms) noexceptvoid process(float* samples, int numSamples, int sampleRate) overrideclass DelayEffect : public IAudioEffect 4
[[nodiscard]] const char* name() const noexcept overridevoid setDelayMs(float ms) noexceptvoid setFeedback(float fb) noexceptvoid process(float* samples, int numSamples, int sampleRate) overrideclass AudioEffectChain 5
void addEffect(std::unique_ptr<IAudioEffect> effect)void process(float* samples, int numSamples, int sampleRate)[[nodiscard]] size_t effectCount() const noexcept[[nodiscard]] IAudioEffect* getEffect(size_t idx)static AudioEffectChain createDefault()class IAudioEngine 7
virtual ~IAudioEngine() = defaultvirtual void playSound(std::string_view id) = 0virtual void stopSound(std::string_view id) = 0virtual void playMusic(std::string_view id) = 0virtual void stopMusic() = 0virtual void setVolume(float volume) = 0[[nodiscard]] virtual bool isPlaying(std::string_view id) const = 0enum SoundCategory : uint8_t 3
Bgm = 0SeVoiceenum SeLimiterMode : uint8_t 3
None = 0EqualPowerLinearenum ChannelState : uint8_t 5
Idle = 0PlayingPausedFadingInFadingOutstruct Channel 8
int handle = -1std::string soundIdSoundCategory category = SoundCategory::SeChannelState state = ChannelState::Idlefloat volume = 1.0ffloat fadeTarget = 1.0ffloat fadeSpeed = 0.0fbool looping = falseclass AudioMixer 23
AudioMixer() noexceptint play(std::string_view soundId, SoundCategory category, bool loop = false, float volume = 1.0f)void stop(int handle)void stopByCategory(SoundCategory category)void stopAll()void pause(int handle)void resume(int handle)void fadeIn(int handle, float targetVolume, float durationSeconds)void fadeOut(int handle, float durationSeconds)int crossfadeBgm(std::string_view newSoundId, float durationSeconds, float newVolume = 1.0f)void update(float deltaTime)void setCategoryVolume(SoundCategory category, float volume)[[nodiscard]] float categoryVolume(SoundCategory category) constvoid setMasterVolume(float volume)[[nodiscard]] float masterVolume() const[[nodiscard]] float effectiveVolume(int handle) constvoid setSeLimiterMode(SeLimiterMode mode)[[nodiscard]] SeLimiterMode seLimiterMode() const[[nodiscard]] int activeCategoryChannelCount(SoundCategory category) const[[nodiscard]] bool isPlaying(int handle) const[[nodiscard]] ChannelState channelState(int handle) const[[nodiscard]] int activeChannelCount() constvoid setOnChannelStopped(std::function<void(int)> callback)enum AudioOutputBackend 6
AutoPulseAudioNull[[nodiscard]] inline std::unique_ptr<IAudioOutput> createAudioOutput( AudioOutputBackend backend = AudioOutputBackend::Auto)[[nodiscard]] inline const char* availableAudioBackendName() noexcept[[nodiscard]] inline constexpr bool hasPulseAudioSupport() noexceptstruct AudioFormat 3
int sampleRate = 44100int channels = 2int bitsPerSample = 16class IAudioStream 9
virtual ~IAudioStream() = defaultvirtual bool open() = 0virtual void close() = 0virtual std::size_t read(float* buffer, std::size_t frames) = 0virtual bool seek(std::size_t frameOffset) = 0[[nodiscard]] virtual AudioFormat format() const noexcept = 0[[nodiscard]] virtual std::size_t totalFrames() const noexcept = 0[[nodiscard]] virtual bool isEof() const noexcept = 0[[nodiscard]] virtual bool isOpen() const noexcept = 0class WavAudioStream : public IAudioStream 15
explicit WavAudioStream(std::string_view filePath)~WavAudioStream() overrideWavAudioStream(const WavAudioStream&) = deleteWavAudioStream& operator=(const WavAudioStream&) = deleteWavAudioStream(WavAudioStream&&) noexcept = defaultWavAudioStream& operator=(WavAudioStream&&) noexcept = defaultbool open() overridevoid close() overridestd::size_t read(float* buffer, std::size_t frames) overridebool seek(std::size_t frameOffset) override[[nodiscard]] AudioFormat format() const noexcept override[[nodiscard]] std::size_t totalFrames() const noexcept override[[nodiscard]] bool isEof() const noexcept override[[nodiscard]] bool isOpen() const noexcept override[[nodiscard]] std::size_t currentFrame() const noexceptclass RawPcmAudioStream : public IAudioStream 14
RawPcmAudioStream(std::string_view filePath, AudioFormat fmt)~RawPcmAudioStream() overrideRawPcmAudioStream(const RawPcmAudioStream&) = deleteRawPcmAudioStream& operator=(const RawPcmAudioStream&) = deleteRawPcmAudioStream(RawPcmAudioStream&&) noexcept = defaultRawPcmAudioStream& operator=(RawPcmAudioStream&&) noexcept = defaultbool open() overridevoid close() overridestd::size_t read(float* buffer, std::size_t frames) overridebool seek(std::size_t frameOffset) override[[nodiscard]] AudioFormat format() const noexcept override[[nodiscard]] std::size_t totalFrames() const noexcept override[[nodiscard]] bool isEof() const noexcept override[[nodiscard]] bool isOpen() const noexcept overridestruct AudioOutputParams 3
int sampleRate = 44100int channels = 2int bufferSize = 4096class IAudioOutput 10
virtual ~IAudioOutput() = defaultvirtual bool initialize(int sampleRate, int channels, int bufferSize) = 0virtual bool write(const float* samples, std::size_t count) = 0[[nodiscard]] virtual bool isPlaying() const = 0virtual void shutdown() = 0[[nodiscard]] virtual bool isInitialized() const = 0[[nodiscard]] virtual int sampleRate() const = 0[[nodiscard]] virtual int channels() const = 0[[nodiscard]] virtual int bufferSize() const = 0[[nodiscard]] virtual const char* backendName() const = 0struct MidiNote 5
uint32_t tick = 0uint32_t duration = 0uint8_t channel = 0uint8_t note = 60uint8_t velocity = 100struct MidiTrack 3
std::string namestd::vector<MidiNote> notesuint8_t program = 0struct MidiFile 4
uint16_t format = 1uint16_t ticksPerBeat = 480int tempo = 120std::vector<MidiTrack> tracksclass MidiToMml 3
[[nodiscard]] bool loadSmf(const std::string& path)[[nodiscard]] std::string toMml(int trackIndex = 0) const[[nodiscard]] const MidiFile& midi() const noexceptenum AudioFormat : std::uint8_t 5
WavMp3FlacOggUnknownclass MiniaudioBridge 20
explicit MiniaudioBridge(MiniaudioEngine& engine) noexceptMiniaudioBridge(const MiniaudioBridge&) = deleteMiniaudioBridge& operator=(const MiniaudioBridge&) = deleteMiniaudioBridge(MiniaudioBridge&&) = deleteMiniaudioBridge& operator=(MiniaudioBridge&&) = deletevoid setBasePath(std::string_view path)[[nodiscard]] const std::string& basePath() const noexceptvoid connectToDynamicBGM(vn::DynamicBGMController& bgm)void connectToAudioMixer(AudioMixer& mixer)void playVoice(std::string_view path)void playSE(std::string_view path)void playBGM(std::string_view path, bool loop = true)void stopAll()[[nodiscard]] static AudioFormat detectFormat(std::string_view path) noexcept[[nodiscard]] static bool isFormatSupported(AudioFormat format) noexcept[[nodiscard]] static bool isFileSupported(std::string_view path) noexcept[[nodiscard]] static constexpr std::array<std::string_view, 4> supportedExtensions() noexcept[[nodiscard]] MiniaudioEngine& engine() noexcept[[nodiscard]] const MiniaudioEngine& engine() const noexcept[[nodiscard]] bool isReady() const noexceptclass MiniaudioEngine 13
MiniaudioEngine()~MiniaudioEngine()MiniaudioEngine(const MiniaudioEngine&) = deleteMiniaudioEngine& operator=(const MiniaudioEngine&) = deleteMiniaudioEngine(MiniaudioEngine&& other) noexceptMiniaudioEngine& operator=(MiniaudioEngine&& other) noexcept[[nodiscard]] bool isInitialized() const noexceptvoid playFile(const std::string& path)void playFile(std::string_view path)void setMasterVolume(float volume)[[nodiscard]] float getMasterVolume() constvoid stopAll()void resume()class MitiruAudioPlayer : public sgc::IAudioPlayer 12
explicit MitiruAudioPlayer(IAudioEngine* engine, AudioMixer* mixer = nullptr) noexceptvoid playBgm(std::string_view path, float volume) overridevoid stopBgm(float fadeOutSeconds) overridevoid pauseBgm() overridevoid resumeBgm() overridevoid setBgmVolume(float volume) override[[nodiscard]] bool isBgmPlaying() const overrideint playSe(std::string_view path, float volume) overridevoid stopSe(int handle) overridevoid stopAllSe() overridevoid setSeVolume(float volume) overridevoid setMasterVolume(float volume) overrideenum Pitch : uint8_t 12
C = 0CsDDsEFFsGGsAAsBenum Octave : uint8_t 4
O4 = 4O5 = 5O6 = 6O7 = 7enum Duration : uint8_t 5
Whole = 1Half = 2Quarter = 4Eighth = 8Sixteenth = 16enum Accidental : uint8_t 3
Natural = 0SharpFlatenum EditorCommandType : uint8_t 6
AddNoteRemoveNoteInsertNoteSetTempoSetInstrumentPasteNotesstruct MmlNote 7
Pitch pitch = Pitch::COctave octave = Octave::O4Duration duration = Duration::QuarterAccidental accidental = Accidental::Naturalbool dotted = falsebool rest = false[[nodiscard]] float beats() const noexceptstruct MmlTrack 7
std::string nameint channel = 0std::vector<MmlNote> notesstd::string instrument = "Piano"int volume = 100int tempo = 120[[nodiscard]] float totalBeats() const noexceptstruct TimeSignature 2
int numerator = 4int denominator = 4struct MmlComposition 5
std::vector<MmlTrack> tracksstd::string titlestd::string authorint tempo = 120TimeSignature timeSignaturestruct NoteSelection 5
int trackIndex = -1int startIndex = 0int endIndex = 0[[nodiscard]] bool valid() const noexcept[[nodiscard]] int count() const noexceptstruct EditorCommand 10
EditorCommandType type = EditorCommandType::AddNoteint trackIndex = 0int noteIndex = 0MmlNote noteMmlNote previousNotestd::vector<MmlNote> notesBatchint previousTempo = 120int newTempo = 120std::string previousInstrumentstd::string newInstrumentclass MmlEditorModel 34
MmlEditorModel() = defaultvoid addTrack(std::string_view name, int channel, std::string_view instrument = "Piano")void removeTrack(int trackIndex)[[nodiscard]] int trackCount() const noexcept[[nodiscard]] const MmlTrack& track(int trackIndex) constvoid addNote(int trackIndex, const MmlNote& note)void removeNote(int trackIndex, int noteIndex)void insertNote(int trackIndex, int noteIndex, const MmlNote& note)void setTempo(int bpm)void setInstrument(int trackIndex, std::string_view instrument)void setTimeSignature(int numerator, int denominator)void setTitle(std::string_view title)void setAuthor(std::string_view author)[[nodiscard]] std::string toMmlString() constvoid fromMmlString(std::string_view mml)[[nodiscard]] std::string toJson() constvoid fromJson(std::string_view json)[[nodiscard]] float getDuration() const noexceptbool undo()bool redo()[[nodiscard]] bool canUndo() const noexcept[[nodiscard]] bool canRedo() const noexceptvoid selectNotes(int trackIndex, int startIndex, int endIndex)void clearSelection() noexcept[[nodiscard]] const NoteSelection& selectedNotes() const noexceptvoid copy()void cut()void paste(int trackIndex, int noteIndex)[[nodiscard]] bool hasClipboardContent() const noexceptvoid setPlaybackCursor(float position) noexcept[[nodiscard]] float playbackCursor() const noexceptvoid advancePlaybackCursor(float deltaTime) noexceptvoid resetPlaybackCursor() noexcept[[nodiscard]] const MmlComposition& composition() const noexceptenum MusicGenre : uint8_t 9
RPGFieldRPGBattleRPGBossRPGTownPuzzleActionHorrorMenuCustomstruct PhraseTemplate 4
std::string namestd::string mmlMusicGenre genre = MusicGenre::Customint tempo = 120class MmlPhraseGenerator 5
MmlPhraseGenerator()[[nodiscard]] std::string generate(MusicGenre genre, int measures = 4, uint32_t seed = 0)[[nodiscard]] std::string generateMelody( const std::vector<std::string>& chords, int tempo = 120, uint32_t seed = 0)void addPhrase(PhraseTemplate phrase)[[nodiscard]] size_t phraseCount() const noexceptclass NullAudioEngine : public IAudioEngine 6
void playSound(std::string_view id) overridevoid stopSound(std::string_view id) overridevoid playMusic(std::string_view id) overridevoid stopMusic() overridevoid setVolume(float volume) override[[nodiscard]] bool isPlaying(std::string_view id) const overrideclass NullAudioOutput : public IAudioOutput 18
NullAudioOutput() noexcept = default~NullAudioOutput() overrideNullAudioOutput(const NullAudioOutput&) = deleteNullAudioOutput& operator=(const NullAudioOutput&) = deleteNullAudioOutput(NullAudioOutput&&) noexcept = defaultNullAudioOutput& operator=(NullAudioOutput&&) noexcept = defaultbool initialize(int sr, int ch, int bs) overridebool write(const float* samples, std::size_t count) override[[nodiscard]] bool isPlaying() const overridevoid shutdown() override[[nodiscard]] bool isInitialized() const override[[nodiscard]] int sampleRate() const override[[nodiscard]] int channels() const override[[nodiscard]] int bufferSize() const override[[nodiscard]] const char* backendName() const override[[nodiscard]] std::size_t totalSamplesWritten() const noexcept[[nodiscard]] std::size_t writeCallCount() const noexceptvoid resetCounters() noexceptclass IAudioDecoder 10
virtual ~IAudioDecoder() = defaultvirtual bool open(std::string_view filePath) = 0virtual void close() = 0virtual std::size_t read(float* buffer, std::size_t frames) = 0virtual bool seek(std::size_t frameOffset) = 0[[nodiscard]] virtual AudioFormat format() const noexcept = 0[[nodiscard]] virtual std::size_t totalFrames() const noexcept = 0[[nodiscard]] virtual bool isEof() const noexcept = 0[[nodiscard]] virtual bool isOpen() const noexcept = 0[[nodiscard]] virtual const char* codecName() const noexcept = 0class AdpcmDecoder : public IAudioDecoder 15
~AdpcmDecoder() overrideAdpcmDecoder(const AdpcmDecoder&) = deleteAdpcmDecoder& operator=(const AdpcmDecoder&) = deleteAdpcmDecoder() = defaultAdpcmDecoder(AdpcmDecoder&&) noexcept = defaultAdpcmDecoder& operator=(AdpcmDecoder&&) noexcept = defaultbool open(std::string_view filePath) overridevoid close() overridestd::size_t read(float* buffer, std::size_t frames) overridebool seek(std::size_t frameOffset) override[[nodiscard]] AudioFormat format() const noexcept override[[nodiscard]] std::size_t totalFrames() const noexcept override[[nodiscard]] bool isEof() const noexcept override[[nodiscard]] bool isOpen() const noexcept override[[nodiscard]] const char* codecName() const noexcept overrideclass OggVorbisDecoder : public IAudioDecoder 13
OggVorbisDecoder() = default~OggVorbisDecoder() overrideOggVorbisDecoder(const OggVorbisDecoder&) = deleteOggVorbisDecoder& operator=(const OggVorbisDecoder&) = deletebool open(std::string_view filePath) overridevoid close() overridestd::size_t read(float* buffer, std::size_t frames) overridebool seek(std::size_t frameOffset) override[[nodiscard]] AudioFormat format() const noexcept override[[nodiscard]] std::size_t totalFrames() const noexcept override[[nodiscard]] bool isEof() const noexcept override[[nodiscard]] bool isOpen() const noexcept override[[nodiscard]] const char* codecName() const noexcept overrideclass DecoderStreamAdapter : public IAudioStream 13
explicit DecoderStreamAdapter(std::unique_ptr<IAudioDecoder> decoder)DecoderStreamAdapter(const DecoderStreamAdapter&) = deleteDecoderStreamAdapter& operator=(const DecoderStreamAdapter&) = deleteDecoderStreamAdapter(DecoderStreamAdapter&&) noexcept = defaultDecoderStreamAdapter& operator=(DecoderStreamAdapter&&) noexcept = defaultbool open() overridevoid close() overridestd::size_t read(float* buffer, std::size_t frames) overridebool seek(std::size_t frameOffset) override[[nodiscard]] AudioFormat format() const noexcept override[[nodiscard]] std::size_t totalFrames() const noexcept override[[nodiscard]] bool isEof() const noexcept override[[nodiscard]] bool isOpen() const noexcept overrideclass PulseSimpleHandle 10
PulseSimpleHandle() noexcept = defaultexplicit PulseSimpleHandle(pa_simple* handle) noexcept~PulseSimpleHandle()PulseSimpleHandle(const PulseSimpleHandle&) = deletePulseSimpleHandle& operator=(const PulseSimpleHandle&) = deletePulseSimpleHandle(PulseSimpleHandle&& other) noexceptPulseSimpleHandle& operator=(PulseSimpleHandle&& other) noexceptvoid reset() noexcept[[nodiscard]] pa_simple* get() const noexcept[[nodiscard]] explicit operator bool() const noexceptclass AudioRingBuffer 6
explicit AudioRingBuffer(std::size_t capacity)std::size_t write(const float* data, std::size_t count)std::size_t read(float* data, std::size_t count)[[nodiscard]] std::size_t size() const[[nodiscard]] std::size_t capacity() const noexceptvoid clear()class PulseAudioOutput : public IAudioOutput 15
PulseAudioOutput() noexcept = default~PulseAudioOutput() overridePulseAudioOutput(const PulseAudioOutput&) = deletePulseAudioOutput& operator=(const PulseAudioOutput&) = deletePulseAudioOutput(PulseAudioOutput&&) = deletePulseAudioOutput& operator=(PulseAudioOutput&&) = deletebool initialize(int sr, int ch, int bs) overridebool write(const float* samples, std::size_t count) override[[nodiscard]] bool isPlaying() const overridevoid shutdown() override[[nodiscard]] bool isInitialized() const override[[nodiscard]] int sampleRate() const override[[nodiscard]] int channels() const override[[nodiscard]] int bufferSize() const override[[nodiscard]] const char* backendName() const overrideclass RingBuffer 15
explicit RingBuffer(std::size_t capacity)RingBuffer(const RingBuffer&) = deleteRingBuffer& operator=(const RingBuffer&) = deleteRingBuffer(RingBuffer&&) noexcept = defaultRingBuffer& operator=(RingBuffer&&) noexcept = default~RingBuffer() = defaultstd::size_t write(const T* data, std::size_t count) noexceptstd::size_t read(T* data, std::size_t count) noexcept[[nodiscard]] std::size_t availableRead() const noexcept[[nodiscard]] std::size_t availableWrite() const noexcept[[nodiscard]] std::size_t capacity() const noexcept[[nodiscard]] bool empty() const noexcept[[nodiscard]] bool full() const noexceptvoid reset() noexceptusing VoiceHandle = int;struct AdsrParams 4
float attackSec = 0.01ffloat decaySec = 0.1ffloat sustainLvl = 0.7ffloat releaseSec = 0.2fclass SineSynth : public IAudioStream 28
explicit SineSynth(std::size_t voiceCount, std::uint32_t sampleRate, std::uint16_t channels = 1) noexceptSineSynth() noexcept = defaultSineSynth(const SineSynth&) = deleteSineSynth& operator=(const SineSynth&) = deleteSineSynth(SineSynth&&) = deleteSineSynth& operator=(SineSynth&&) = deletevoid setMaxVoices(int voices) noexcept[[nodiscard]] int maxVoices() const noexceptvoid setAdsr(const AdsrParams& params) noexcept[[nodiscard]] AdsrParams adsr() const noexceptvoid setGain(float gain) noexcept[[nodiscard]] float gain() const noexceptVoiceHandle noteOn(int midiNote, float velocity) noexceptvoid noteOff(VoiceHandle handle) noexceptvoid allNotesOff() noexcept[[nodiscard]] int activeVoiceCount() const noexcept[[nodiscard]] bool isActive(VoiceHandle handle) const noexceptvoid render(float* buffer, std::size_t frames, int sampleRate) noexceptbool open() overridevoid close() overridestd::size_t read(float* buffer, std::size_t frames) overridebool seek(std::size_t ) override[[nodiscard]] AudioFormat format() const noexcept override[[nodiscard]] std::size_t totalFrames() const noexcept override[[nodiscard]] bool isEof() const noexcept override[[nodiscard]] bool isOpen() const noexcept overridevoid setEnvelope(float attackSec, float decaySec, float sustainLevel, float releaseSec) noexceptvoid setMasterGain(float g) noexceptstruct SoundState 3
std::string idfloat volume = 1.0fbool looping = falseclass SoftAudioEngine : public IAudioEngine 11
void playSound(std::string_view id) overridevoid stopSound(std::string_view id) overridevoid playMusic(std::string_view id) overridevoid stopMusic() overridevoid setVolume(float volume) override[[nodiscard]] bool isPlaying(std::string_view id) const override[[nodiscard]] size_t playingSoundCount() const noexcept[[nodiscard]] const std::string& currentMusic() const noexcept[[nodiscard]] bool isMusicPlaying() const noexcept[[nodiscard]] float masterVolume() const noexceptvoid stopAll()enum AttenuationModel : uint8_t 4
NoneInverseDistanceLinearDistanceExponentialDistancestruct AudioVec3 5
float x = 0.0ffloat y = 0.0ffloat z = 0.0f[[nodiscard]] float distanceTo(const AudioVec3& other) const noexcept[[nodiscard]] AudioVec3 normalized() const noexceptstruct SpatialSourceConfig 5
float minDistance = 1.0ffloat maxDistance = 100.0ffloat rolloffFactor = 1.0ffloat dopplerFactor = 0.0fAttenuationModel attenuation = AttenuationModel::InverseDistancestruct SpatialResult 3
float volume = 1.0ffloat pan = 0.0ffloat doppler = 1.0fclass SpatialAudio 4
void setListener(const AudioListener& listener) noexcept[[nodiscard]] const AudioListener& listener() const noexcept[[nodiscard]] SpatialResult calculate( const AudioVec3& sourcePos, const SpatialSourceConfig& config = {}) const noexceptvoid updateFromCamera(const float pos[3], const float fwd[3], const float up[3]) noexceptenum StreamState : uint8_t 3
Stopped = 0PlayingPausedclass StreamingAudioEngine 28
explicit StreamingAudioEngine( std::unique_ptr<IAudioOutput> output = nullptr, std::size_t ringBufferFrames = DEFAULT_RING_BUFFER_FRAMES)~StreamingAudioEngine()StreamingAudioEngine(const StreamingAudioEngine&) = deleteStreamingAudioEngine& operator=(const StreamingAudioEngine&) = deleteStreamingAudioEngine(StreamingAudioEngine&&) = deleteStreamingAudioEngine& operator=(StreamingAudioEngine&&) = deletebool play(std::unique_ptr<IAudioStream> stream, bool loop = false)void pause() noexceptvoid resume() noexceptvoid stop()void seek(std::size_t frameOffset) noexceptvoid update()void setVolume(float volume) noexcept[[nodiscard]] float volume() const noexcept[[nodiscard]] StreamState state() const noexcept[[nodiscard]] bool isPlaying() const noexcept[[nodiscard]] bool isPaused() const noexcept[[nodiscard]] AudioFormat format() const noexcept[[nodiscard]] std::size_t bufferedSamples() const noexceptvoid setLooping(bool loop) noexcept[[nodiscard]] bool isLooping() const noexceptvoid setOutput(std::unique_ptr<IAudioOutput> output)#pragma once #include <string> #include <string_view> #include <unordered_map> #include <mitiru/audio/AudioEngine.hpp> #ifdef _WIN32 #ifndef NOMINMAX #define NOMINMAX #endif #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include <Windows.h> #include <mmsystem.h> #pragma comment(lib, "winmm.lib") #endif namespace mitiru::audioEM_JS(void, mitiru_webaudio_init, (), { if (!Module._mitiru_audioCtx) { Module._mitiru_audioCtx = new (window.AudioContext || window.webkitAudioContext)(); Module._mitiru_gainNode = Module._mitiru_audioCtx.createGain(); Module._mitiru_gainNode.connect(Module._mitiru_audioCtx.destination); Module._mitiru_sources = {}; } })EM_JS(void, mitiru_webaudio_play, (const char* pathPtr), { var path = UTF8ToString(pathPtr); var ctx = Module._mitiru_audioCtx; if (!ctx) return; if (ctx.state === 'suspended') { ctx.resume(); } fetch(path) .then(function(response) { return response.arrayBuffer(); }) .then(function(buffer) { return ctx.decodeAudioData(buffer); }) .then(function(decoded) { if (Module._mitiru_sources[path]) { try { Module._mitiru_sources[path].stop(); } catch(e) {} } var source = ctx.createBufferSource(); source.buffer = decoded; source.connect(Module._mitiru_gainNode); source.start(0); Module._mitiru_sources[path] = source; }); })EM_JS(void, mitiru_webaudio_stop, (const char* pathPtr), { var path = UTF8ToString(pathPtr); if (Module._mitiru_sources && Module._mitiru_sources[path]) { try { Module._mitiru_sources[path].stop(); } catch(e) {} delete Module._mitiru_sources[path]; } })EM_JS(void, mitiru_webaudio_stop_all, (), { if (!Module._mitiru_sources) return; var keys = Object.keys(Module._mitiru_sources); for (var i = 0; i < keys.length; i++) { try { Module._mitiru_sources[keys[i]].stop(); } catch(e) {} } Module._mitiru_sources = {}; })EM_JS(void, mitiru_webaudio_set_volume, (float vol), { if (Module._mitiru_gainNode) { Module._mitiru_gainNode.gain.value = vol; } })class WebAudioEngine : public IAudioEngine 8
WebAudioEngine()void playSound(std::string_view id) overridevoid stopSound(std::string_view id) overridevoid playMusic(std::string_view id) overridevoid stopMusic() overridevoid setVolume(float volume) override[[nodiscard]] bool isPlaying(std::string_view id) const override#pragma once #ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #ifndef NOMINMAX #define NOMINMAX #endif #include <Windows.h> #include <mmsystem.h> #pragma comment(lib, "winmm.lib") #include <algorithm> #include <array> #include <cstdint> #include <cstring> #include <vector> namespace mitiru::audioenum AudioBackend : uint8_t 6
AutoFmodNull[[nodiscard]] inline std::unique_ptr<IAudioEngine> createAudioEngine( AudioBackend backend = AudioBackend::Auto)[[nodiscard]] inline constexpr const char* availableAudioEngineName() noexcept[[nodiscard]] inline constexpr bool hasFmodSupport() noexceptclass FmodAudioEngine : public IAudioEngine 19
explicit FmodAudioEngine(const Config& config = {})~FmodAudioEngine() overrideFmodAudioEngine(const FmodAudioEngine&) = deleteFmodAudioEngine& operator=(const FmodAudioEngine&) = deleteFmodAudioEngine(FmodAudioEngine&&) = deleteFmodAudioEngine& operator=(FmodAudioEngine&&) = deletevoid playSound(std::string_view id) overridevoid stopSound(std::string_view id) overridevoid playMusic(std::string_view id) overridevoid stopMusic() overridevoid setVolume(float volume) override[[nodiscard]] bool isPlaying(std::string_view id) const overridevoid update()bool loadSound(std::string_view id, bool stream = false)void setPitch(std::string_view id, float pitch)void setPan(std::string_view id, float pan)void setListenerPosition( const AudioVec3& position, const AudioVec3& forward = {0, 0, -1}, const AudioVec3& up = {0, 1, 0})void setSoundPosition(std::string_view id, const AudioVec3& position)[[nodiscard]] FMOD_SYSTEM* systemHandle() const noexceptclass FmodAudioEngine : public IAudioEngine 9
FmodAudioEngine()explicit FmodAudioEngine(const Config& )void playSound(std::string_view ) overridevoid stopSound(std::string_view ) overridevoid playMusic(std::string_view ) overridevoid stopMusic() overridevoid setVolume(float ) override[[nodiscard]] bool isPlaying(std::string_view ) const overridevoid update()class FmodStudioEngine 15
explicit FmodStudioEngine(int maxChannels = 512)~FmodStudioEngine()FmodStudioEngine(const FmodStudioEngine&) = deleteFmodStudioEngine& operator=(const FmodStudioEngine&) = deleteFmodStudioEngine(FmodStudioEngine&&) = deleteFmodStudioEngine& operator=(FmodStudioEngine&&) = deletevoid update()bool loadBank(std::string_view path)void unloadBank(std::string_view path)bool playEvent(std::string_view eventPath)void stopEvent(std::string_view eventPath, bool allowFadeout = true)bool setParameter(std::string_view eventPath, std::string_view paramName, float value)bool setGlobalParameter(std::string_view paramName, float value)[[nodiscard]] FMOD_STUDIO_EVENTINSTANCE* getEventInstance(std::string_view eventPath) const[[nodiscard]] FMOD_STUDIO_SYSTEM* studioSystemHandle() const noexceptclass FmodStudioEngine 8
explicit FmodStudioEngine(int = 512)void update()bool loadBank(std::string_view )void unloadBank(std::string_view )bool playEvent(std::string_view )void stopEvent(std::string_view , bool = true)bool setParameter(std::string_view , std::string_view , float )bool setGlobalParameter(std::string_view , float )Sourced from docs/API_CATALOG.md, auto-generated by tools/generate_api_catalog.py.