Program Listing for File audioCallbacks.cpp

Return to documentation for file (include\MainObjects\audioPlayer\audioCallbacks.cpp)

#include "audioCallbacks.hpp"
#include "FrameCalc.hpp"
#include <cstring>

std::optional<float *>
audioEngineDataStruct::getNowfPointer(const unsigned long frameCount)
{
    if ((nowCursor + frameCount) > maxCursor) {
        return std::nullopt;
    } else {
        return pcmDataPoint->data() + (nowCursor * CHANNEL);
    }
}

void
audioEngineDataStruct::CountUp(const unsigned long frameCount)
{
    nowCursor += frameCount;
    consumedFrames += frameCount;
}

void
audioEngineDataStruct::GetAfterManFX(float              *pOutput,
                                     const unsigned long frameCount)
{
    if (!FXManualPannel.has_value()) {
        return;
    }
    auto getres = getNowfPointer(frameCount);
    if (!getres.has_value()) {
        return;
    }
    if (FXManualPannel->checkSomethingOn()) {
        toFaustStylePCM(faustPcmPP, getres.value(), frameCount);
        FXManualPannel->addFX(faustPcmPP, frameCount);
        toLRStylePCM(faustPcmPP, pOutput, frameCount);
    } else {

        memcpy(pOutput, getres.value(), frameCount * CHANNEL * sizeof(float));
    }
}

void
audioEngineDataStruct::Get(float *pOutput, unsigned long frameCount)
{
    auto getres = getNowfPointer(frameCount);
    if (!getres.has_value()) {
        return;
    }
    memcpy(pOutput, getres.value(), frameCount * CHANNEL * sizeof(float));
}

void
FullPreRender_callback(ma_device  *pDevice,
                       void       *pOutput,
                       const void *pInput,
                       ma_uint32   frameCount)
{
    auto rendered =
        reinterpret_cast<audioEngineDataStruct *>(pDevice->pUserData);
    rendered->Get(reinterpret_cast<float *>(pOutput), frameCount);
    rendered->CountUp(frameCount);
}

void
HybridRender_callback(ma_device  *pDevice,
                      void       *pOutput,
                      const void *pInput,
                      ma_uint32   frameCount)
{
    auto rendered =
        reinterpret_cast<audioEngineDataStruct *>(pDevice->pUserData);
    rendered->GetAfterManFX(reinterpret_cast<float *>(pOutput), frameCount);
    rendered->MusCtrPannel->GetPCMFrames(reinterpret_cast<float *>(pOutput),
                                         frameCount);
    rendered->CountUp(frameCount);
}

void
FullManualRender_callback(ma_device  *pDevice,
                          void       *pOutput,
                          const void *pInput,
                          ma_uint32   frameCount)
{
    auto Data = reinterpret_cast<audioEngineDataStruct *>(pDevice->pUserData);
    Data->MusCtrPannel->GetPCMFrames(reinterpret_cast<float *>(pOutput),
                                     frameCount);
}