Allocate voice

This commit is contained in:
jaby 2024-09-06 11:51:13 +02:00
parent 92b19ecabc
commit 0dcd2b71a6
2 changed files with 17 additions and 6 deletions

View File

@ -41,10 +41,14 @@ namespace JabyEngine {
}; };
__declare_io_value(SampleRate, uint16_t) { __declare_io_value(SampleRate, uint16_t) {
static constexpr SampleRate from_HZ(uint32_t freq) {
constexpr uint32_t Base1024Hz = static_cast<uint32_t>((4096.0/44100.0)*1024.0);
return {static_cast<uint16_t>((freq >> 10)*Base1024Hz)};
}
static constexpr SampleRate from_HZ(double freq) { static constexpr SampleRate from_HZ(double freq) {
//4096 == 44100Hz //4096 == 44100Hz
constexpr double Base = (4096.0 / 44100.0); constexpr double Base = (4096.0 / 44100.0);
return {static_cast<uint16_t>((freq*Base))}; return {static_cast<uint16_t>((freq*Base))};
} }
}; };

View File

@ -1,5 +1,6 @@
#include <PSX/Auxiliary/big_endian.hpp> #include <PSX/Auxiliary/big_endian.hpp>
#include <PSX/File/file_processor_helper.hpp> #include <PSX/File/file_processor_helper.hpp>
#include <PSX/SPU/spu.hpp>
#include <stdio.hpp> #include <stdio.hpp>
#ifdef __SUPPORT_VAG__ #ifdef __SUPPORT_VAG__
@ -28,8 +29,12 @@ namespace JabyEngine {
}; };
struct VAGState { struct VAGState {
static constexpr VAGState create() { uint32_t voice_id;
return VAGState{}; size_t bytes_left;
SPU::SRAM_Adr adr;
static constexpr VAGState create(uint32_t voice_id) {
return VAGState{.voice_id = voice_id, .bytes_left = 0, .adr = 0};
} }
}; };
@ -37,8 +42,10 @@ namespace JabyEngine {
if(config.data_bytes >= sizeof(VAGHeader)) { if(config.data_bytes >= sizeof(VAGHeader)) {
const auto& header = *reinterpret_cast<const VAGHeader*>(config.data_adr); const auto& header = *reinterpret_cast<const VAGHeader*>(config.data_adr);
//printf("VAG-ID: %s\nName: %s\nSample size: %i\nSample rate: %i\n", header.id, header.name, header.get_sample_size(), header.get_sample_frequency()); state.bytes_left = header.get_sample_size();
// TODO: Allocate SPU memory state.adr = SPU::voice[state.voice_id].allocate(SPU_IO::SampleRate::from_HZ(header.get_sample_frequency()), state.bytes_left);
// TODO: Parse samples
return Progress::Error; return Progress::Error;
} }
@ -46,7 +53,7 @@ namespace JabyEngine {
} }
State create(const uint32_t* data_adr, const VAG& file) { State create(const uint32_t* data_adr, const VAG& file) {
return State::from(VAGState::create(), data_adr, parse_header); return State::from(VAGState::create(file.voice_number), data_adr, parse_header);
} }
} }
} }