GUI: format

This commit is contained in:
tildearrow 2022-10-12 14:54:29 -05:00
parent 8be5e5a9e6
commit 78fc022c04

View file

@ -33,7 +33,7 @@ const char* waveGenBaseShapes[4]={
"Pulse" "Pulse"
}; };
const char* waveInterpolations[4] = { const char* waveInterpolations[4]={
"None", "None",
"Linear", "Linear",
"Cosine", "Cosine",
@ -563,73 +563,69 @@ void FurnaceGUI::drawWaveEdit() {
if (waveGenScaleX>256) waveGenScaleX=256; if (waveGenScaleX>256) waveGenScaleX=256;
} }
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
if (CWSliderInt("##WGInterpolation", &waveInterpolation, 0, 3, waveInterpolations[waveInterpolation])) { if (CWSliderInt("##WGInterpolation",&waveInterpolation,0,3,waveInterpolations[waveInterpolation])) {
if (waveInterpolation < 0) waveInterpolation = 0; if (waveInterpolation<0) waveInterpolation=0;
if (waveInterpolation > 3) waveInterpolation = 3; if (waveInterpolation>3) waveInterpolation=3;
//doGenerateWave();
} }
ImGui::TableNextColumn(); ImGui::TableNextColumn();
if (ImGui::Button("Scale X")) { if (ImGui::Button("Scale X")) {
if (waveGenScaleX > 0 && wave->len != waveGenScaleX) e->lockEngine([this, wave]() { if (waveGenScaleX>0 && wave->len!=waveGenScaleX) e->lockEngine([this,wave]() {
int origData[256]; int origData[256];
// Copy original wave to temp buffer // Copy original wave to temp buffer
// If longer than 256 samples, return // If longer than 256 samples, return
if (wave->len > 256) if (wave->len>256) {
{ showError("wavetable longer than 256 samples!");
showError("ERROR : Wavetable longer than 256 samples!");
return; return;
} }
memcpy(origData, wave->data, wave->len * sizeof(int)); memcpy(origData,wave->data,wave->len*sizeof(int));
float t = 0; // Index used into `origData` float t=0; // Index used into `origData`
for (int i = 0; i < waveGenScaleX; i++, t += (float)wave->len / waveGenScaleX) { for (int i=0; i<waveGenScaleX; i++, t+=(float)wave->len/waveGenScaleX) {
switch (waveInterpolation) {
switch (waveInterpolation) case 0: {
{ wave->data[i]=origData[i*wave->len/waveGenScaleX];
default: // No interpolation
{
wave->data[i] = origData[i * wave->len / waveGenScaleX];
break; // No interpolation
}
case 0:
{
wave->data[i] = origData[i * wave->len / waveGenScaleX];
break; break;
} }
case 1: // Linear case 1: { // Linear
{ int idx=t; // Implicitly floors `t`
int idx = t; // Implicitly floors `t` int s0=origData[(idx)%wave->len];
int s0 = origData[(idx) % wave->len], s1 = origData[(idx + 1) % wave->len]; int s1=origData[(idx+1)%wave->len];
double mu = (t - idx); double mu=(t-idx);
wave->data[i] = s0 + mu * s1 - (mu * s0); wave->data[i]=s0+mu*s1-(mu*s0);
break; break;
} }
case 2: // Cosine case 2: { // Cosine
{ int idx=t; // Implicitly floors `t`
int idx = t; // Implicitly floors `t` int s0=origData[(idx)%wave->len];
int s0 = origData[(idx) % wave->len], s1 = origData[(idx + 1) % wave->len]; int s1=origData[(idx+1)%wave->len];
double mu = (t - idx); double mu=(t-idx);
double muCos = (1 - cos(mu * M_PI)) / 2; double muCos=(1-cos(mu*M_PI))/2;
wave->data[i] = s0 + muCos * s1 - (muCos * s0); wave->data[i]=s0+muCos*s1-(muCos*s0);
break; break;
} }
case 3: // Cubic Spline case 3: { // Cubic Spline
{ int idx=t; // Implicitly floors `t`
int idx = t; // Implicitly floors `t` int s0=origData[((idx-1%wave->len+wave->len)%wave->len)];
int s0 = origData[((idx - 1 % wave->len + wave->len) % wave->len)], s1 = origData[(idx) % wave->len], s2 = origData[(idx + 1) % wave->len], s3 = origData[(idx + 2) % wave->len]; int s1=origData[(idx)%wave->len];
double a0, a1, a2, a3; int s2=origData[(idx+1)%wave->len];
double mu = (t - idx); int s3=origData[(idx+2)%wave->len];
double mu2 = mu * mu; double mu=(t-idx);
a0 = -0.5 * s0 + 1.5 * s1 - 1.5 * s2 + 0.5 * s3; double mu2=mu*mu;
a1 = s0 - 2.5 * s1 + 2 * s2 - 0.5 * s3; double a0=-0.5*s0+1.5*s1-1.5*s2+0.5*s3;
a2 = -0.5 * s0 + 0.5 * s2; double a1=s0-2.5*s1+2*s2-0.5*s3;
a3 = s1; double a2=-0.5*s0+0.5*s2;
wave->data[i] = (a0 * mu * mu2 + a1 * mu2 + a2 * mu + a3); double a3=s1;
wave->data[i]=(a0*mu*mu2+a1*mu2+a2*mu+a3);
break;
}
default: { // No interpolation
wave->data[i]=origData[i*wave->len/waveGenScaleX];
break;
} }
} }
} }
wave->len = waveGenScaleX; wave->len=waveGenScaleX;
MARK_MODIFIED; MARK_MODIFIED;
}); });
} }