diff --git a/include/audio/hle_core.hpp b/include/audio/hle_core.hpp index c9d36c11..202b9308 100644 --- a/include/audio/hle_core.hpp +++ b/include/audio/hle_core.hpp @@ -7,6 +7,24 @@ namespace Audio { class HLE_DSP : public DSPCore { + // The audio frame types are public in case we want to use them for unit tests + public: + template + using Sample = std::array; + + template + using Frame = std::array, 160>; + + template + using MonoFrame = Frame; + + template + using StereoFrame = Frame; + + template + using QuadFrame = Frame; + + private: enum class DSPState : u32 { Off, On, @@ -43,6 +61,8 @@ namespace Audio { Audio::HLE::SharedMemory& readRegion() { return readRegionIndex() == 0 ? dspRam.region0 : dspRam.region1; } Audio::HLE::SharedMemory& writeRegion() { return readRegionIndex() == 0 ? dspRam.region1 : dspRam.region0; } + StereoFrame generateFrame(); + void outputFrame(); public: HLE_DSP(Memory& mem, Scheduler& scheduler, DSPService& dspService) : DSPCore(mem, scheduler, dspService) {} ~HLE_DSP() override {} diff --git a/src/core/audio/hle_core.cpp b/src/core/audio/hle_core.cpp index 791d14cc..32697534 100644 --- a/src/core/audio/hle_core.cpp +++ b/src/core/audio/hle_core.cpp @@ -82,6 +82,7 @@ namespace Audio { dspService.triggerPipeEvent(DSPPipeType::Audio); } + outputFrame(); scheduler.addEvent(Scheduler::EventType::RunDSP, scheduler.currentTimestamp + Audio::cyclesPerFrame); } @@ -165,4 +166,9 @@ namespace Audio { data.erase(data.begin(), data.begin() + size); return out; } + + void HLE_DSP::outputFrame() { + StereoFrame frame = generateFrame(); + Helpers::panic("HLE DSP: Output frame"); + } } // namespace Audio