前へ:06 ソースを弄る(3)
SyroLibVs の呼出しを包む
包んでいるソースファイル以外では SyroLibVs を触らない (ヘッダも include しない)
他ソースからの呼出し:
パターン変換呼出し
ClearSyro();
AddSyroPattern(pPattern, 1); // <-
GenerateSyroStream("Test01.vsss", this);
.h 抜粋
void InizSyro(void);
void SettleSyro(void);
bool GenerateSyroStream(char *pName, TForm *pReturnForm);
void ClearSyro(void);
bool AddSyroEraseSample(int EraseIndex);
bool AddSyroPattern(void *pPData, int PatternIndex);
.cpp 抜粋
// ※ まだエラートラップが不完全
//---------------------------------------------------------------------------
// Initialyze
//---------------------------------------------------------------------------
void InizSyro(void)
{
memset(SyroData, 0, sizeof(SyroData));
CountSyroData = 0;
}
//---------------------------------------------------------------------------
// Settle
//---------------------------------------------------------------------------
void SettleSyro(void)
{
TSyroData *pSD;
int i;
pSD = SyroData;
for (i = 0; i < MAX_SYRODATA; i++, pSD++) {
if (NULL != pSD->pData) {
free(pSD->pData);
pSD->pData = NULL;
}
}
}
//---------------------------------------------------------------------------
// Clear
//---------------------------------------------------------------------------
void ClearSyro(void)
{
SettleSyro();
CountSyroData = 0;
}
//---------------------------------------------------------------------------
// Generate syro stream
//---------------------------------------------------------------------------
bool GenerateSyroStream(char *pName, TForm *pReturnForm)
{
TCursor SaveCursor;
DWORD TotalFrames, i;
int sts;
DWORD SizeDataChunk;
short *pDataChunk, *pd, left, right;
int prog;
pPrgBar->Position = prog = MIN_Progress;
fUseSyro->Show();
pLbProc->Caption = "Generate syro stream";
Application->ProcessMessages();
SaveCursor = Screen->Cursor;
Screen->Cursor = crHourGlass;
// Start (lib)
sts = SyroLibVsStart(&SyroHandle, SyroData, CountSyroData, 0, &TotalFrames);
if (SYROS_Success != sts) {
DisplayMessage(sts);
return (false);
}
// Allocate Output
SizeDataChunk = TotalFrames * (2 * sizeof(short));
if (NULL == (pDataChunk = (short *)malloc(SizeDataChunk))) {
SyroLibVsEnd(SyroHandle);
Screen->Cursor = SaveCursor;
DisplayMessage(SYROS_NotEnoughMemory);
return (false);
}
// Get Data (lib)
pd = pDataChunk;
for (i = 0; i < TotalFrames; i++) {
SyroLibVsGetSample(SyroHandle, (pd + 0), (pd + 1));
pd += 2;
prog = (int)(((__int64)i * MAX_Progress) / TotalFrames);
if (pPrgBar->Position != prog) {
pPrgBar->Position = prog;
Application->ProcessMessages();
}
}
pPrgBar->Position = prog = MAX_Progress;
// End (lib)
SyroLibVsEnd(SyroHandle);
// Output .wav
OutputWaveFile(pName, pDataChunk, SizeDataChunk);
free(pDataChunk);
ClearSyro();
Screen->Cursor = SaveCursor;
Sleep(1000);
fUseSyro->Hide();
pReturnForm->SetFocus();
return (true);
}