diff --git a/include/audio/hle_core.hpp b/include/audio/hle_core.hpp index f957284d..75d02bca 100644 --- a/include/audio/hle_core.hpp +++ b/include/audio/hle_core.hpp @@ -23,6 +23,8 @@ namespace Audio { u16 bufferID; }; + int index = 0; // Index of the voice in [0, 23] for debugging + void reset(); DSPSource() { reset(); } }; @@ -57,7 +59,8 @@ namespace Audio { static constexpr size_t pipeCount = 8; DSPState dspState; - std::array, pipeCount> pipeData; // The data of each pipe + std::array, pipeCount> pipeData; // The data of each pipe + std::array sources; // DSP voices Audio::HLE::DspMemory dspRam; void resetAudioPipe(); @@ -86,7 +89,7 @@ namespace Audio { void generateFrame(StereoFrame& frame); void outputFrame(); public: - HLE_DSP(Memory& mem, Scheduler& scheduler, DSPService& dspService) : DSPCore(mem, scheduler, dspService) {} + HLE_DSP(Memory& mem, Scheduler& scheduler, DSPService& dspService); ~HLE_DSP() override {} void reset() override; diff --git a/src/core/audio/hle_core.cpp b/src/core/audio/hle_core.cpp index 65bcb2c6..6b0a32c9 100644 --- a/src/core/audio/hle_core.cpp +++ b/src/core/audio/hle_core.cpp @@ -14,6 +14,13 @@ namespace Audio { }; } + HLE_DSP::HLE_DSP(Memory& mem, Scheduler& scheduler, DSPService& dspService) : DSPCore(mem, scheduler, dspService) { + // Set up source indices + for (int i = 0; i < sources.size(); i++) { + sources[i].index = i; + } + } + void HLE_DSP::resetAudioPipe() { #define DSPOffset(var) (0x8000 + offsetof(Audio::HLE::SharedMemory, var) / 2) @@ -56,6 +63,10 @@ namespace Audio { e.clear(); } + for (auto& source : sources) { + source.reset(); + } + // Note: Reset audio pipe AFTER resetting all pipes, otherwise the new data will be yeeted resetAudioPipe(); } @@ -189,6 +200,7 @@ namespace Audio { SharedMemory& write = writeRegion(); for (int source = 0; source < sourceCount; source++) { + //updateSourceConfig(sources[source]); Helpers::panic("Panda"); } }