Support SFX
This commit is contained in:
@@ -31,12 +31,12 @@ namespace JabyEngine {
|
||||
};
|
||||
|
||||
struct VAGState {
|
||||
uint32_t voice_id;
|
||||
size_t words_left;
|
||||
SPU::SRAMAdr adr;
|
||||
uint32_t voice_id;
|
||||
size_t words_left;
|
||||
SPU::SimpleVolume inital_vol;
|
||||
|
||||
static constexpr VAGState create(uint32_t voice_id) {
|
||||
return VAGState{.voice_id = voice_id, .words_left = 0, .adr = 0};
|
||||
static constexpr VAGState create(uint32_t voice_id, SPU::SimpleVolume inital_vol) {
|
||||
return VAGState{.voice_id = voice_id, .words_left = 0, .inital_vol = inital_vol};
|
||||
}
|
||||
};
|
||||
|
||||
@@ -55,11 +55,13 @@ namespace JabyEngine {
|
||||
const auto bytes = header.get_sample_size();
|
||||
|
||||
state.words_left = bytes_to_words(bytes);
|
||||
state.adr = SPU::voice[state.voice_id].allocate(SPU_IO::SampleRate::from_HZ(header.get_sample_frequency()), words_to_bytes(state.words_left));
|
||||
|
||||
auto sram_adr = SPU::voice[state.voice_id].allocate(SPU_IO::SampleRate::from_HZ(header.get_sample_frequency()), words_to_bytes(state.words_left));
|
||||
SPU::voice[state.voice_id].set_volume(state.inital_vol, state.inital_vol);
|
||||
|
||||
config.processed(sizeof(VAGHeader));
|
||||
SPU::internal::DMA::Receive::prepare();
|
||||
SPU::internal::DMA::Receive::set_dst(state.adr);
|
||||
SPU::internal::DMA::Receive::set_dst(sram_adr);
|
||||
SPU::internal::DMA::Receive::set_src(reinterpret_cast<uintptr_t>(config.data_adr));
|
||||
|
||||
return Helper::exchange_and_execute_process_function(parse_sample, config, state);
|
||||
@@ -69,7 +71,7 @@ namespace JabyEngine {
|
||||
}
|
||||
|
||||
State create(const uint32_t* data_adr, const VAG& file) {
|
||||
return State::from(VAGState::create(file.voice_number), data_adr, parse_header);
|
||||
return State::from(VAGState::create(file.voice_number, file.inital_stereo_vol), data_adr, parse_header);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -8,7 +8,7 @@
|
||||
|
||||
namespace JabyEngine {
|
||||
namespace SPU {
|
||||
SRAMAdr Voice :: allocate(size_t size) const {
|
||||
SRAMAdr Voice :: allocate(size_t size) {
|
||||
Voice::stop();
|
||||
const auto voice_id = Voice::get_id();
|
||||
const auto adr = SRAMAdr{static_cast<SRAMAdr::UnderlyingType>(reinterpret_cast<uintptr_t>(SPU_MMU::allocate(voice_id, size)))};
|
||||
@@ -17,13 +17,13 @@ namespace JabyEngine {
|
||||
return adr;
|
||||
}
|
||||
|
||||
SRAMAdr Voice :: allocate(SPU_IO::SampleRate frequency, size_t size) const {
|
||||
SRAMAdr Voice :: allocate(SPU_IO::SampleRate frequency, size_t size) {
|
||||
const auto result = Voice::allocate(size);
|
||||
Voice::set_sample_rate(frequency);
|
||||
return result;
|
||||
}
|
||||
|
||||
void Voice :: deallocate() const {
|
||||
void Voice :: deallocate() {
|
||||
Voice::stop();
|
||||
SPU_MMU::deallocate(Voice::get_id());
|
||||
}
|
||||
|
Reference in New Issue
Block a user