GUI: implement "make me a drum kit" option

This commit is contained in:
tildearrow 2024-01-30 02:14:14 -05:00
parent 5224c4666d
commit 66bacef681
3 changed files with 45 additions and 4 deletions

View file

@ -254,6 +254,9 @@ void FurnaceGUI::sampleListItem(int i, int dir, int asset) {
if (ImGui::MenuItem("make instrument")) {
doAction(GUI_ACTION_SAMPLE_MAKE_INS);
}
if (ImGui::MenuItem("make me a drum kit")) {
doAction(GUI_ACTION_SAMPLE_LIST_MAKE_MAP);
}
if (ImGui::MenuItem("duplicate")) {
doAction(GUI_ACTION_SAMPLE_LIST_DUPLICATE);
}

View file

@ -5893,6 +5893,26 @@ bool FurnaceGUI::loop() {
if (ImGui::BeginPopup("InsTypeList",ImGuiWindowFlags_NoMove|ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings)) {
char temp[1024];
if (displayInsTypeListMakeInsSample==-2) {
ImGui::Text("Drum kit mode:");
if (ImGui::RadioButton("Normal",!makeDrumkitMode)) {
makeDrumkitMode=false;
}
if (ImGui::RadioButton("12 samples per octave",makeDrumkitMode)) {
makeDrumkitMode=true;
}
if (!makeDrumkitMode) {
ImGui::Text("Starting octave");
ImGui::SameLine();
if (ImGui::InputInt("##DKOctave",&makeDrumkitOctave,1,3)) {
if (makeDrumkitOctave<0) makeDrumkitOctave=0;
if (makeDrumkitOctave>9) makeDrumkitOctave=9;
}
}
ImGui::Separator();
}
for (DivInstrumentType& i: makeInsTypeList) {
strncpy(temp,insTypes[i][0],1023);
if (ImGui::MenuItem(temp)) {
@ -5907,10 +5927,24 @@ bool FurnaceGUI::loop() {
e->song.ins[curIns]->amiga.useNoteMap=true;
if (i!=DIV_INS_AMIGA) e->song.ins[curIns]->amiga.useSample=true;
for (int j=0; j<120; j++) {
e->song.ins[curIns]->amiga.noteMap[i].freq=48;
e->song.ins[curIns]->amiga.noteMap[i].map=j;
e->song.ins[curIns]->amiga.noteMap[i].dpcmFreq=15;
if (makeDrumkitMode) {
for (int j=0; j<120; j++) {
e->song.ins[curIns]->amiga.noteMap[j].freq=48;
e->song.ins[curIns]->amiga.noteMap[j].dpcmFreq=15;
e->song.ins[curIns]->amiga.noteMap[j].map=j%12;
if ((j%12)>=e->song.sampleLen) continue;
}
} else {
int index=-makeDrumkitOctave*12;
for (int j=0; j<120; j++) {
e->song.ins[curIns]->amiga.noteMap[j].freq=48;
e->song.ins[curIns]->amiga.noteMap[j].dpcmFreq=15;
if (index<0 || index>=e->song.sampleLen) {
index++;
continue;
}
e->song.ins[curIns]->amiga.noteMap[j].map=index++;
}
}
nextWindow=GUI_WINDOW_INS_EDIT;
@ -7267,6 +7301,7 @@ FurnaceGUI::FurnaceGUI():
killGraphics(false),
safeMode(false),
midiWakeUp(true),
makeDrumkitMode(false),
audioEngineChanged(false),
settingsChanged(false),
debugFFT(false),
@ -7277,6 +7312,7 @@ FurnaceGUI::FurnaceGUI():
macroPointSize(16),
waveEditStyle(0),
displayInsTypeListMakeInsSample(-1),
makeDrumkitOctave(3),
mobileEditPage(0),
wheelCalmDown(0),
shallDetectScale(0),

View file

@ -1477,6 +1477,7 @@ class FurnaceGUI {
bool killGraphics;
bool safeMode;
bool midiWakeUp;
bool makeDrumkitMode;
bool audioEngineChanged, settingsChanged, debugFFT;
bool willExport[DIV_MAX_CHIPS];
int vgmExportVersion;
@ -1486,6 +1487,7 @@ class FurnaceGUI {
int macroPointSize;
int waveEditStyle;
int displayInsTypeListMakeInsSample;
int makeDrumkitOctave;
int mobileEditPage;
int wheelCalmDown;
int shallDetectScale;