GUI: improve sample type conversion
This commit is contained in:
parent
0fd5483b59
commit
c7b24f706f
|
@ -699,6 +699,40 @@ bool DivSample::insert(unsigned int pos, unsigned int length) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DivSample::convert(DivSampleDepth newDepth) {
|
||||||
|
render();
|
||||||
|
depth=newDepth;
|
||||||
|
switch (depth) {
|
||||||
|
case DIV_SAMPLE_DEPTH_1BIT:
|
||||||
|
setSampleCount((samples+7)&(~7));
|
||||||
|
break;
|
||||||
|
case DIV_SAMPLE_DEPTH_1BIT_DPCM:
|
||||||
|
setSampleCount((1+((((samples+7)/8)+15)&(~15)))<<3);
|
||||||
|
break;
|
||||||
|
case DIV_SAMPLE_DEPTH_YMZ_ADPCM:
|
||||||
|
setSampleCount(((lengthZ+3)&(~0x03))*2);
|
||||||
|
break;
|
||||||
|
case DIV_SAMPLE_DEPTH_QSOUND_ADPCM: // QSound ADPCM
|
||||||
|
setSampleCount((samples+1)&(~1));
|
||||||
|
break;
|
||||||
|
case DIV_SAMPLE_DEPTH_ADPCM_A: // ADPCM-A
|
||||||
|
setSampleCount((samples+1)&(~1));
|
||||||
|
break;
|
||||||
|
case DIV_SAMPLE_DEPTH_ADPCM_B: // ADPCM-B
|
||||||
|
setSampleCount((samples+1)&(~1));
|
||||||
|
break;
|
||||||
|
case DIV_SAMPLE_DEPTH_BRR: // BRR
|
||||||
|
setSampleCount(16*(lengthBRR/9));
|
||||||
|
break;
|
||||||
|
case DIV_SAMPLE_DEPTH_VOX: // VOX
|
||||||
|
setSampleCount((samples+1)&(~1));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
render();
|
||||||
|
}
|
||||||
|
|
||||||
#define RESAMPLE_BEGIN \
|
#define RESAMPLE_BEGIN \
|
||||||
if (samples<1) return true; \
|
if (samples<1) return true; \
|
||||||
int finalCount=(double)samples*(tRate/sRate); \
|
int finalCount=(double)samples*(tRate/sRate); \
|
||||||
|
|
|
@ -269,6 +269,13 @@ struct DivSample {
|
||||||
*/
|
*/
|
||||||
bool resample(double sRate, double tRate, int filter);
|
bool resample(double sRate, double tRate, int filter);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* convert sample depth.
|
||||||
|
* @warning do not attempt to do this outside of a synchronized block!
|
||||||
|
* @param newDepth the new depth.
|
||||||
|
*/
|
||||||
|
void convert(DivSampleDepth newDepth);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* initialize the rest of sample formats for this sample.
|
* initialize the rest of sample formats for this sample.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -257,8 +257,7 @@ void FurnaceGUI::drawSampleEdit() {
|
||||||
if (ImGui::Selectable(sampleDepths[i])) {
|
if (ImGui::Selectable(sampleDepths[i])) {
|
||||||
sample->prepareUndo(true);
|
sample->prepareUndo(true);
|
||||||
e->lockEngine([this,sample,i]() {
|
e->lockEngine([this,sample,i]() {
|
||||||
sample->render();
|
sample->convert((DivSampleDepth)i);
|
||||||
sample->depth=(DivSampleDepth)i;
|
|
||||||
e->renderSamples();
|
e->renderSamples();
|
||||||
});
|
});
|
||||||
updateSampleTex=true;
|
updateSampleTex=true;
|
||||||
|
|
Loading…
Reference in New Issue