void nsPicoService::UnloadEngine() { PicoApi::pico_Status status = 0; if (mPicoEngine) { status = sPicoApi.pico_disposeEngine(mPicoSystem, &mPicoEngine); PICO_ENSURE_SUCCESS_VOID("pico_disposeEngine", status); status = sPicoApi.pico_releaseVoiceDefinition(mPicoSystem, PICO_VOICE_NAME); PICO_ENSURE_SUCCESS_VOID("pico_releaseVoiceDefinition", status); mPicoEngine = nullptr; } if (mSgResource) { status = sPicoApi.pico_unloadResource(mPicoSystem, &mSgResource); PICO_ENSURE_SUCCESS_VOID("pico_unloadResource", status); mSgResource = nullptr; } if (mTaResource) { status = sPicoApi.pico_unloadResource(mPicoSystem, &mTaResource); PICO_ENSURE_SUCCESS_VOID("pico_unloadResource", status); mTaResource = nullptr; } if (mPicoSystem) { status = sPicoApi.pico_terminate(&mPicoSystem); PICO_ENSURE_SUCCESS_VOID("pico_terminate", status); mPicoSystem = nullptr; } }
void nsPicoService::LoadEngine(PicoVoice* aVoice) { PicoApi::pico_Status status = 0; if (mPicoSystem) { UnloadEngine(); } if (!mPicoMemArea) { mPicoMemArea = MakeUnique<uint8_t[]>(PICO_MEM_SIZE); } status = sPicoApi.pico_initialize(mPicoMemArea.get(), PICO_MEM_SIZE, &mPicoSystem); PICO_ENSURE_SUCCESS_VOID("pico_initialize", status); status = sPicoApi.pico_loadResource(mPicoSystem, aVoice->mTaFile.get(), &mTaResource); PICO_ENSURE_SUCCESS_VOID("pico_loadResource", status); status = sPicoApi.pico_loadResource(mPicoSystem, aVoice->mSgFile.get(), &mSgResource); PICO_ENSURE_SUCCESS_VOID("pico_loadResource", status); status = sPicoApi.pico_createVoiceDefinition(mPicoSystem, PICO_VOICE_NAME); PICO_ENSURE_SUCCESS_VOID("pico_createVoiceDefinition", status); char taName[PICO_RETSTRINGSIZE]; status = sPicoApi.pico_getResourceName(mPicoSystem, mTaResource, taName); PICO_ENSURE_SUCCESS_VOID("pico_getResourceName", status); status = sPicoApi.pico_addResourceToVoiceDefinition( mPicoSystem, PICO_VOICE_NAME, taName); PICO_ENSURE_SUCCESS_VOID("pico_addResourceToVoiceDefinition", status); char sgName[PICO_RETSTRINGSIZE]; status = sPicoApi.pico_getResourceName(mPicoSystem, mSgResource, sgName); PICO_ENSURE_SUCCESS_VOID("pico_getResourceName", status); status = sPicoApi.pico_addResourceToVoiceDefinition( mPicoSystem, PICO_VOICE_NAME, sgName); PICO_ENSURE_SUCCESS_VOID("pico_addResourceToVoiceDefinition", status); status = sPicoApi.pico_newEngine(mPicoSystem, PICO_VOICE_NAME, &mPicoEngine); PICO_ENSURE_SUCCESS_VOID("pico_newEngine", status); if (sSingleton) { sSingleton->mCurrentVoice = aVoice; } }