diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index fff90e68..c7ab535c 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -2486,12 +2486,22 @@ void DivEngine::muteChannel(int chan, bool mute) { isBusy.unlock(); } -int DivEngine::addInstrument() { +int DivEngine::addInstrument(int refChan) { isBusy.lock(); DivInstrument* ins=new DivInstrument; int insCount=(int)song.ins.size(); ins->name=fmt::sprintf("Instrument %d",insCount); - ins->mode=isFMSystem(song.system[0]); + if (getChannelType(refChan)==0) { + ins->type=DIV_INS_FM; + } else { + ins->type=DIV_INS_STD; + if (song.system[dispatchOfChan[refChan]]==DIV_SYSTEM_GB) { + ins->type=DIV_INS_GB; + } + if (song.system[dispatchOfChan[refChan]]==DIV_SYSTEM_C64_8580 || song.system[dispatchOfChan[refChan]]==DIV_SYSTEM_C64_6581) { + ins->type=DIV_INS_C64; + } + } song.ins.push_back(ins); song.insLen=insCount+1; isBusy.unlock(); diff --git a/src/engine/engine.h b/src/engine/engine.h index 029d7fd5..21dc348f 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -317,7 +317,7 @@ class DivEngine { bool isPlaying(); // add instrument - int addInstrument(); + int addInstrument(int refChan=0); // delete instrument void delInstrument(int index); diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 87c19f96..b654be40 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -506,7 +506,7 @@ void FurnaceGUI::drawInsList() { if (!insListOpen) return; if (ImGui::Begin("Instruments",&insListOpen)) { if (ImGui::Button(ICON_FA_PLUS "##InsAdd")) { - curIns=e->addInstrument(); + curIns=e->addInstrument(cursor.xCoarse); modified=true; } ImGui::SameLine();