result WavStream::loadMem(unsigned char *aData, unsigned int aDataLen, bool aCopy, bool aTakeOwnership) { delete[] mFilename; delete mMemFile; mStreamFile = 0; mMemFile = 0; mFilename = 0; mSampleCount = 0; if (aData == NULL || aDataLen == 0) return INVALID_PARAMETER; MemoryFile *mf = new MemoryFile(); int res = mf->openMem(aData, aDataLen, aCopy, aTakeOwnership); if (res != SO_NO_ERROR) { delete mf; return res; } res = parse(mf); if (res != SO_NO_ERROR) { delete mf; return res; } mMemFile = mf; return 0; }
result Sfxr::loadParamsMem(unsigned char *aMem, unsigned int aLength, bool aCopy, bool aTakeOwnership) { MemoryFile mf; int res = mf.openMem(aMem, aLength, aCopy, aTakeOwnership); if (res != SO_NO_ERROR) return res; return loadParamsFile(&mf); }
result Wav::loadMem(unsigned char *aMem, unsigned int aLength, bool aCopy, bool aTakeOwnership) { if (aMem == NULL || aLength == 0) return INVALID_PARAMETER; MemoryFile dr; dr.openMem(aMem, aLength, aCopy, aTakeOwnership); return testAndLoadFile(&dr); }
WavStreamInstance::WavStreamInstance(WavStream *aParent) { mParent = aParent; mOffset = 0; mOgg = 0; mFile = 0; if (aParent->mMemFile) { MemoryFile *mf = new MemoryFile(); mFile = mf; mf->openMem(aParent->mMemFile->getMemPtr(), aParent->mMemFile->length(), false, false); } else if (aParent->mFilename) { DiskFile *df = new DiskFile; mFile = df; df->open(aParent->mFilename); } else if (aParent->mStreamFile) { mFile = aParent->mStreamFile; mFile->seek(0); // stb_vorbis assumes file offset to be at start of ogg } else { return; } if (mFile) { if (mParent->mOgg) { int e; mOgg = stb_vorbis_open_file((Soloud_Filehack *)mFile, 0, &e, 0); if (!mOgg) { if (mFile != mParent->mStreamFile) delete mFile; mFile = 0; } mOggFrameSize = 0; mOggFrameOffset = 0; mOggOutputs = 0; } else { mFile->seek(aParent->mDataOffset); } } }