mirror of
https://github.com/vsariola/sointu.git
synced 2025-06-04 01:28:45 -04:00
Merge pull request #3 from kebby/master
Added getChunk/setChunk to VSTi so patches are stored with the project
This commit is contained in:
commit
e285541203
@ -3,7 +3,7 @@
|
|||||||
#ifndef __Go4kVSTi__
|
#ifndef __Go4kVSTi__
|
||||||
#include "Go4kVSTi.h"
|
#include "Go4kVSTi.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "Go4kVSTiCore.h"
|
||||||
//-----------------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------------
|
||||||
// Go4kVSTi
|
// Go4kVSTi
|
||||||
//-----------------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------------
|
||||||
@ -11,6 +11,7 @@
|
|||||||
//-----------------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------------
|
||||||
Go4kVSTi::Go4kVSTi (audioMasterCallback audioMaster) : AudioEffectX (audioMaster, 0, 0)
|
Go4kVSTi::Go4kVSTi (audioMasterCallback audioMaster) : AudioEffectX (audioMaster, 0, 0)
|
||||||
{
|
{
|
||||||
|
m_chunkBuffer = 0;
|
||||||
if (audioMaster)
|
if (audioMaster)
|
||||||
{
|
{
|
||||||
setNumInputs (0); // no inputs
|
setNumInputs (0); // no inputs
|
||||||
@ -19,6 +20,7 @@ Go4kVSTi::Go4kVSTi (audioMasterCallback audioMaster) : AudioEffectX (audioMaster
|
|||||||
hasVu (false);
|
hasVu (false);
|
||||||
hasClip (false);
|
hasClip (false);
|
||||||
isSynth ();
|
isSynth ();
|
||||||
|
programsAreChunks (true);
|
||||||
#ifdef _8KLANG
|
#ifdef _8KLANG
|
||||||
setUniqueID ('8klg');
|
setUniqueID ('8klg');
|
||||||
#else
|
#else
|
||||||
@ -32,6 +34,7 @@ Go4kVSTi::Go4kVSTi (audioMasterCallback audioMaster) : AudioEffectX (audioMaster
|
|||||||
//-----------------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------------
|
||||||
Go4kVSTi::~Go4kVSTi ()
|
Go4kVSTi::~Go4kVSTi ()
|
||||||
{
|
{
|
||||||
|
delete[] m_chunkBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------------
|
||||||
@ -141,3 +144,61 @@ long Go4kVSTi::canDo (char* text)
|
|||||||
return -1; // explicitly can't do; 0 => don't know
|
return -1; // explicitly can't do; 0 => don't know
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------------------
|
||||||
|
long Go4kVSTi::getChunk(void** data, bool isPreset)
|
||||||
|
{
|
||||||
|
// serialize patch data into file, then load it back
|
||||||
|
char path[MAX_PATH];
|
||||||
|
char filename[MAX_PATH];
|
||||||
|
GetTempPath(MAX_PATH, path);
|
||||||
|
GetTempFileName(path, "4klang_", 0, filename);
|
||||||
|
Go4kVSTi_SavePatch(filename);
|
||||||
|
|
||||||
|
HANDLE h = CreateFile(filename, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0);
|
||||||
|
if (h == INVALID_HANDLE_VALUE)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
DWORD dummy;
|
||||||
|
DWORD size = GetFileSize(h, &dummy);
|
||||||
|
delete[] m_chunkBuffer;
|
||||||
|
m_chunkBuffer = new unsigned char[size];
|
||||||
|
ReadFile(h, m_chunkBuffer, size, &dummy, 0);
|
||||||
|
CloseHandle(h);
|
||||||
|
DeleteFile(filename);
|
||||||
|
|
||||||
|
if (dummy == size)
|
||||||
|
{
|
||||||
|
*data = m_chunkBuffer;
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------------------
|
||||||
|
long Go4kVSTi::setChunk(void* data, long byteSize, bool isPreset)
|
||||||
|
{
|
||||||
|
if (!data || !byteSize) return 0;
|
||||||
|
|
||||||
|
// write chunk into file, then deserialize as patch data
|
||||||
|
char path[MAX_PATH];
|
||||||
|
char filename[MAX_PATH];
|
||||||
|
GetTempPath(MAX_PATH, path);
|
||||||
|
GetTempFileName(path, "4klang_", 0, filename);
|
||||||
|
|
||||||
|
HANDLE h = CreateFile(filename, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
|
||||||
|
if (h == INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
DWORD err = GetLastError();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
DWORD dummy;
|
||||||
|
WriteFile(h, data, byteSize, &dummy, 0);
|
||||||
|
CloseHandle(h);
|
||||||
|
|
||||||
|
if (dummy == byteSize)
|
||||||
|
{
|
||||||
|
Go4kVSTi_LoadPatch(filename);
|
||||||
|
}
|
||||||
|
DeleteFile(filename);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ -40,12 +40,16 @@ public:
|
|||||||
virtual bool getProductString (char* text);
|
virtual bool getProductString (char* text);
|
||||||
virtual long getVendorVersion () {return 1;}
|
virtual long getVendorVersion () {return 1;}
|
||||||
virtual long canDo (char* text);
|
virtual long canDo (char* text);
|
||||||
|
virtual long getChunk(void** data, bool isPreset = false) override;
|
||||||
|
virtual long setChunk(void* data, long byteSize, bool isPreset = false) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void initProcess();
|
void initProcess();
|
||||||
void ApplyEvent(VstMidiEvent *event);
|
void ApplyEvent(VstMidiEvent *event);
|
||||||
|
|
||||||
std::vector<VstMidiEvent*> m_currentEvents;
|
std::vector<VstMidiEvent*> m_currentEvents;
|
||||||
|
|
||||||
|
unsigned char *m_chunkBuffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user