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")) { if (ImGui::MenuItem("make instrument")) {
doAction(GUI_ACTION_SAMPLE_MAKE_INS); 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")) { if (ImGui::MenuItem("duplicate")) {
doAction(GUI_ACTION_SAMPLE_LIST_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)) { if (ImGui::BeginPopup("InsTypeList",ImGuiWindowFlags_NoMove|ImGuiWindowFlags_AlwaysAutoResize|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoSavedSettings)) {
char temp[1024]; 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) { for (DivInstrumentType& i: makeInsTypeList) {
strncpy(temp,insTypes[i][0],1023); strncpy(temp,insTypes[i][0],1023);
if (ImGui::MenuItem(temp)) { if (ImGui::MenuItem(temp)) {
@ -5907,10 +5927,24 @@ bool FurnaceGUI::loop() {
e->song.ins[curIns]->amiga.useNoteMap=true; e->song.ins[curIns]->amiga.useNoteMap=true;
if (i!=DIV_INS_AMIGA) e->song.ins[curIns]->amiga.useSample=true; if (i!=DIV_INS_AMIGA) e->song.ins[curIns]->amiga.useSample=true;
if (makeDrumkitMode) {
for (int j=0; j<120; j++) { for (int j=0; j<120; j++) {
e->song.ins[curIns]->amiga.noteMap[i].freq=48; e->song.ins[curIns]->amiga.noteMap[j].freq=48;
e->song.ins[curIns]->amiga.noteMap[i].map=j; e->song.ins[curIns]->amiga.noteMap[j].dpcmFreq=15;
e->song.ins[curIns]->amiga.noteMap[i].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; nextWindow=GUI_WINDOW_INS_EDIT;
@ -7267,6 +7301,7 @@ FurnaceGUI::FurnaceGUI():
killGraphics(false), killGraphics(false),
safeMode(false), safeMode(false),
midiWakeUp(true), midiWakeUp(true),
makeDrumkitMode(false),
audioEngineChanged(false), audioEngineChanged(false),
settingsChanged(false), settingsChanged(false),
debugFFT(false), debugFFT(false),
@ -7277,6 +7312,7 @@ FurnaceGUI::FurnaceGUI():
macroPointSize(16), macroPointSize(16),
waveEditStyle(0), waveEditStyle(0),
displayInsTypeListMakeInsSample(-1), displayInsTypeListMakeInsSample(-1),
makeDrumkitOctave(3),
mobileEditPage(0), mobileEditPage(0),
wheelCalmDown(0), wheelCalmDown(0),
shallDetectScale(0), shallDetectScale(0),

View file

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