「波形データを SyroData に格納する時は 16bit/1ch」を忘れていた
修正し、volca sample 上で正しい音程で鳴る様になる
旧ソースは -> 08 波形エディタを繋げる
現状、統合ツールでは 16bit/2ch しか扱わないが、16bit/1ch も意識しておく(未検証)
AddSyroSample
bool AddSyroSample(void *pFmtChunk, void *pWData, DWORD Bytes, int SampleIndex)
{
TSyroData *pSD;
TWCkFmt *pCkFmt;
DWORD AllocBytes;
DWORD i, frames;
short *pd, *ps;
long add;
int j, ch;
if (MAX_SYRODATA <= CountSyroData) {
DisplayMessage(SYROSEx_Full);
return (false);
}
pSD = SyroData + CountSyroData;
pCkFmt = (TWCkFmt *)pFmtChunk;
ch = *((WORD *)pCkFmt->Channel);
AllocBytes = Bytes / ch; // 1ch にして格納
if (NULL == (pSD->pData = (BYTE *)malloc(AllocBytes))) {
DisplayMessage(SYROS_NotEnoughMemory);
return (false);
}
// Setup SyroData
pSD->DataType = TYPE_VS_SampleLiner;
switch (ch) {
case 1:
memcpy(pSD->pData, pWData, AllocBytes);
break;
case 2:
// 左右を平均して 1ch にする
frames = AllocBytes / sizeof(short);
pd = (short *)(pSD->pData);
ps = (short *)pWData;
for (i = 0; i < frames; i++) {
add = *ps++;
add += *ps++;
*pd++ = (short)(add / 2);
}
break;
default:
free(pSD->pData);
pSD->pData = NULL;
DisplayMessage(SYROS_IllegalData);
return (false);
}
pSD->Number = SampleIndex;
pSD->Size = AllocBytes;
pSD->Quality = *((WORD *)(pCkFmt->Bits));
pSD->Fs = *((DWORD *)(pCkFmt->Rate));
pSD->SampleEndian = LittleEndian;
CountSyroData++;
return (true);
}
↓ Windows 実行用ファイル 実行用ファイルについて