add AICA and YMZ ADPCM formats
This commit is contained in:
parent
a2ae7dbb3d
commit
ce253230ce
|
@ -744,6 +744,8 @@ size | description
|
||||||
1 | depth
|
1 | depth
|
||||||
| - 0: ZX Spectrum overlay drum (1-bit)
|
| - 0: ZX Spectrum overlay drum (1-bit)
|
||||||
| - 1: 1-bit NES DPCM (1-bit)
|
| - 1: 1-bit NES DPCM (1-bit)
|
||||||
|
| - 2: AICA ADPCM
|
||||||
|
| - 3: YMZ ADPCM
|
||||||
| - 4: QSound ADPCM
|
| - 4: QSound ADPCM
|
||||||
| - 5: ADPCM-A
|
| - 5: ADPCM-A
|
||||||
| - 6: ADPCM-B
|
| - 6: ADPCM-B
|
||||||
|
|
|
@ -93,6 +93,18 @@ bool DivSample::initInternal(unsigned char d, int count) {
|
||||||
dataDPCM=new unsigned char[lengthDPCM];
|
dataDPCM=new unsigned char[lengthDPCM];
|
||||||
memset(dataDPCM,0,lengthDPCM);
|
memset(dataDPCM,0,lengthDPCM);
|
||||||
break;
|
break;
|
||||||
|
case 2: // AICA ADPCM
|
||||||
|
if (dataAICA!=NULL) delete[] dataAICA;
|
||||||
|
lengthAICA=(count+1)/2;
|
||||||
|
dataAICA=new unsigned char[(lengthAICA+255)&(~0xff)];
|
||||||
|
memset(dataAICA,0,(lengthAICA+255)&(~0xff));
|
||||||
|
break;
|
||||||
|
case 3: // YMZ ADPCM
|
||||||
|
if (dataZ!=NULL) delete[] dataZ;
|
||||||
|
lengthZ=(count+1)/2;
|
||||||
|
dataZ=new unsigned char[(lengthZ+255)&(~0xff)];
|
||||||
|
memset(dataZ,0,(lengthZ+255)&(~0xff));
|
||||||
|
break;
|
||||||
case 4: // QSound ADPCM
|
case 4: // QSound ADPCM
|
||||||
if (dataQSoundA!=NULL) delete[] dataQSoundA;
|
if (dataQSoundA!=NULL) delete[] dataQSoundA;
|
||||||
lengthQSoundA=(count+1)/2;
|
lengthQSoundA=(count+1)/2;
|
||||||
|
@ -657,6 +669,12 @@ void DivSample::render() {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 2: // AICA ADPCM
|
||||||
|
aica_decode(dataAICA,data16,samples);
|
||||||
|
break;
|
||||||
|
case 3: // YMZ ADPCM
|
||||||
|
ymz_decode(dataZ,data16,samples);
|
||||||
|
break;
|
||||||
case 4: // QSound ADPCM
|
case 4: // QSound ADPCM
|
||||||
bs_decode(dataQSoundA,data16,samples);
|
bs_decode(dataQSoundA,data16,samples);
|
||||||
break;
|
break;
|
||||||
|
@ -709,6 +727,14 @@ void DivSample::render() {
|
||||||
if (accum>127) accum=127;
|
if (accum>127) accum=127;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (depth!=2) { // AICA ADPCM
|
||||||
|
if (!initInternal(2,samples)) return;
|
||||||
|
aica_encode(data16,dataAICA,(samples+511)&(~0x1ff));
|
||||||
|
}
|
||||||
|
if (depth!=3) { // YMZ ADPCM
|
||||||
|
if (!initInternal(3,samples)) return;
|
||||||
|
ymz_encode(data16,dataZ,(samples+511)&(~0x1ff));
|
||||||
|
}
|
||||||
if (depth!=4) { // QSound ADPCM
|
if (depth!=4) { // QSound ADPCM
|
||||||
if (!initInternal(4,samples)) return;
|
if (!initInternal(4,samples)) return;
|
||||||
bs_encode(data16,dataQSoundA,samples);
|
bs_encode(data16,dataQSoundA,samples);
|
||||||
|
@ -745,6 +771,10 @@ void* DivSample::getCurBuf() {
|
||||||
return data1;
|
return data1;
|
||||||
case 1:
|
case 1:
|
||||||
return dataDPCM;
|
return dataDPCM;
|
||||||
|
case 2:
|
||||||
|
return dataAICA;
|
||||||
|
case 3:
|
||||||
|
return dataZ;
|
||||||
case 4:
|
case 4:
|
||||||
return dataQSoundA;
|
return dataQSoundA;
|
||||||
case 5:
|
case 5:
|
||||||
|
@ -771,6 +801,10 @@ unsigned int DivSample::getCurBufLen() {
|
||||||
return length1;
|
return length1;
|
||||||
case 1:
|
case 1:
|
||||||
return lengthDPCM;
|
return lengthDPCM;
|
||||||
|
case 2:
|
||||||
|
return lengthAICA;
|
||||||
|
case 3:
|
||||||
|
return lengthZ;
|
||||||
case 4:
|
case 4:
|
||||||
return lengthQSoundA;
|
return lengthQSoundA;
|
||||||
case 5:
|
case 5:
|
||||||
|
@ -881,6 +915,8 @@ DivSample::~DivSample() {
|
||||||
if (data16) delete[] data16;
|
if (data16) delete[] data16;
|
||||||
if (data1) delete[] data1;
|
if (data1) delete[] data1;
|
||||||
if (dataDPCM) delete[] dataDPCM;
|
if (dataDPCM) delete[] dataDPCM;
|
||||||
|
if (dataAICA) delete[] dataAICA;
|
||||||
|
if (dataZ) delete[] dataZ;
|
||||||
if (dataQSoundA) delete[] dataQSoundA;
|
if (dataQSoundA) delete[] dataQSoundA;
|
||||||
if (dataA) delete[] dataA;
|
if (dataA) delete[] dataA;
|
||||||
if (dataB) delete[] dataB;
|
if (dataB) delete[] dataB;
|
||||||
|
|
|
@ -62,6 +62,8 @@ struct DivSample {
|
||||||
// valid values are:
|
// valid values are:
|
||||||
// - 0: ZX Spectrum overlay drum (1-bit)
|
// - 0: ZX Spectrum overlay drum (1-bit)
|
||||||
// - 1: 1-bit NES DPCM (1-bit)
|
// - 1: 1-bit NES DPCM (1-bit)
|
||||||
|
// - 2: AICA ADPCM
|
||||||
|
// - 3: YMZ ADPCM
|
||||||
// - 4: QSound ADPCM
|
// - 4: QSound ADPCM
|
||||||
// - 5: ADPCM-A
|
// - 5: ADPCM-A
|
||||||
// - 6: ADPCM-B
|
// - 6: ADPCM-B
|
||||||
|
@ -77,6 +79,8 @@ struct DivSample {
|
||||||
short* data16; // 16
|
short* data16; // 16
|
||||||
unsigned char* data1; // 0
|
unsigned char* data1; // 0
|
||||||
unsigned char* dataDPCM; // 1
|
unsigned char* dataDPCM; // 1
|
||||||
|
unsigned char* dataAICA; // 2
|
||||||
|
unsigned char* dataZ; // 3
|
||||||
unsigned char* dataQSoundA; // 4
|
unsigned char* dataQSoundA; // 4
|
||||||
unsigned char* dataA; // 5
|
unsigned char* dataA; // 5
|
||||||
unsigned char* dataB; // 6
|
unsigned char* dataB; // 6
|
||||||
|
@ -84,8 +88,8 @@ struct DivSample {
|
||||||
unsigned char* dataBRR; // 9
|
unsigned char* dataBRR; // 9
|
||||||
unsigned char* dataVOX; // 10
|
unsigned char* dataVOX; // 10
|
||||||
|
|
||||||
unsigned int length8, length16, length1, lengthDPCM, lengthQSoundA, lengthA, lengthB, lengthX68, lengthBRR, lengthVOX;
|
unsigned int length8, length16, length1, lengthDPCM, lengthAICA, lengthZ, lengthQSoundA, lengthA, lengthB, lengthX68, lengthBRR, lengthVOX;
|
||||||
unsigned int off8, off16, off1, offDPCM, offQSoundA, offA, offB, offX68, offBRR, offVOX;
|
unsigned int off8, off16, off1, offDPCM, offAICA, offZ, offQSoundA, offA, offB, offX68, offBRR, offVOX;
|
||||||
unsigned int offSegaPCM, offQSound, offX1_010, offSU;
|
unsigned int offSegaPCM, offQSound, offX1_010, offSU;
|
||||||
|
|
||||||
unsigned int samples;
|
unsigned int samples;
|
||||||
|
@ -218,6 +222,8 @@ struct DivSample {
|
||||||
data16(NULL),
|
data16(NULL),
|
||||||
data1(NULL),
|
data1(NULL),
|
||||||
dataDPCM(NULL),
|
dataDPCM(NULL),
|
||||||
|
dataAICA(NULL),
|
||||||
|
dataZ(NULL),
|
||||||
dataQSoundA(NULL),
|
dataQSoundA(NULL),
|
||||||
dataA(NULL),
|
dataA(NULL),
|
||||||
dataB(NULL),
|
dataB(NULL),
|
||||||
|
@ -228,6 +234,8 @@ struct DivSample {
|
||||||
length16(0),
|
length16(0),
|
||||||
length1(0),
|
length1(0),
|
||||||
lengthDPCM(0),
|
lengthDPCM(0),
|
||||||
|
lengthAICA(0),
|
||||||
|
lengthZ(0),
|
||||||
lengthQSoundA(0),
|
lengthQSoundA(0),
|
||||||
lengthA(0),
|
lengthA(0),
|
||||||
lengthB(0),
|
lengthB(0),
|
||||||
|
@ -238,6 +246,8 @@ struct DivSample {
|
||||||
off16(0),
|
off16(0),
|
||||||
off1(0),
|
off1(0),
|
||||||
offDPCM(0),
|
offDPCM(0),
|
||||||
|
offAICA(0),
|
||||||
|
offZ(0),
|
||||||
offQSoundA(0),
|
offQSoundA(0),
|
||||||
offA(0),
|
offA(0),
|
||||||
offB(0),
|
offB(0),
|
||||||
|
|
|
@ -116,8 +116,8 @@ const char* insTypes[DIV_INS_MAX]={
|
||||||
const char* sampleDepths[17]={
|
const char* sampleDepths[17]={
|
||||||
"1-bit PCM",
|
"1-bit PCM",
|
||||||
"1-bit DPCM",
|
"1-bit DPCM",
|
||||||
NULL,
|
"Yamaha AICA",
|
||||||
NULL,
|
"YMZ/YMU ADPCM",
|
||||||
"QSound ADPCM",
|
"QSound ADPCM",
|
||||||
"ADPCM-A",
|
"ADPCM-A",
|
||||||
"ADPCM-B",
|
"ADPCM-B",
|
||||||
|
|
Loading…
Reference in New Issue