#pragma once #include "../System/IOPorts/spu_io.hpp" namespace JabyEngine { namespace SPU { using SRAM_Adr = uint16_t; struct Voice { size_t get_id() const { return reinterpret_cast(this); } SRAM_Adr allocate(size_t size) const; SRAM_Adr allocate(SPU_IO::SampleRate frequency, size_t size) const; void deallocate() const; void set_sample_rate(SPU_IO::SampleRate frequency) const { SPU_IO::Voice[Voice::get_id()].sampleRate.write(frequency); } void play() const { SPU_IO::Key::On.write(1 << Voice::get_id()); } void stop() const { SPU_IO::Key::Off.write(1 << Voice::get_id()); } }; extern const Voice voice[SPU_IO::VoiceCount]; } }