From 1c94975a0a5268a591dd37967910f8d29b891763 Mon Sep 17 00:00:00 2001 From: Eknous-P Date: Wed, 26 Jul 2023 18:41:17 +0400 Subject: [PATCH 01/87] primitive effect sorting --- src/gui/effectList.cpp | 50 +++++++++++++++++++++++++++++++++++++++++- src/gui/gui.cpp | 11 ++++++++++ src/gui/gui.h | 3 +++ 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/gui/effectList.cpp b/src/gui/effectList.cpp index 604204b86..d192340de 100644 --- a/src/gui/effectList.cpp +++ b/src/gui/effectList.cpp @@ -12,6 +12,40 @@ void FurnaceGUI::drawEffectList() { ImGui::SetNextWindowSizeConstraints(ImVec2(60.0f*dpiScale,20.0f*dpiScale),ImVec2(canvasW,canvasH)); if (ImGui::Begin("Effect List",&effectListOpen,globalWinFlags)) { ImGui::Text("Chip at cursor: %s",e->getSystemName(e->sysOfChan[cursor.xCoarse])); + ImGui::Text("Sort Effects:"); + ImGui::Checkbox("All",&effectShowAll); + if (effectShowAll) { + effectShowMisc = true; + effectShowPanning = true; + effectShowPitch = true; + effectShowVolume = true; + effectShowSong = true; + effectShowTime = true; + effectShowSpeed = true; + effectShowSysPrimary = true; + effectShowSysSecondary = true; + } + ImGui::SameLine(); + ImGui::Checkbox("Pitch",&effectShowPitch); + ImGui::SameLine(); + ImGui::Checkbox("Song",&effectShowSong); + ImGui::SameLine(); + ImGui::Checkbox("Time",&effectShowTime); + ImGui::SameLine(); + ImGui::Checkbox("Speed",&effectShowSpeed); + ImGui::SameLine(); + ImGui::Checkbox("Panning",&effectShowPanning); + // ImGui::SameLine(); + ImGui::Checkbox("Volume",&effectShowVolume); + ImGui::SameLine(); + ImGui::Checkbox("System (primary)",&effectShowSysPrimary); + ImGui::SameLine(); + ImGui::Checkbox("System (secondary)",&effectShowSysSecondary); + ImGui::SameLine(); + ImGui::Checkbox("Miscellanious",&effectShowMisc); + + effectShowAll = effectShowMisc && effectShowPanning && effectShowPitch && effectShowVolume && effectShowSong && effectShowTime && effectShowSpeed && effectShowSysPrimary && effectShowSysSecondary; + if (ImGui::BeginTable("effectList",2)) { ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed); ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch); @@ -25,11 +59,25 @@ void FurnaceGUI::drawEffectList() { const char* prevName=NULL; for (int i=0; i<256; i++) { const char* name=e->getEffectDesc(i,cursor.xCoarse); + bool effectShow = true; + switch (fxColors[i]) { + case GUI_COLOR_PATTERN_EFFECT_MISC: effectShow = effectShowMisc; break; + case GUI_COLOR_PATTERN_EFFECT_SONG: effectShow = effectShowSong; break; + case GUI_COLOR_PATTERN_EFFECT_SPEED: effectShow = effectShowSpeed; break; + case GUI_COLOR_PATTERN_EFFECT_TIME: effectShow = effectShowTime; break; + case GUI_COLOR_PATTERN_EFFECT_PITCH: effectShow = effectShowPitch; break; + case GUI_COLOR_PATTERN_EFFECT_PANNING: effectShow = effectShowPanning; break; + case GUI_COLOR_PATTERN_EFFECT_VOLUME: effectShow = effectShowVolume; break; + case GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY: effectShow = effectShowSysPrimary; break; + case GUI_COLOR_PATTERN_EFFECT_SYS_SECONDARY: effectShow = effectShowSysSecondary; break; + default: effectShow = true; break; + } + // effectShow = effectShow && effectShowAll; if (name==prevName) { continue; } prevName=name; - if (name!=NULL) { + if (name!=NULL && effectShow) { ImGui::TableNextRow(); ImGui::TableNextColumn(); ImGui::PushFont(patFont); diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index e84c3ecd2..088f1b8d7 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -7153,6 +7153,17 @@ FurnaceGUI::FurnaceGUI(): pianoView(PIANO_LAYOUT_STANDARD), pianoInputPadMode(PIANO_INPUT_PAD_DISABLE), #endif + //effect sorting + effectShowAll(true), + effectShowPitch(true), + effectShowVolume(true), + effectShowPanning(true), + effectShowSong(true), + effectShowTime(true), + effectShowSpeed(true), + effectShowSysPrimary(true), + effectShowSysSecondary(true), + effectShowMisc(true), hasACED(false), waveGenBaseShape(0), waveInterpolation(0), diff --git a/src/gui/gui.h b/src/gui/gui.h index b4a8a3e5b..e1cdd5d3d 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1729,6 +1729,9 @@ class FurnaceGUI { bool subSongsOpen, findOpen, spoilerOpen, patManagerOpen, sysManagerOpen, clockOpen, speedOpen; bool groovesOpen, introMonOpen; + //effect sorting + bool effectShowAll, effectShowPitch, effectShowVolume, effectShowPanning, effectShowSong, effectShowTime, effectShowSpeed, effectShowSysPrimary, effectShowSysSecondary, effectShowMisc; + bool basicMode, shortIntro; bool insListDir, waveListDir, sampleListDir; From 54d409714636d941e3667ad71fa418c579e536cd Mon Sep 17 00:00:00 2001 From: Eknous-P Date: Wed, 26 Jul 2023 18:53:39 +0400 Subject: [PATCH 02/87] put sorting checkboxes in a treenode --- src/gui/effectList.cpp | 64 ++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/src/gui/effectList.cpp b/src/gui/effectList.cpp index d192340de..26bea5a12 100644 --- a/src/gui/effectList.cpp +++ b/src/gui/effectList.cpp @@ -12,38 +12,40 @@ void FurnaceGUI::drawEffectList() { ImGui::SetNextWindowSizeConstraints(ImVec2(60.0f*dpiScale,20.0f*dpiScale),ImVec2(canvasW,canvasH)); if (ImGui::Begin("Effect List",&effectListOpen,globalWinFlags)) { ImGui::Text("Chip at cursor: %s",e->getSystemName(e->sysOfChan[cursor.xCoarse])); - ImGui::Text("Sort Effects:"); - ImGui::Checkbox("All",&effectShowAll); - if (effectShowAll) { - effectShowMisc = true; - effectShowPanning = true; - effectShowPitch = true; - effectShowVolume = true; - effectShowSong = true; - effectShowTime = true; - effectShowSpeed = true; - effectShowSysPrimary = true; - effectShowSysSecondary = true; + // ImGui::Text("Sort Effects:"); + if (ImGui::TreeNode("Sort Effects")) { + ImGui::Checkbox("All",&effectShowAll); + if (effectShowAll) { + effectShowMisc = true; + effectShowPanning = true; + effectShowPitch = true; + effectShowVolume = true; + effectShowSong = true; + effectShowTime = true; + effectShowSpeed = true; + effectShowSysPrimary = true; + effectShowSysSecondary = true; + } + // ImGui::SameLine(); + ImGui::Checkbox("Pitch",&effectShowPitch); + // ImGui::SameLine(); + ImGui::Checkbox("Song",&effectShowSong); + // ImGui::SameLine(); + ImGui::Checkbox("Time",&effectShowTime); + // ImGui::SameLine(); + ImGui::Checkbox("Speed",&effectShowSpeed); + // ImGui::SameLine(); + ImGui::Checkbox("Panning",&effectShowPanning); + // ImGui::SameLine(); + ImGui::Checkbox("Volume",&effectShowVolume); + // ImGui::SameLine(); + ImGui::Checkbox("System (primary)",&effectShowSysPrimary); + // ImGui::SameLine(); + ImGui::Checkbox("System (secondary)",&effectShowSysSecondary); + // ImGui::SameLine(); + ImGui::Checkbox("Miscellanious",&effectShowMisc); + ImGui::TreePop(); } - ImGui::SameLine(); - ImGui::Checkbox("Pitch",&effectShowPitch); - ImGui::SameLine(); - ImGui::Checkbox("Song",&effectShowSong); - ImGui::SameLine(); - ImGui::Checkbox("Time",&effectShowTime); - ImGui::SameLine(); - ImGui::Checkbox("Speed",&effectShowSpeed); - ImGui::SameLine(); - ImGui::Checkbox("Panning",&effectShowPanning); - // ImGui::SameLine(); - ImGui::Checkbox("Volume",&effectShowVolume); - ImGui::SameLine(); - ImGui::Checkbox("System (primary)",&effectShowSysPrimary); - ImGui::SameLine(); - ImGui::Checkbox("System (secondary)",&effectShowSysSecondary); - ImGui::SameLine(); - ImGui::Checkbox("Miscellanious",&effectShowMisc); - effectShowAll = effectShowMisc && effectShowPanning && effectShowPitch && effectShowVolume && effectShowSong && effectShowTime && effectShowSpeed && effectShowSysPrimary && effectShowSysSecondary; if (ImGui::BeginTable("effectList",2)) { From d19214045c6adb93ae89ecd7880c3eaf2fca6b4f Mon Sep 17 00:00:00 2001 From: Eknous-P Date: Wed, 26 Jul 2023 19:28:42 +0400 Subject: [PATCH 03/87] reorder fix --- src/gui/gui.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/gui.h b/src/gui/gui.h index e1cdd5d3d..d1373e73a 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1729,8 +1729,6 @@ class FurnaceGUI { bool subSongsOpen, findOpen, spoilerOpen, patManagerOpen, sysManagerOpen, clockOpen, speedOpen; bool groovesOpen, introMonOpen; - //effect sorting - bool effectShowAll, effectShowPitch, effectShowVolume, effectShowPanning, effectShowSong, effectShowTime, effectShowSpeed, effectShowSysPrimary, effectShowSysSecondary, effectShowMisc; bool basicMode, shortIntro; bool insListDir, waveListDir, sampleListDir; @@ -2034,6 +2032,9 @@ class FurnaceGUI { bool pianoReadonly; int pianoOffset, pianoOffsetEdit; int pianoView, pianoInputPadMode; + + //effect sorting + bool effectShowAll, effectShowPitch, effectShowVolume, effectShowPanning, effectShowSong, effectShowTime, effectShowSpeed, effectShowSysPrimary, effectShowSysSecondary, effectShowMisc; // TX81Z bool hasACED; From 60006dc862e0b1d126b1aa8a396dcf697591590c Mon Sep 17 00:00:00 2001 From: Eknous-P Date: Wed, 26 Jul 2023 19:51:28 +0400 Subject: [PATCH 04/87] typo --- src/gui/effectList.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/effectList.cpp b/src/gui/effectList.cpp index 26bea5a12..d9d9a6ecf 100644 --- a/src/gui/effectList.cpp +++ b/src/gui/effectList.cpp @@ -43,7 +43,7 @@ void FurnaceGUI::drawEffectList() { // ImGui::SameLine(); ImGui::Checkbox("System (secondary)",&effectShowSysSecondary); // ImGui::SameLine(); - ImGui::Checkbox("Miscellanious",&effectShowMisc); + ImGui::Checkbox("Miscellaneous",&effectShowMisc); ImGui::TreePop(); } effectShowAll = effectShowMisc && effectShowPanning && effectShowPitch && effectShowVolume && effectShowSong && effectShowTime && effectShowSpeed && effectShowSysPrimary && effectShowSysSecondary; From 5c861ca36eb04e38eca359038e94da25fe7a2f1f Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 26 Jul 2023 17:58:57 -0500 Subject: [PATCH 05/87] compensate for sample movement/deletion --- src/engine/engine.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++ src/engine/engine.h | 3 +++ 2 files changed, 45 insertions(+) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 1b9f427c8..d27b6a57e 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -3851,6 +3851,23 @@ void DivEngine::delSample(int index) { song.sampleLen=song.sample.size(); removeAsset(song.sampleDir,index); checkAssetDir(song.sampleDir,song.sample.size()); + + // compensate + for (DivInstrument* i: song.ins) { + if (i->amiga.initSample==index) { + i->amiga.initSample=-1; + } else if (i->amiga.initSample>index) { + i->amiga.initSample--; + } + for (int j=0; j<120; j++) { + if (i->amiga.noteMap[j].map==index) { + i->amiga.noteMap[j].map=-1; + } else if (i->amiga.noteMap[j].map>index) { + i->amiga.noteMap[j].map--; + } + } + } + renderSamples(); } saveLock.unlock(); @@ -4042,6 +4059,27 @@ void DivEngine::exchangeIns(int one, int two) { } } +void DivEngine::exchangeWave(int one, int two) { + // TODO +} + +void DivEngine::exchangeSample(int one, int two) { + for (DivInstrument* i: song.ins) { + if (i->amiga.initSample==one) { + i->amiga.initSample=two; + } else if (i->amiga.initSample==two) { + i->amiga.initSample=one; + } + for (int j=0; j<120; j++) { + if (i->amiga.noteMap[j].map==one) { + i->amiga.noteMap[j].map=two; + } else if (i->amiga.noteMap[j].map==two) { + i->amiga.noteMap[j].map=one; + } + } + } +} + bool DivEngine::moveInsUp(int which) { if (which<1 || which>=(int)song.ins.size()) return false; BUSY_BEGIN; @@ -4064,6 +4102,7 @@ bool DivEngine::moveWaveUp(int which) { song.wave[which]=song.wave[which-1]; song.wave[which-1]=prev; moveAsset(song.waveDir,which,which-1); + exchangeWave(which,which-1); saveLock.unlock(); BUSY_END; return true; @@ -4080,6 +4119,7 @@ bool DivEngine::moveSampleUp(int which) { song.sample[which]=song.sample[which-1]; song.sample[which-1]=prev; moveAsset(song.sampleDir,which,which-1); + exchangeSample(which,which-1); saveLock.unlock(); renderSamples(); BUSY_END; @@ -4107,6 +4147,7 @@ bool DivEngine::moveWaveDown(int which) { saveLock.lock(); song.wave[which]=song.wave[which+1]; song.wave[which+1]=prev; + exchangeWave(which,which+1); moveAsset(song.waveDir,which,which+1); saveLock.unlock(); BUSY_END; @@ -4123,6 +4164,7 @@ bool DivEngine::moveSampleDown(int which) { saveLock.lock(); song.sample[which]=song.sample[which+1]; song.sample[which+1]=prev; + exchangeSample(which,which+1); moveAsset(song.sampleDir,which,which+1); saveLock.unlock(); renderSamples(); diff --git a/src/engine/engine.h b/src/engine/engine.h index 87ff7116e..0f13659b8 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -531,6 +531,9 @@ class DivEngine { void initSongWithDesc(const char* description, bool inBase64=true, bool oldVol=false); void exchangeIns(int one, int two); + void exchangeWave(int one, int two); + void exchangeSample(int one, int two); + void swapChannels(int src, int dest); void stompChannel(int ch); From 05d101e42e8c327bf83d51688a6c2d9527970e44 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 26 Jul 2023 18:48:26 -0500 Subject: [PATCH 06/87] fix unrecognized system ID error always being 0 --- src/engine/fileOps.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engine/fileOps.cpp b/src/engine/fileOps.cpp index 6e87a4431..de1074d6d 100644 --- a/src/engine/fileOps.cpp +++ b/src/engine/fileOps.cpp @@ -1937,8 +1937,8 @@ bool DivEngine::loadFur(unsigned char* file, size_t len) { ds.system[i]=systemFromFileFur(sysID); logD("- %d: %.2x (%s)",i,sysID,getSystemName(ds.system[i])); if (sysID!=0 && systemToFileFur(ds.system[i])==0) { - logE("unrecognized system ID %.2x",ds.system[i]); - lastError=fmt::sprintf("unrecognized system ID %.2x!",ds.system[i]); + logE("unrecognized system ID %.2x",sysID); + lastError=fmt::sprintf("unrecognized system ID %.2x!",sysID); delete[] file; return false; } From 677f7fe682fc163f5aa001ce4b1cee03455a3cd6 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 26 Jul 2023 19:16:57 -0500 Subject: [PATCH 07/87] ES5506: some cleanup and fix sample map... ugh issue #1282 --- src/engine/platform/es5506.cpp | 40 +++------------------------------- src/engine/sysDef.cpp | 1 - src/gui/insEdit.cpp | 1 + 3 files changed, 4 insertions(+), 38 deletions(-) diff --git a/src/engine/platform/es5506.cpp b/src/engine/platform/es5506.cpp index c44cdb0cf..4f8745bda 100644 --- a/src/engine/platform/es5506.cpp +++ b/src/engine/platform/es5506.cpp @@ -360,26 +360,6 @@ void DivPlatformES5506::tick(bool sysTick) { } } } - if (chan[i].pcm.isNoteMap) { - // note map macros - if (chan[i].std.wave.had) { - if (chan[i].std.wave.val>=0 && chan[i].std.wave.val<120) { - if (chan[i].pcm.next!=chan[i].std.wave.val) { - chan[i].pcm.next=chan[i].std.wave.val; - chan[i].pcmChanged.index=1; - } - } - } - } else if (!chan[i].pcm.isNoteMap) { - if (chan[i].std.wave.had) { - if (chan[i].std.wave.val>=0 && chan[i].std.wave.valsong.sampleLen) { - if (chan[i].pcm.next!=chan[i].std.wave.val) { - chan[i].pcm.next=chan[i].std.wave.val; - chan[i].pcmChanged.index=1; - } - } - } - } // update registers if (chan[i].volChanged.changed) { // calculate volume (16 bit) @@ -432,7 +412,7 @@ void DivPlatformES5506::tick(bool sysTick) { off=(double)center/8363.0; } if (ins->amiga.useNoteMap) { - chan[i].pcm.note=next; + //chan[i].pcm.note=next; } // get loop mode DivSampleLoopMode loopMode=s->isLoopable()?s->loopMode:DIV_SAMPLE_LOOP_MAX; @@ -748,13 +728,13 @@ int DivPlatformES5506::dispatch(DivCommand c) { if (((ins->amiga.useNoteMap) && (c.value>=0 && c.value<120)) || ((!ins->amiga.useNoteMap) && (ins->amiga.initSample>=0 && ins->amiga.initSamplesong.sampleLen))) { int sample=ins->amiga.getSample(c.value); - c.value=ins->amiga.getFreq(c.value); if (sample>=0 && samplesong.sampleLen) { sampleValid=true; chan[c.chan].volMacroMax=ins->type==DIV_INS_AMIGA?64:0xfff; chan[c.chan].panMacroMax=ins->type==DIV_INS_AMIGA?127:0xfff; - chan[c.chan].pcm.note=c.value; chan[c.chan].pcm.next=ins->amiga.useNoteMap?c.value:sample; + c.value=ins->amiga.getFreq(c.value); + chan[c.chan].pcm.note=c.value; chan[c.chan].filter=ins->es5506.filter; chan[c.chan].envelope=ins->es5506.envelope; } @@ -870,20 +850,6 @@ int DivPlatformES5506::dispatch(DivCommand c) { chan[c.chan].pitch=c.value; chan[c.chan].freqChanged=true; break; - // sample commands - case DIV_CMD_WAVE: - if (!chan[c.chan].useWave) { - if (chan[c.chan].active) { - DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_ES5506); - if (((ins->amiga.useNoteMap) && (c.value>=0 && c.value<120)) || - ((!ins->amiga.useNoteMap) && (c.value>=0 && c.valuesong.sampleLen))) { - chan[c.chan].pcm.next=c.value; - chan[c.chan].pcmChanged.index=1; - } - } - } - // reserved for useWave - break; // Filter commands case DIV_CMD_ES5506_FILTER_MODE: if (!chan[c.chan].active) { diff --git a/src/engine/sysDef.cpp b/src/engine/sysDef.cpp index e242f0a39..f999a2d6f 100644 --- a/src/engine/sysDef.cpp +++ b/src/engine/sysDef.cpp @@ -1542,7 +1542,6 @@ void DivEngine::registerSystems() { ); EffectHandlerMap es5506PreEffectHandlerMap={ - {0x10, {DIV_CMD_WAVE, "10xx: Change waveform (00 to FF)",effectVal}}, {0x11, {DIV_CMD_ES5506_FILTER_MODE, "11xx: Set filter mode (00 to 03)",effectValAnd<3>}}, {0x14, {DIV_CMD_ES5506_FILTER_K1, "14xx: Set filter coefficient K1 low byte (00 to FF)",effectValShift<0>,constVal<0x00ff>}}, {0x15, {DIV_CMD_ES5506_FILTER_K1, "15xx: Set filter coefficient K1 high byte (00 to FF)",effectValShift<8>,constVal<0xff00>}}, diff --git a/src/gui/insEdit.cpp b/src/gui/insEdit.cpp index e3997bf46..341f38a44 100644 --- a/src/gui/insEdit.cpp +++ b/src/gui/insEdit.cpp @@ -5563,6 +5563,7 @@ void FurnaceGUI::drawInsEdit() { if (ins->type==DIV_INS_MSM6295) waveMax=0; if (ins->type==DIV_INS_SEGAPCM) waveMax=0; if (ins->type==DIV_INS_K007232) waveMax=0; + if (ins->type==DIV_INS_ES5506) waveMax=0; if (ins->type==DIV_INS_GA20) waveMax=0; if (ins->type==DIV_INS_K053260) waveMax=0; if (ins->type==DIV_INS_POKEMINI) waveMax=0; From 1511b66015a66ccffa1972d776697b68a7eebb34 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 26 Jul 2023 19:33:49 -0500 Subject: [PATCH 08/87] MSM6258: fix missing type/outbits init --- src/engine/platform/msm6258.cpp | 3 +++ src/engine/platform/msm6258.h | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/engine/platform/msm6258.cpp b/src/engine/platform/msm6258.cpp index fbede0b59..e5de16456 100644 --- a/src/engine/platform/msm6258.cpp +++ b/src/engine/platform/msm6258.cpp @@ -386,6 +386,9 @@ int DivPlatformMSM6258::init(DivEngine* p, int channels, int sugRate, const DivC oscBuf[i]=new DivDispatchOscBuffer; } msm=new okim6258_device(4000000); + msm->set_start_div(okim6258_device::FOSC_DIV_BY_1024); + msm->set_type(okim6258_device::TYPE_4BITS); + msm->set_outbits(okim6258_device::OUTPUT_12BITS); msm->device_start(); setFlags(flags); reset(); diff --git a/src/engine/platform/msm6258.h b/src/engine/platform/msm6258.h index 2c18d90c4..6be120c2b 100644 --- a/src/engine/platform/msm6258.h +++ b/src/engine/platform/msm6258.h @@ -47,7 +47,6 @@ class DivPlatformMSM6258: public DivDispatch { }; FixedQueue writes; okim6258_device* msm; - unsigned char lastBusy; unsigned char sampleBank, msmPan, msmDivider, rateSel, msmClock, clockSel; signed char msmDividerCount, msmClockCount; From cdbba2a6fc307cd4c9e8ca4307aad93e5d698bd7 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 27 Jul 2023 00:33:28 -0500 Subject: [PATCH 09/87] IGFD: finally fix sorting crash --- extern/igfd/ImGuiFileDialog.cpp | 414 ++++++++++++++------------------ extern/igfd/ImGuiFileDialog.h | 24 +- 2 files changed, 192 insertions(+), 246 deletions(-) diff --git a/extern/igfd/ImGuiFileDialog.cpp b/extern/igfd/ImGuiFileDialog.cpp index 2ccc3e9c0..39815d4a4 100644 --- a/extern/igfd/ImGuiFileDialog.cpp +++ b/extern/igfd/ImGuiFileDialog.cpp @@ -800,138 +800,138 @@ namespace IGFD // will be called internally // will not been exposed to IGFD API - bool IGFD::FilterManager::prFillFileStyle(std::shared_ptr vFileInfos) const + bool IGFD::FilterManager::prFillFileStyle(FileInfos& vFileInfos) const { - if (vFileInfos.use_count() && !prFilesStyle.empty()) + if (!prFilesStyle.empty()) { for (const auto& _flag : prFilesStyle) { for (const auto& _file : _flag.second) { - if (_flag.first & IGFD_FileStyleByTypeDir && vFileInfos->fileType == 'd') + if (_flag.first & IGFD_FileStyleByTypeDir && vFileInfos.fileType == 'd') { if (_file.first.empty()) // for all dirs { - vFileInfos->fileStyle = _file.second; + vFileInfos.fileStyle = _file.second; } - else if (_file.first == vFileInfos->fileNameExt) // for dirs who are equal to style criteria + else if (_file.first == vFileInfos.fileNameExt) // for dirs who are equal to style criteria { - vFileInfos->fileStyle = _file.second; + vFileInfos.fileStyle = _file.second; } } - else if (_flag.first & IGFD_FileStyleByTypeFile && vFileInfos->fileType == 'f') + else if (_flag.first & IGFD_FileStyleByTypeFile && vFileInfos.fileType == 'f') { if (_file.first.empty()) // for all files { - vFileInfos->fileStyle = _file.second; + vFileInfos.fileStyle = _file.second; } - else if (_file.first == vFileInfos->fileNameExt) // for files who are equal to style criteria + else if (_file.first == vFileInfos.fileNameExt) // for files who are equal to style criteria { - vFileInfos->fileStyle = _file.second; + vFileInfos.fileStyle = _file.second; } } - else if (_flag.first & IGFD_FileStyleByTypeLink && vFileInfos->fileType == 'l') + else if (_flag.first & IGFD_FileStyleByTypeLink && vFileInfos.fileType == 'l') { if (_file.first.empty()) // for all links { - vFileInfos->fileStyle = _file.second; + vFileInfos.fileStyle = _file.second; } - else if (_file.first == vFileInfos->fileNameExt) // for links who are equal to style criteria + else if (_file.first == vFileInfos.fileNameExt) // for links who are equal to style criteria { - vFileInfos->fileStyle = _file.second; + vFileInfos.fileStyle = _file.second; } } if (_flag.first & IGFD_FileStyleByExtention) { - if (_file.first == vFileInfos->fileExt) + if (_file.first == vFileInfos.fileExt) { - vFileInfos->fileStyle = _file.second; + vFileInfos.fileStyle = _file.second; } // can make sense for some dirs like the hidden by ex ".git" - if (_flag.first & IGFD_FileStyleByTypeDir && vFileInfos->fileType == 'd') + if (_flag.first & IGFD_FileStyleByTypeDir && vFileInfos.fileType == 'd') { - if (_file.first == vFileInfos->fileExt) + if (_file.first == vFileInfos.fileExt) { - vFileInfos->fileStyle = _file.second; + vFileInfos.fileStyle = _file.second; } } - else if (_flag.first & IGFD_FileStyleByTypeFile && vFileInfos->fileType == 'f') + else if (_flag.first & IGFD_FileStyleByTypeFile && vFileInfos.fileType == 'f') { - if (_file.first == vFileInfos->fileExt) + if (_file.first == vFileInfos.fileExt) { - vFileInfos->fileStyle = _file.second; + vFileInfos.fileStyle = _file.second; } } - else if (_flag.first & IGFD_FileStyleByTypeLink && vFileInfos->fileType == 'l') + else if (_flag.first & IGFD_FileStyleByTypeLink && vFileInfos.fileType == 'l') { - if (_file.first == vFileInfos->fileExt) + if (_file.first == vFileInfos.fileExt) { - vFileInfos->fileStyle = _file.second; + vFileInfos.fileStyle = _file.second; } } } if (_flag.first & IGFD_FileStyleByFullName) { - if (_file.first == vFileInfos->fileNameExt) + if (_file.first == vFileInfos.fileNameExt) { - vFileInfos->fileStyle = _file.second; + vFileInfos.fileStyle = _file.second; } - if (_flag.first & IGFD_FileStyleByTypeDir && vFileInfos->fileType == 'd') + if (_flag.first & IGFD_FileStyleByTypeDir && vFileInfos.fileType == 'd') { - if (_file.first == vFileInfos->fileNameExt) + if (_file.first == vFileInfos.fileNameExt) { - vFileInfos->fileStyle = _file.second; + vFileInfos.fileStyle = _file.second; } } - else if (_flag.first & IGFD_FileStyleByTypeFile && vFileInfos->fileType == 'f') + else if (_flag.first & IGFD_FileStyleByTypeFile && vFileInfos.fileType == 'f') { - if (_file.first == vFileInfos->fileNameExt) + if (_file.first == vFileInfos.fileNameExt) { - vFileInfos->fileStyle = _file.second; + vFileInfos.fileStyle = _file.second; } } - else if (_flag.first & IGFD_FileStyleByTypeLink && vFileInfos->fileType == 'l') + else if (_flag.first & IGFD_FileStyleByTypeLink && vFileInfos.fileType == 'l') { - if (_file.first == vFileInfos->fileNameExt) + if (_file.first == vFileInfos.fileNameExt) { - vFileInfos->fileStyle = _file.second; + vFileInfos.fileStyle = _file.second; } } } if (_flag.first & IGFD_FileStyleByContainedInFullName) { - if (vFileInfos->fileNameExt.find(_file.first) != std::string::npos) + if (vFileInfos.fileNameExt.find(_file.first) != std::string::npos) { - vFileInfos->fileStyle = _file.second; + vFileInfos.fileStyle = _file.second; } - if (_flag.first & IGFD_FileStyleByTypeDir && vFileInfos->fileType == 'd') + if (_flag.first & IGFD_FileStyleByTypeDir && vFileInfos.fileType == 'd') { - if (vFileInfos->fileNameExt.find(_file.first) != std::string::npos) + if (vFileInfos.fileNameExt.find(_file.first) != std::string::npos) { - vFileInfos->fileStyle = _file.second; + vFileInfos.fileStyle = _file.second; } } - else if (_flag.first & IGFD_FileStyleByTypeFile && vFileInfos->fileType == 'f') + else if (_flag.first & IGFD_FileStyleByTypeFile && vFileInfos.fileType == 'f') { - if (vFileInfos->fileNameExt.find(_file.first) != std::string::npos) + if (vFileInfos.fileNameExt.find(_file.first) != std::string::npos) { - vFileInfos->fileStyle = _file.second; + vFileInfos.fileStyle = _file.second; } } - else if (_flag.first & IGFD_FileStyleByTypeLink && vFileInfos->fileType == 'l') + else if (_flag.first & IGFD_FileStyleByTypeLink && vFileInfos.fileType == 'l') { - if (vFileInfos->fileNameExt.find(_file.first) != std::string::npos) + if (vFileInfos.fileNameExt.find(_file.first) != std::string::npos) { - vFileInfos->fileStyle = _file.second; + vFileInfos.fileStyle = _file.second; } } } - if (vFileInfos->fileStyle.use_count()) + if (vFileInfos.fileStyle.use_count()) return true; } } @@ -1142,6 +1142,7 @@ namespace IGFD for (int i=1; i<4; i++) { puSortingDirection[i]=false; } + invalidFile.isValid=false; } void IGFD::FileManager::OpenCurrentPath(const FileDialogInternal& vFileDialogInternal) @@ -1191,29 +1192,24 @@ namespace IGFD puHeaderFileName = tableHeaderDescendingIcon + puHeaderFileName; #endif // USE_CUSTOM_SORTING_ICON std::sort(prFileList.begin(), prFileList.end(), - [](const std::shared_ptr& a, const std::shared_ptr& b) -> bool + [](const FileInfos& a, const FileInfos& b) -> bool { - if (a==NULL || b==NULL) - return false; - if (!a.use_count() || !b.use_count()) - return false; - // this code fail in c:\\Users with the link "All users". got a invalid comparator /* // use code from https://github.com/jackm97/ImGuiFileDialog/commit/bf40515f5a1de3043e60562dc1a494ee7ecd3571 // strict ordering for file/directory types beginning in '.' // common on Linux platforms - if (a->fileNameExt[0] == '.' && b->fileNameExt[0] != '.') + if (a.fileNameExt[0] == '.' && b.fileNameExt[0] != '.') return false; - if (a->fileNameExt[0] != '.' && b->fileNameExt[0] == '.') + if (a.fileNameExt[0] != '.' && b.fileNameExt[0] == '.') return true; - if (a->fileNameExt[0] == '.' && b->fileNameExt[0] == '.') + if (a.fileNameExt[0] == '.' && b.fileNameExt[0] == '.') { - return (stricmp(a->fileNameExt.c_str(), b->fileNameExt.c_str()) < 0); // sort in insensitive case + return (stricmp(a.fileNameExt.c_str(), b.fileNameExt.c_str()) < 0); // sort in insensitive case } */ - if (a->fileType != b->fileType) return (a->fileType == 'd'); // directory in first - return (stricmp(a->fileNameExt.c_str(), b->fileNameExt.c_str()) < 0); // sort in insensitive case + if (a.fileType != b.fileType) return (a.fileType == 'd'); // directory in first + return (stricmp(a.fileNameExt.c_str(), b.fileNameExt.c_str()) < 0); // sort in insensitive case }); } else @@ -1222,28 +1218,23 @@ namespace IGFD puHeaderFileName = tableHeaderAscendingIcon + puHeaderFileName; #endif // USE_CUSTOM_SORTING_ICON std::sort(prFileList.begin(), prFileList.end(), - [](const std::shared_ptr& a, const std::shared_ptr& b) -> bool + [](const FileInfos& a, const FileInfos& b) -> bool { - if (a==NULL || b==NULL) - return false; - if (!a.use_count() || !b.use_count()) - return false; - // this code fail in c:\\Users with the link "All users". got a invalid comparator /* // use code from https://github.com/jackm97/ImGuiFileDialog/commit/bf40515f5a1de3043e60562dc1a494ee7ecd3571 // strict ordering for file/directory types beginning in '.' // common on Linux platforms - if (a->fileNameExt[0] == '.' && b->fileNameExt[0] != '.') + if (a.fileNameExt[0] == '.' && b.fileNameExt[0] != '.') return false; - if (a->fileNameExt[0] != '.' && b->fileNameExt[0] == '.') + if (a.fileNameExt[0] != '.' && b.fileNameExt[0] == '.') return true; - if (a->fileNameExt[0] == '.' && b->fileNameExt[0] == '.') + if (a.fileNameExt[0] == '.' && b.fileNameExt[0] == '.') { - return (stricmp(a->fileNameExt.c_str(), b->fileNameExt.c_str()) > 0); // sort in insensitive case + return (stricmp(a.fileNameExt.c_str(), b.fileNameExt.c_str()) > 0); // sort in insensitive case } */ - return (stricmp(a->fileNameExt.c_str(), b->fileNameExt.c_str()) > 0); // sort in insensitive case + return (stricmp(a.fileNameExt.c_str(), b.fileNameExt.c_str()) > 0); // sort in insensitive case }); } } @@ -1259,13 +1250,10 @@ namespace IGFD puHeaderFileType = tableHeaderDescendingIcon + puHeaderFileType; #endif // USE_CUSTOM_SORTING_ICON std::sort(prFileList.begin(), prFileList.end(), - [](const std::shared_ptr& a, const std::shared_ptr& b) -> bool + [](const FileInfos& a, const FileInfos& b) -> bool { - if (!a.use_count() || !b.use_count()) - return false; - - if (a->fileType != b->fileType) return (a->fileType == 'd'); // directory in first - return (a->fileExt < b->fileExt); // else + if (a.fileType != b.fileType) return (a.fileType == 'd'); // directory in first + return (a.fileExt < b.fileExt); // else }); } else @@ -1274,15 +1262,10 @@ namespace IGFD puHeaderFileType = tableHeaderAscendingIcon + puHeaderFileType; #endif // USE_CUSTOM_SORTING_ICON std::sort(prFileList.begin(), prFileList.end(), - [](const std::shared_ptr& a, const std::shared_ptr& b) -> bool + [](const FileInfos& a, const FileInfos& b) -> bool { - if (a==NULL || b==NULL) - return false; - if (!a.use_count() || !b.use_count()) - return false; - - if (a->fileType != b->fileType) return (a->fileType != 'd'); // directory in last - return (a->fileExt > b->fileExt); // else + if (a.fileType != b.fileType) return (a.fileType != 'd'); // directory in last + return (a.fileExt > b.fileExt); // else }); } } @@ -1298,15 +1281,10 @@ namespace IGFD puHeaderFileSize = tableHeaderDescendingIcon + puHeaderFileSize; #endif // USE_CUSTOM_SORTING_ICON std::sort(prFileList.begin(), prFileList.end(), - [](const std::shared_ptr& a, const std::shared_ptr& b) -> bool + [](const FileInfos& a, const FileInfos& b) -> bool { - if (a==NULL || b==NULL) - return false; - if (!a.use_count() || !b.use_count()) - return false; - - if (a->fileType != b->fileType) return (a->fileType == 'd'); // directory in first - return (a->fileSize < b->fileSize); // else + if (a.fileType != b.fileType) return (a.fileType == 'd'); // directory in first + return (a.fileSize < b.fileSize); // else }); } else @@ -1315,15 +1293,10 @@ namespace IGFD puHeaderFileSize = tableHeaderAscendingIcon + puHeaderFileSize; #endif // USE_CUSTOM_SORTING_ICON std::sort(prFileList.begin(), prFileList.end(), - [](const std::shared_ptr& a, const std::shared_ptr& b) -> bool + [](const FileInfos& a, const FileInfos& b) -> bool { - if (a==NULL || b==NULL) - return false; - if (!a.use_count() || !b.use_count()) - return false; - - if (a->fileType != b->fileType) return (a->fileType != 'd'); // directory in last - return (a->fileSize > b->fileSize); // else + if (a.fileType != b.fileType) return (a.fileType != 'd'); // directory in last + return (a.fileSize > b.fileSize); // else }); } } @@ -1339,15 +1312,10 @@ namespace IGFD puHeaderFileDate = tableHeaderDescendingIcon + puHeaderFileDate; #endif // USE_CUSTOM_SORTING_ICON std::sort(prFileList.begin(), prFileList.end(), - [](const std::shared_ptr& a, const std::shared_ptr& b) -> bool + [](const FileInfos& a, const FileInfos& b) -> bool { - if (a==NULL || b==NULL) - return false; - if (!a.use_count() || !b.use_count()) - return false; - - if (a->fileType != b->fileType) return (a->fileType == 'd'); // directory in first - return (a->fileModifDate < b->fileModifDate); // else + if (a.fileType != b.fileType) return (a.fileType == 'd'); // directory in first + return (a.fileModifDate < b.fileModifDate); // else }); } else @@ -1356,15 +1324,10 @@ namespace IGFD puHeaderFileDate = tableHeaderAscendingIcon + puHeaderFileDate; #endif // USE_CUSTOM_SORTING_ICON std::sort(prFileList.begin(), prFileList.end(), - [](const std::shared_ptr& a, const std::shared_ptr& b) -> bool + [](const FileInfos& a, const FileInfos& b) -> bool { - if (a==NULL || b==NULL) - return false; - if (!a.use_count() || !b.use_count()) - return false; - - if (a->fileType != b->fileType) return (a->fileType != 'd'); // directory in last - return (a->fileModifDate > b->fileModifDate); // else + if (a.fileType != b.fileType) return (a.fileType != 'd'); // directory in last + return (a.fileModifDate > b.fileModifDate); // else }); } } @@ -1384,15 +1347,12 @@ namespace IGFD puHeaderFileThumbnails = tableHeaderDescendingIcon + puHeaderFileThumbnails; #endif // USE_CUSTOM_SORTING_ICON std::sort(prFileList.begin(), prFileList.end(), - [](const std::shared_ptr& a, const std::shared_ptr& b) -> bool + [](const FileInfos& a, const FileInfos& b) -> bool { - if (!a.use_count() || !b.use_count()) - return false; - - if (a->fileType != b->fileType) return (a->fileType == 'd'); // directory in first - if (a->thumbnailInfo.textureWidth == b->thumbnailInfo.textureWidth) - return (a->thumbnailInfo.textureHeight < b->thumbnailInfo.textureHeight); - return (a->thumbnailInfo.textureWidth < b->thumbnailInfo.textureWidth); + if (a.fileType != b.fileType) return (a.fileType == 'd'); // directory in first + if (a.thumbnailInfo.textureWidth == b.thumbnailInfo.textureWidth) + return (a.thumbnailInfo.textureHeight < b.thumbnailInfo.textureHeight); + return (a.thumbnailInfo.textureWidth < b.thumbnailInfo.textureWidth); }); } @@ -1402,15 +1362,12 @@ namespace IGFD puHeaderFileThumbnails = tableHeaderAscendingIcon + puHeaderFileThumbnails; #endif // USE_CUSTOM_SORTING_ICON std::sort(prFileList.begin(), prFileList.end(), - [](const std::shared_ptr& a, const std::shared_ptr& b) -> bool + [](const FileInfos& a, const FileInfos& b) -> bool { - if (!a.use_count() || !b.use_count()) - return false; - - if (a->fileType != b->fileType) return (a->fileType != 'd'); // directory in last - if (a->thumbnailInfo.textureWidth == b->thumbnailInfo.textureWidth) - return (a->thumbnailInfo.textureHeight > b->thumbnailInfo.textureHeight); - return (a->thumbnailInfo.textureWidth > b->thumbnailInfo.textureWidth); + if (a.fileType != b.fileType) return (a.fileType != 'd'); // directory in last + if (a.thumbnailInfo.textureWidth == b.thumbnailInfo.textureWidth) + return (a.thumbnailInfo.textureHeight > b.thumbnailInfo.textureHeight); + return (a.thumbnailInfo.textureWidth > b.thumbnailInfo.textureWidth); }); } } @@ -1441,38 +1398,38 @@ namespace IGFD return fileNameExt; } - void IGFD::FileManager::AddFile(const FileDialogInternal& vFileDialogInternal, const std::string& vPath, const std::string& vFileName, const char& vFileType, void* ent) + void IGFD::FileManager::AddFile(const FileDialogInternal& vFileDialogInternal, const std::string& vPath, const std::string& vFileName, char vFileType, void* ent) { - auto infos = std::make_shared(); + FileInfos infos; #ifdef _WIN32 struct dirent* dent=(struct dirent*)ent; #endif - infos->filePath = vPath; - infos->fileNameExt = vFileName; - infos->fileNameExt_optimized = prOptimizeFilenameForSearchOperations(infos->fileNameExt); - infos->fileType = vFileType; + infos.filePath = vPath; + infos.fileNameExt = vFileName; + infos.fileNameExt_optimized = prOptimizeFilenameForSearchOperations(infos.fileNameExt); + infos.fileType = vFileType; - if (infos->fileNameExt.empty() || ((infos->fileNameExt == "." || infos->fileNameExt == "..") && !vFileDialogInternal.puFilterManager.puDLGFilters.empty())) return; // filename empty or filename is the current dir '.' //-V807 - if (infos->fileNameExt != ".." && (vFileDialogInternal.puDLGflags & ImGuiFileDialogFlags_DontShowHiddenFiles) && infos->fileNameExt[0] == '.') // dont show hidden files - if (!vFileDialogInternal.puFilterManager.puDLGFilters.empty() || (vFileDialogInternal.puFilterManager.puDLGFilters.empty() && infos->fileNameExt != ".")) // except "." if in directory mode //-V728 + if (infos.fileNameExt.empty() || ((infos.fileNameExt == "." || infos.fileNameExt == "..") && !vFileDialogInternal.puFilterManager.puDLGFilters.empty())) return; // filename empty or filename is the current dir '.' //-V807 + if (infos.fileNameExt != ".." && (vFileDialogInternal.puDLGflags & ImGuiFileDialogFlags_DontShowHiddenFiles) && infos.fileNameExt[0] == '.') // dont show hidden files + if (!vFileDialogInternal.puFilterManager.puDLGFilters.empty() || (vFileDialogInternal.puFilterManager.puDLGFilters.empty() && infos.fileNameExt != ".")) // except "." if in directory mode //-V728 return; - if (infos->fileType == 'f' || - infos->fileType == 'l') // link can have the same extention of a file + if (infos.fileType == 'f' || + infos.fileType == 'l') // link can have the same extention of a file { - size_t lpt = infos->fileNameExt.find_last_of('.'); + size_t lpt = infos.fileNameExt.find_last_of('.'); if (lpt != std::string::npos) { - infos->fileExt = infos->fileNameExt.substr(lpt); + infos.fileExt = infos.fileNameExt.substr(lpt); } - for (char& i: infos->fileExt) { + for (char& i: infos.fileExt) { if (i>='A' && i<='Z') i+='a'-'A'; } - if (!vFileDialogInternal.puFilterManager.IsCoveredByFilters(infos->fileExt)) + if (!vFileDialogInternal.puFilterManager.IsCoveredByFilters(infos.fileExt)) { return; } @@ -1483,16 +1440,16 @@ namespace IGFD SYSTEMTIME localTime; char timebuf[100]; - infos->fileSize=dent->dwin_size; - if (FileTimeToSystemTime(&dent->dwin_mtime,&systemTime)==TRUE) { + infos.fileSize=dent.dwin_size; + if (FileTimeToSystemTime(&dent.dwin_mtime,&systemTime)==TRUE) { if (SystemTimeToTzSpecificLocalTime(NULL,&systemTime,&localTime)==TRUE) { snprintf(timebuf,99,"%d/%.2d/%.2d %.2d:%.2d",localTime.wYear,localTime.wMonth,localTime.wDay,localTime.wHour,localTime.wMinute); } else { snprintf(timebuf,99,"%d/%.2d/%.2d %.2d:%.2d",systemTime.wYear,systemTime.wMonth,systemTime.wDay,systemTime.wHour,systemTime.wMinute); } - infos->fileModifDate=timebuf; + infos.fileModifDate=timebuf; } else { - infos->fileModifDate="???"; + infos.fileModifDate="???"; } #endif @@ -1534,7 +1491,7 @@ namespace IGFD { struct dirent* ent = files[i]; std::string where = path + std::string(PATH_SEP_STR) + std::string(ent->d_name); - char fileType = 0; + char fileType = 'f'; #if defined(HAVE_DIRENT_TYPE) || defined(_WIN32) if (ent->d_type != DT_UNKNOWN) { @@ -1544,7 +1501,7 @@ namespace IGFD fileType = 'f'; break; case DT_DIR: fileType = 'd'; break; - case DT_LNK: + case DT_LNK: { #ifdef _WIN32 fileType = 'f'; #else @@ -1557,7 +1514,8 @@ namespace IGFD } else { - fileType = 'l'; + // why does 'l' make it crash? + fileType = 'f'; } } else @@ -1568,6 +1526,9 @@ namespace IGFD #endif break; } + default: + fileType = 'f'; break; + } } else #endif // HAVE_DIRENT_TYPE @@ -1622,12 +1583,12 @@ namespace IGFD ClearFileLists(); for (auto& drive : drives) { - auto info = std::make_shared(); - info->fileNameExt = drive; - info->fileNameExt_optimized = prOptimizeFilenameForSearchOperations(drive); - info->fileType = 'd'; + FileInfos info; + info.fileNameExt = drive; + info.fileNameExt_optimized = prOptimizeFilenameForSearchOperations(drive); + info.fileType = 'd'; - if (!info->fileNameExt.empty()) + if (!info.fileNameExt.empty()) { prFileList.push_back(info); } @@ -1658,11 +1619,11 @@ namespace IGFD return prFileList.size(); } - std::shared_ptr IGFD::FileManager::GetFullFileAt(size_t vIdx) + const FileInfos& IGFD::FileManager::GetFullFileAt(size_t vIdx) { if (vIdx < prFileList.size()) return prFileList[vIdx]; - return nullptr; + return invalidFile; } bool IGFD::FileManager::IsFilteredListEmpty() @@ -1675,11 +1636,11 @@ namespace IGFD return prFilteredFileList.size(); } - std::shared_ptr IGFD::FileManager::GetFilteredFileAt(size_t vIdx) + const FileInfos& IGFD::FileManager::GetFilteredFileAt(size_t vIdx) { if (vIdx < prFilteredFileList.size()) return prFilteredFileList[vIdx]; - return nullptr; + return invalidFile; } bool IGFD::FileManager::IsFileNameSelected(const std::string& vFileName) @@ -1706,14 +1667,12 @@ namespace IGFD void IGFD::FileManager::ApplyFilteringOnFileList(const FileDialogInternal& vFileDialogInternal) { prFilteredFileList.clear(); - for (const auto& file : prFileList) + for (const FileInfos& file : prFileList) { - if (!file.use_count()) - continue; bool show = true; - if (!file->IsTagFound(vFileDialogInternal.puSearchManager.puSearchTag)) // if search tag + if (!file.IsTagFound(vFileDialogInternal.puSearchManager.puSearchTag)) // if search tag show = false; - if (puDLGDirectoryMode && file->fileType != 'd') // directory mode + if (puDLGDirectoryMode && file.fileType != 'd') // directory mode show = false; if (show) prFilteredFileList.push_back(file); @@ -1750,13 +1709,10 @@ namespace IGFD return ""; } - void IGFD::FileManager::prCompleteFileInfos(const std::shared_ptr& vInfos) + void IGFD::FileManager::prCompleteFileInfos(FileInfos& vInfos) { - if (!vInfos.use_count()) - return; - - if (vInfos->fileNameExt != "." && - vInfos->fileNameExt != "..") + if (vInfos.fileNameExt != "." && + vInfos.fileNameExt != "..") { // _stat struct : //dev_t st_dev; /* ID of device containing file */ @@ -1781,18 +1737,18 @@ namespace IGFD #else std::string fpn; - if (vInfos->fileType == 'f' || vInfos->fileType == 'l' || vInfos->fileType == 'd') // file - fpn = vInfos->filePath + std::string(1u, PATH_SEP) + vInfos->fileNameExt; + if (vInfos.fileType == 'f' || vInfos.fileType == 'l' || vInfos.fileType == 'd') // file + fpn = vInfos.filePath + std::string(1u, PATH_SEP) + vInfos.fileNameExt; struct stat statInfos = {}; char timebuf[100]; int result = stat(fpn.c_str(), &statInfos); if (result!=-1) { - if (vInfos->fileType != 'd') + if (vInfos.fileType != 'd') { - vInfos->fileSize = (size_t)statInfos.st_size; - vInfos->formatedFileSize = prFormatFileSize(vInfos->fileSize); + vInfos.fileSize = (size_t)statInfos.st_size; + vInfos.formatedFileSize = prFormatFileSize(vInfos.fileSize); } size_t len = 0; @@ -1806,12 +1762,12 @@ namespace IGFD #endif // MSVC if (len) { - vInfos->fileModifDate = std::string(timebuf, len); + vInfos.fileModifDate = std::string(timebuf, len); } } else { - vInfos->fileSize=0; - vInfos->formatedFileSize = prFormatFileSize(vInfos->fileSize); - vInfos->fileModifDate="???"; + vInfos.fileSize=0; + vInfos.formatedFileSize = prFormatFileSize(vInfos.fileSize); + vInfos.fileModifDate="???"; } #endif } @@ -1994,14 +1950,11 @@ namespace IGFD IGFD::Utils::SetBuffer(puFileNameBuffer, MAX_FILE_DIALOG_NAME_BUFFER, vFileName); } - bool IGFD::FileManager::SelectDirectory(const std::shared_ptr& vInfos) + bool IGFD::FileManager::SelectDirectory(const FileInfos& vInfos) { - if (!vInfos.use_count()) - return false; - bool pathClick = false; - if (vInfos->fileNameExt == "..") + if (vInfos.fileNameExt == "..") { pathClick = SetPathOnParentDirectoryIfAny(); } @@ -2011,23 +1964,23 @@ namespace IGFD if (puShowDrives) { - newPath = vInfos->fileNameExt + std::string(1u, PATH_SEP); + newPath = vInfos.fileNameExt + std::string(1u, PATH_SEP); } else { #ifdef __linux__ if (puFsRoot == prCurrentPath) - newPath = prCurrentPath + vInfos->fileNameExt; + newPath = prCurrentPath + vInfos.fileNameExt; else #endif // __linux__ - newPath = prCurrentPath + std::string(1u, PATH_SEP) + vInfos->fileNameExt; + newPath = prCurrentPath + std::string(1u, PATH_SEP) + vInfos.fileNameExt; } if (IGFD::Utils::IsDirectoryExist(newPath)) { if (puShowDrives) { - prCurrentPath = vInfos->fileNameExt; + prCurrentPath = vInfos.fileNameExt; puFsRoot = prCurrentPath; } else @@ -2041,35 +1994,32 @@ namespace IGFD return pathClick; } - void IGFD::FileManager::SelectFileName(const FileDialogInternal& vFileDialogInternal, const std::shared_ptr& vInfos) + void IGFD::FileManager::SelectFileName(const FileDialogInternal& vFileDialogInternal, const FileInfos& vInfos) { - if (!vInfos.use_count()) - return; - if (ImGui::GetIO().KeyCtrl) { if (puDLGcountSelectionMax == 0) // infinite selection { - if (prSelectedFileNames.find(vInfos->fileNameExt) == prSelectedFileNames.end()) // not found +> add + if (prSelectedFileNames.find(vInfos.fileNameExt) == prSelectedFileNames.end()) // not found +> add { - prAddFileNameInSelection(vInfos->fileNameExt, true); + prAddFileNameInSelection(vInfos.fileNameExt, true); } else // found +> remove { - prRemoveFileNameInSelection(vInfos->fileNameExt); + prRemoveFileNameInSelection(vInfos.fileNameExt); } } else // selection limited by size { if (prSelectedFileNames.size() < puDLGcountSelectionMax) { - if (prSelectedFileNames.find(vInfos->fileNameExt) == prSelectedFileNames.end()) // not found +> add + if (prSelectedFileNames.find(vInfos.fileNameExt) == prSelectedFileNames.end()) // not found +> add { - prAddFileNameInSelection(vInfos->fileNameExt, true); + prAddFileNameInSelection(vInfos.fileNameExt, true); } else // found +> remove { - prRemoveFileNameInSelection(vInfos->fileNameExt); + prRemoveFileNameInSelection(vInfos.fileNameExt); } } } @@ -2081,18 +2031,15 @@ namespace IGFD prSelectedFileNames.clear(); // we will iterate filelist and get the last selection after the start selection bool startMultiSelection = false; - std::string fileNameToSelect = vInfos->fileNameExt; + std::string fileNameToSelect = vInfos.fileNameExt; std::string savedLastSelectedFileName; // for invert selection mode - for (const auto& file : prFileList) + for (const FileInfos& file : prFileList) { - if (!file.use_count()) - continue; - bool canTake = true; - if (!file->IsTagFound(vFileDialogInternal.puSearchManager.puSearchTag)) canTake = false; + if (!file.IsTagFound(vFileDialogInternal.puSearchManager.puSearchTag)) canTake = false; if (canTake) // if not filtered, we will take files who are filtered by the dialog { - if (file->fileNameExt == prLastSelectedFileName) + if (file.fileNameExt == prLastSelectedFileName) { startMultiSelection = true; prAddFileNameInSelection(prLastSelectedFileName, false); @@ -2101,13 +2048,13 @@ namespace IGFD { if (puDLGcountSelectionMax == 0) // infinite selection { - prAddFileNameInSelection(file->fileNameExt, false); + prAddFileNameInSelection(file.fileNameExt, false); } else // selection limited by size { if (prSelectedFileNames.size() < puDLGcountSelectionMax) { - prAddFileNameInSelection(file->fileNameExt, false); + prAddFileNameInSelection(file.fileNameExt, false); } else { @@ -2119,7 +2066,7 @@ namespace IGFD } } - if (file->fileNameExt == fileNameToSelect) + if (file.fileNameExt == fileNameToSelect) { if (!startMultiSelection) // we are before the last Selected FileName, so we must inverse { @@ -2145,7 +2092,7 @@ namespace IGFD { prSelectedFileNames.clear(); IGFD::Utils::ResetBuffer(puFileNameBuffer); - prAddFileNameInSelection(vInfos->fileNameExt, true); + prAddFileNameInSelection(vInfos.fileNameExt, true); } } @@ -3922,11 +3869,8 @@ namespace IGFD } // returns 0 if not break loop, 1 if break loop, 2 if exit dialog - int IGFD::FileDialog::prSelectableItem(int vidx, std::shared_ptr vInfos, bool vSelected, const char* vFmt, ...) + int IGFD::FileDialog::prSelectableItem(int vidx, const FileInfos& vInfos, bool vSelected, const char* vFmt, ...) { - if (!vInfos.use_count()) - return 0; - auto& fdi = prFileDialogInternal.puFileManager; static ImGuiSelectableFlags selectableFlags = ImGuiSelectableFlags_AllowDoubleClick | @@ -3957,7 +3901,7 @@ namespace IGFD #endif // USE_EXPLORATION_BY_KEYS if (res) { - if (vInfos->fileType == 'd') + if (vInfos.fileType == 'd') { bool isSelectingDir=false; // nav system, selectebale cause open directory or select directory @@ -4012,27 +3956,27 @@ namespace IGFD return 0; } - void IGFD::FileDialog::prBeginFileColorIconStyle(std::shared_ptr vFileInfos, bool& vOutShowColor, std::string& vOutStr, ImFont** vOutFont) + void IGFD::FileDialog::prBeginFileColorIconStyle(const FileInfos& vFileInfos, bool& vOutShowColor, std::string& vOutStr, ImFont** vOutFont) { vOutStr.clear(); vOutShowColor = false; - if (vFileInfos->fileStyle.use_count()) //-V807 //-V522 + if (vFileInfos.fileStyle.use_count()) //-V807 //-V522 { vOutShowColor = true; - *vOutFont = vFileInfos->fileStyle->font; + *vOutFont = vFileInfos.fileStyle->font; } - if (vOutShowColor && !vFileInfos->fileStyle->icon.empty()) vOutStr = vFileInfos->fileStyle->icon; - else if (vFileInfos->fileType == 'd') vOutStr = dirEntryString; - else if (vFileInfos->fileType == 'l') vOutStr = linkEntryString; - else if (vFileInfos->fileType == 'f') vOutStr = fileEntryString; + if (vOutShowColor && !vFileInfos.fileStyle->icon.empty()) vOutStr = vFileInfos.fileStyle->icon; + else if (vFileInfos.fileType == 'd') vOutStr = dirEntryString; + else if (vFileInfos.fileType == 'l') vOutStr = linkEntryString; + else if (vFileInfos.fileType == 'f') vOutStr = fileEntryString; - vOutStr += " " + vFileInfos->fileNameExt; + vOutStr += " " + vFileInfos.fileNameExt; if (vOutShowColor) - ImGui::PushStyleColor(ImGuiCol_Text, vFileInfos->fileStyle->color); + ImGui::PushStyleColor(ImGuiCol_Text, vFileInfos.fileStyle->color); if (*vOutFont) ImGui::PushFont(*vOutFont); } @@ -4126,13 +4070,13 @@ namespace IGFD { if (i < 0) continue; - auto infos = fdi.GetFilteredFileAt((size_t)i); - if (!infos.use_count()) + const FileInfos& infos = fdi.GetFilteredFileAt((size_t)i); + if (!infos.isValid) continue; prBeginFileColorIconStyle(infos, _showColor, _str, &_font); - bool selected = fdi.IsFileNameSelected(infos->fileNameExt); // found + bool selected = fdi.IsFileNameSelected(infos.fileNameExt); // found ImGui::TableNextRow(); @@ -4147,13 +4091,13 @@ namespace IGFD } if (ImGui::TableNextColumn()) // file type { - ImGui::Text("%s", infos->fileExt.c_str()); + ImGui::Text("%s", infos.fileExt.c_str()); } if (ImGui::TableNextColumn()) // file size { - if (infos->fileType != 'd') + if (infos.fileType != 'd') { - ImGui::Text("%s ", infos->formatedFileSize.c_str()); + ImGui::Text("%s ", infos.formatedFileSize.c_str()); } else { @@ -4162,7 +4106,7 @@ namespace IGFD } if (ImGui::TableNextColumn()) // file date + time { - ImGui::Text("%s", infos->fileModifDate.c_str()); + ImGui::Text("%s", infos.fileModifDate.c_str()); } prEndFileColorIconStyle(_showColor, _font); diff --git a/extern/igfd/ImGuiFileDialog.h b/extern/igfd/ImGuiFileDialog.h index 93db26e9d..0850cd680 100644 --- a/extern/igfd/ImGuiFileDialog.h +++ b/extern/igfd/ImGuiFileDialog.h @@ -766,7 +766,7 @@ namespace IGFD void ParseFilters(const char* vFilters); // Parse filter syntax, detect and parse filter collection void SetSelectedFilterWithExt(const std::string& vFilter); // Select filter - bool prFillFileStyle(std::shared_ptr vFileInfos) const; // fill with the good style + bool prFillFileStyle(FileInfos& vFileInfos) const; // fill with the good style void SetFileStyle( const IGFD_FileStyleFlags& vFlags, @@ -812,6 +812,7 @@ namespace IGFD #ifdef USE_THUMBNAILS IGFD_Thumbnail_Info thumbnailInfo; // structre for the display for image file tetxure #endif // USE_THUMBNAILS + bool isValid = true; public: bool IsTagFound(const std::string& vTag) const; @@ -824,6 +825,7 @@ namespace IGFD class FileManager { public: // types + FileInfos invalidFile; enum class SortingFieldEnum // sorting for filetering of the file lsit { FIELD_NONE = 0, // no sorting preference, result indetermined haha.. @@ -839,8 +841,8 @@ namespace IGFD private: std::string prCurrentPath; // current path (to be decomposed in prCurrentPathDecomposition std::vector prCurrentPathDecomposition; // part words - std::vector> prFileList; // base container - std::vector> prFilteredFileList; // filtered container (search, sorting, etc..) + std::vector prFileList; // base container + std::vector prFilteredFileList; // filtered container (search, sorting, etc..) std::string prLastSelectedFileName; // for shift multi selection std::set prSelectedFileNames; // the user selection of FilePathNames bool prCreateDirectoryMode = false; // for create directory widget @@ -879,11 +881,11 @@ namespace IGFD static std::string prRoundNumber(double vvalue, int n); // custom rounding number static std::string prFormatFileSize(size_t vByteSize); // format file size field static std::string prOptimizeFilenameForSearchOperations(const std::string& vFileNameExt); // turn all text in lower case for search facilitie - static void prCompleteFileInfos(const std::shared_ptr& FileInfos); // set time and date infos of a file (detail view mode) + static void prCompleteFileInfos(FileInfos& FileInfos); // set time and date infos of a file (detail view mode) void prRemoveFileNameInSelection(const std::string& vFileName); // selection : remove a file name void prAddFileNameInSelection(const std::string& vFileName, bool vSetLastSelectionFileName); // selection : add a file name void AddFile(const FileDialogInternal& vFileDialogInternal, - const std::string& vPath, const std::string& vFileName, const char& vFileType, void* ent); // add file called by scandir + const std::string& vPath, const std::string& vFileName, char vFileType, void* ent); // add file called by scandir public: FileManager(); @@ -892,9 +894,9 @@ namespace IGFD bool IsFileListEmpty(); bool IsFilteredListEmpty(); size_t GetFullFileListSize(); - std::shared_ptr GetFullFileAt(size_t vIdx); + const FileInfos& GetFullFileAt(size_t vIdx); size_t GetFilteredListSize(); - std::shared_ptr GetFilteredFileAt(size_t vIdx); + const FileInfos& GetFilteredFileAt(size_t vIdx); bool IsFileNameSelected(const std::string& vFileName); std::string GetBack(); void ClearComposer(); @@ -912,9 +914,9 @@ namespace IGFD void SetCurrentPath(const std::string& vCurrentPath); // set the current path static bool IsFileExist(const std::string& vFile); void SetDefaultFileName(const std::string& vFileName); - bool SelectDirectory(const std::shared_ptr& vInfos); // enter directory + bool SelectDirectory(const FileInfos& vInfos); // enter directory void SelectFileName(const FileDialogInternal& vFileDialogInternal, - const std::shared_ptr& vInfos); // select filename + const FileInfos& vInfos); // select filename //depend of dirent.h void SetCurrentDir(const std::string& vPath); // define current directory for scan @@ -1311,7 +1313,7 @@ namespace IGFD // widgets components virtual void prDrawSidePane(float vHeight); // draw side pane virtual int prSelectableItem(int vidx, - std::shared_ptr vInfos, + const FileInfos& vInfos, bool vSelected, const char* vFmt, ...); // draw a custom selectable behavior item virtual bool prDrawFileListView(ImVec2 vSize); // draw file list view (default mode) @@ -1325,7 +1327,7 @@ namespace IGFD // - prDrawThumbnailsListView // - prDrawThumbnailsGridView void prBeginFileColorIconStyle( - std::shared_ptr vFileInfos, + const FileInfos& vFileInfos, bool& vOutShowColor, std::string& vOutStr, ImFont** vOutFont); // begin style apply of filter with color an icon if any From a08a23fd13e788d011be46df8c2be51d8482bed0 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 27 Jul 2023 01:07:57 -0500 Subject: [PATCH 10/87] fix Windows build --- extern/igfd/ImGuiFileDialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extern/igfd/ImGuiFileDialog.cpp b/extern/igfd/ImGuiFileDialog.cpp index 39815d4a4..d896c73f0 100644 --- a/extern/igfd/ImGuiFileDialog.cpp +++ b/extern/igfd/ImGuiFileDialog.cpp @@ -1440,8 +1440,8 @@ namespace IGFD SYSTEMTIME localTime; char timebuf[100]; - infos.fileSize=dent.dwin_size; - if (FileTimeToSystemTime(&dent.dwin_mtime,&systemTime)==TRUE) { + infos.fileSize=dent->dwin_size; + if (FileTimeToSystemTime(&dent->dwin_mtime,&systemTime)==TRUE) { if (SystemTimeToTzSpecificLocalTime(NULL,&systemTime,&localTime)==TRUE) { snprintf(timebuf,99,"%d/%.2d/%.2d %.2d:%.2d",localTime.wYear,localTime.wMonth,localTime.wDay,localTime.wHour,localTime.wMinute); } else { From 348b158e4b72a02a4a07142d13552d3a7f8ff3f3 Mon Sep 17 00:00:00 2001 From: Lunathir <18320914+lunathir@users.noreply.github.com> Date: Wed, 26 Jul 2023 22:57:11 -0700 Subject: [PATCH 11/87] Adjust preset name to be in line with other presets --- src/gui/presets.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/presets.cpp b/src/gui/presets.cpp index 05f5af87a..356ac6f6a 100644 --- a/src/gui/presets.cpp +++ b/src/gui/presets.cpp @@ -991,7 +991,7 @@ void FurnaceGUI::initSystemPresets() { } ); ENTRY( - "PC + AdLib/Sound Blaster (drums mode)", { + "PC + Sound Blaster (drums mode)", { CH(DIV_SYSTEM_OPL2_DRUMS, 1.0f, 0, ""), CH(DIV_SYSTEM_PCSPKR, 1.0f, 0, ""), CH(DIV_SYSTEM_PCM_DAC, 1.0f, 0, From 3fac80dad4e61c78a4f0a984ac9aa4abb4e3e810 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 27 Jul 2023 01:12:50 -0500 Subject: [PATCH 12/87] new demo song by Teuthida --- demos/genesis/mm5_boss.fur | Bin 0 -> 21417 bytes src/gui/about.cpp | 1 + 2 files changed, 1 insertion(+) create mode 100644 demos/genesis/mm5_boss.fur diff --git a/demos/genesis/mm5_boss.fur b/demos/genesis/mm5_boss.fur new file mode 100644 index 0000000000000000000000000000000000000000..d3eb6caf53df72abee788906aa71e2af28411588 GIT binary patch literal 21417 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 d`}X}uG)JFXFO_!!r$|~^CfwyaLiD Date: Thu, 27 Jul 2023 01:24:18 -0500 Subject: [PATCH 13/87] NES: optimize NSFplay --- src/engine/platform/nes.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index 8fac52356..2ea68f756 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -130,9 +130,9 @@ void DivPlatformNES::acquire_NSFPlay(short** buf, size_t len) { for (size_t i=0; iTick(1); - nes2_NP->TickFrameSequence(1); - nes2_NP->Tick(1); + nes1_NP->Tick(8); + nes2_NP->TickFrameSequence(8); + nes2_NP->Tick(8); nes1_NP->Render(out1); nes2_NP->Render(out2); @@ -140,7 +140,7 @@ void DivPlatformNES::acquire_NSFPlay(short** buf, size_t len) { if (sample>32767) sample=32767; if (sample<-32768) sample=-32768; buf[0][i]=sample; - if (++writeOscBuf>=32) { + if (++writeOscBuf>=4) { writeOscBuf=0; oscBuf[0]->data[oscBuf[0]->needle++]=nes1_NP->out[0]<<11; oscBuf[1]->data[oscBuf[1]->needle++]=nes1_NP->out[1]<<11; @@ -749,8 +749,11 @@ void DivPlatformNES::setFlags(const DivConfig& flags) { } CHECK_CUSTOM_CLOCK; rate=chipClock; + if (useNP) { + rate/=8; + } for (int i=0; i<5; i++) { - oscBuf[i]->rate=rate/32; + oscBuf[i]->rate=rate/(useNP?4:32); } dpcmModeDefault=flags.getBool("dpcmMode",true); From b186576e14585f46c910d41d77777d658b91e576 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 27 Jul 2023 01:28:03 -0500 Subject: [PATCH 14/87] really fix Windows build --- extern/igfd/ImGuiFileDialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extern/igfd/ImGuiFileDialog.cpp b/extern/igfd/ImGuiFileDialog.cpp index d896c73f0..d66dadf74 100644 --- a/extern/igfd/ImGuiFileDialog.cpp +++ b/extern/igfd/ImGuiFileDialog.cpp @@ -1730,9 +1730,9 @@ namespace IGFD //time_t st_ctime; /* time of last status change - not sure out of ntfs */ #ifdef _WIN32 - if (vInfos->fileType != 'd') + if (vInfos.fileType != 'd') { - vInfos->formatedFileSize = prFormatFileSize(vInfos->fileSize); + vInfos.formatedFileSize = prFormatFileSize(vInfos.fileSize); } #else std::string fpn; From c2f83a3aefde01a78bea4562aee0bfd068148dcb Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 27 Jul 2023 01:35:28 -0500 Subject: [PATCH 15/87] GUI: remove ability to save legacy .fui --- src/gui/dataList.cpp | 3 --- src/gui/doAction.cpp | 3 --- src/gui/gui.cpp | 19 ------------------- src/gui/gui.h | 2 -- src/gui/guiConst.cpp | 1 - src/gui/insEdit.cpp | 3 --- 6 files changed, 31 deletions(-) diff --git a/src/gui/dataList.cpp b/src/gui/dataList.cpp index 289584492..f9e2ab749 100644 --- a/src/gui/dataList.cpp +++ b/src/gui/dataList.cpp @@ -330,9 +330,6 @@ void FurnaceGUI::insListItem(int i, int dir, int asset) { if (ImGui::MenuItem("save")) { doAction(GUI_ACTION_INS_LIST_SAVE); } - if (ImGui::MenuItem("save (legacy .fui)")) { - doAction(GUI_ACTION_INS_LIST_SAVE_OLD); - } if (ImGui::MenuItem("save (.dmp)")) { doAction(GUI_ACTION_INS_LIST_SAVE_DMP); } diff --git a/src/gui/doAction.cpp b/src/gui/doAction.cpp index 60d713d32..56f1e32f9 100644 --- a/src/gui/doAction.cpp +++ b/src/gui/doAction.cpp @@ -642,9 +642,6 @@ void FurnaceGUI::doAction(int what) { case GUI_ACTION_INS_LIST_SAVE: if (curIns>=0 && curIns<(int)e->song.ins.size()) openFileDialog(GUI_FILE_INS_SAVE); break; - case GUI_ACTION_INS_LIST_SAVE_OLD: - if (curIns>=0 && curIns<(int)e->song.ins.size()) openFileDialog(GUI_FILE_INS_SAVE_OLD); - break; case GUI_ACTION_INS_LIST_SAVE_DMP: if (curIns>=0 && curIns<(int)e->song.ins.size()) openFileDialog(GUI_FILE_INS_SAVE_DMP); break; diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index e84c3ecd2..0f6eaee80 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -1653,16 +1653,6 @@ void FurnaceGUI::openFileDialog(FurnaceGUIFileDialogs type) { dpiScale ); break; - case GUI_FILE_INS_SAVE_OLD: - if (!dirExists(workingDirIns)) workingDirIns=getHomeDir(); - hasOpened=fileDialog->openSave( - "Save Instrument", - {"Furnace instrument", "*.fui"}, - "Furnace instrument{.fui}", - workingDirIns, - dpiScale - ); - break; case GUI_FILE_INS_SAVE_DMP: if (!dirExists(workingDirIns)) workingDirIns=getHomeDir(); hasOpened=fileDialog->openSave( @@ -4592,7 +4582,6 @@ bool FurnaceGUI::loop() { case GUI_FILE_INS_OPEN: case GUI_FILE_INS_OPEN_REPLACE: case GUI_FILE_INS_SAVE: - case GUI_FILE_INS_SAVE_OLD: case GUI_FILE_INS_SAVE_DMP: workingDirIns=fileDialog->getPath()+DIR_SEPARATOR_STR; break; @@ -4695,9 +4684,6 @@ bool FurnaceGUI::loop() { if (curFileDialog==GUI_FILE_INS_SAVE) { checkExtension(".fui"); } - if (curFileDialog==GUI_FILE_INS_SAVE_OLD) { - checkExtension(".fui"); - } if (curFileDialog==GUI_FILE_INS_SAVE_DMP) { checkExtension(".dmp"); } @@ -4791,11 +4777,6 @@ bool FurnaceGUI::loop() { e->song.ins[curIns]->save(copyOfName.c_str(),false,&e->song); } break; - case GUI_FILE_INS_SAVE_OLD: - if (curIns>=0 && curIns<(int)e->song.ins.size()) { - e->song.ins[curIns]->save(copyOfName.c_str(),true); - } - break; case GUI_FILE_INS_SAVE_DMP: if (curIns>=0 && curIns<(int)e->song.ins.size()) { if (!e->song.ins[curIns]->saveDMP(copyOfName.c_str())) { diff --git a/src/gui/gui.h b/src/gui/gui.h index b4a8a3e5b..42cec092f 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -402,7 +402,6 @@ enum FurnaceGUIFileDialogs { GUI_FILE_INS_OPEN, GUI_FILE_INS_OPEN_REPLACE, GUI_FILE_INS_SAVE, - GUI_FILE_INS_SAVE_OLD, GUI_FILE_INS_SAVE_DMP, GUI_FILE_WAVE_OPEN, GUI_FILE_WAVE_OPEN_REPLACE, @@ -607,7 +606,6 @@ enum FurnaceGUIActions { GUI_ACTION_INS_LIST_OPEN, GUI_ACTION_INS_LIST_OPEN_REPLACE, GUI_ACTION_INS_LIST_SAVE, - GUI_ACTION_INS_LIST_SAVE_OLD, GUI_ACTION_INS_LIST_SAVE_DMP, GUI_ACTION_INS_LIST_MOVE_UP, GUI_ACTION_INS_LIST_MOVE_DOWN, diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index 7e7aecc18..09fe601d4 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -641,7 +641,6 @@ const FurnaceGUIActionDef guiActions[GUI_ACTION_MAX]={ D("INS_LIST_OPEN", "Open", 0), D("INS_LIST_OPEN_REPLACE", "Open (replace current)", 0), D("INS_LIST_SAVE", "Save", 0), - D("INS_LIST_SAVE_OLD", "Save (legacy .fui)", 0), D("INS_LIST_SAVE_DMP", "Save (.dmp)", 0), D("INS_LIST_MOVE_UP", "Move up", FURKMOD_SHIFT|SDLK_UP), D("INS_LIST_MOVE_DOWN", "Move down", FURKMOD_SHIFT|SDLK_DOWN), diff --git a/src/gui/insEdit.cpp b/src/gui/insEdit.cpp index 341f38a44..a490b0a6e 100644 --- a/src/gui/insEdit.cpp +++ b/src/gui/insEdit.cpp @@ -2288,9 +2288,6 @@ void FurnaceGUI::drawInsEdit() { ImGui::SetTooltip("Save"); } if (ImGui::BeginPopupContextItem("InsSaveFormats",ImGuiMouseButton_Right)) { - if (ImGui::MenuItem("save in legacy format...")) { - doAction(GUI_ACTION_INS_LIST_SAVE_OLD); - } if (ImGui::MenuItem("save as .dmp...")) { doAction(GUI_ACTION_INS_LIST_SAVE_DMP); } From b41d8fe2088b57df8032fc6b01ae7a0f78935066 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 27 Jul 2023 02:20:22 -0500 Subject: [PATCH 16/87] TIA: fix custom clock but it changes pitch of everything --- src/engine/platform/tia.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/engine/platform/tia.cpp b/src/engine/platform/tia.cpp index 1836bee10..86038216a 100644 --- a/src/engine/platform/tia.cpp +++ b/src/engine/platform/tia.cpp @@ -356,12 +356,12 @@ void DivPlatformTIA::poke(std::vector& wlist) { void DivPlatformTIA::setFlags(const DivConfig& flags) { if (flags.getInt("clockSel",0)) { - rate=COLOR_PAL*4.0/5.0; + chipClock=COLOR_PAL*4.0/5.0; } else { - rate=COLOR_NTSC; + chipClock=COLOR_NTSC; } CHECK_CUSTOM_CLOCK; - chipClock=rate; + rate=chipClock; mixingType=flags.getInt("mixingType",0)&3; for (int i=0; i<2; i++) { oscBuf[i]->rate=rate/114; From 620fc82247aafb1613b5e1a1ad3bfdd5a3ab872d Mon Sep 17 00:00:00 2001 From: Eknous-P Date: Thu, 27 Jul 2023 14:44:41 +0400 Subject: [PATCH 17/87] 'all' checkbox to 'all'/'none' buttons --- src/gui/effectList.cpp | 45 +++++++++++++++++++++--------------------- src/gui/gui.cpp | 1 - src/gui/gui.h | 2 +- 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/src/gui/effectList.cpp b/src/gui/effectList.cpp index d9d9a6ecf..6b309cdc9 100644 --- a/src/gui/effectList.cpp +++ b/src/gui/effectList.cpp @@ -12,10 +12,17 @@ void FurnaceGUI::drawEffectList() { ImGui::SetNextWindowSizeConstraints(ImVec2(60.0f*dpiScale,20.0f*dpiScale),ImVec2(canvasW,canvasH)); if (ImGui::Begin("Effect List",&effectListOpen,globalWinFlags)) { ImGui::Text("Chip at cursor: %s",e->getSystemName(e->sysOfChan[cursor.xCoarse])); - // ImGui::Text("Sort Effects:"); if (ImGui::TreeNode("Sort Effects")) { - ImGui::Checkbox("All",&effectShowAll); - if (effectShowAll) { + ImGui::Checkbox("Pitch",&effectShowPitch); + ImGui::Checkbox("Song",&effectShowSong); + ImGui::Checkbox("Time",&effectShowTime); + ImGui::Checkbox("Speed",&effectShowSpeed); + ImGui::Checkbox("Panning",&effectShowPanning); + ImGui::Checkbox("Volume",&effectShowVolume); + ImGui::Checkbox("System (primary)",&effectShowSysPrimary); + ImGui::Checkbox("System (secondary)",&effectShowSysSecondary); + ImGui::Checkbox("Miscellaneous",&effectShowMisc); + if (ImGui::Button("All")) { effectShowMisc = true; effectShowPanning = true; effectShowPitch = true; @@ -26,27 +33,20 @@ void FurnaceGUI::drawEffectList() { effectShowSysPrimary = true; effectShowSysSecondary = true; } - // ImGui::SameLine(); - ImGui::Checkbox("Pitch",&effectShowPitch); - // ImGui::SameLine(); - ImGui::Checkbox("Song",&effectShowSong); - // ImGui::SameLine(); - ImGui::Checkbox("Time",&effectShowTime); - // ImGui::SameLine(); - ImGui::Checkbox("Speed",&effectShowSpeed); - // ImGui::SameLine(); - ImGui::Checkbox("Panning",&effectShowPanning); - // ImGui::SameLine(); - ImGui::Checkbox("Volume",&effectShowVolume); - // ImGui::SameLine(); - ImGui::Checkbox("System (primary)",&effectShowSysPrimary); - // ImGui::SameLine(); - ImGui::Checkbox("System (secondary)",&effectShowSysSecondary); - // ImGui::SameLine(); - ImGui::Checkbox("Miscellaneous",&effectShowMisc); + ImGui::SameLine(); + if (ImGui::Button("None")) { + effectShowMisc = false; + effectShowPanning = false; + effectShowPitch = false; + effectShowVolume = false; + effectShowSong = false; + effectShowTime = false; + effectShowSpeed = false; + effectShowSysPrimary = false; + effectShowSysSecondary = false; + } ImGui::TreePop(); } - effectShowAll = effectShowMisc && effectShowPanning && effectShowPitch && effectShowVolume && effectShowSong && effectShowTime && effectShowSpeed && effectShowSysPrimary && effectShowSysSecondary; if (ImGui::BeginTable("effectList",2)) { ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthFixed); @@ -74,7 +74,6 @@ void FurnaceGUI::drawEffectList() { case GUI_COLOR_PATTERN_EFFECT_SYS_SECONDARY: effectShow = effectShowSysSecondary; break; default: effectShow = true; break; } - // effectShow = effectShow && effectShowAll; if (name==prevName) { continue; } diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 088f1b8d7..4c73d7f1c 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -7154,7 +7154,6 @@ FurnaceGUI::FurnaceGUI(): pianoInputPadMode(PIANO_INPUT_PAD_DISABLE), #endif //effect sorting - effectShowAll(true), effectShowPitch(true), effectShowVolume(true), effectShowPanning(true), diff --git a/src/gui/gui.h b/src/gui/gui.h index d1373e73a..6110c7561 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -2034,7 +2034,7 @@ class FurnaceGUI { int pianoView, pianoInputPadMode; //effect sorting - bool effectShowAll, effectShowPitch, effectShowVolume, effectShowPanning, effectShowSong, effectShowTime, effectShowSpeed, effectShowSysPrimary, effectShowSysSecondary, effectShowMisc; + bool effectShowPitch, effectShowVolume, effectShowPanning, effectShowSong, effectShowTime, effectShowSpeed, effectShowSysPrimary, effectShowSysSecondary, effectShowMisc; // TX81Z bool hasACED; From 0d33273a2e84fa27075816f95e74bb5f4817ebaa Mon Sep 17 00:00:00 2001 From: Eknous-P Date: Thu, 27 Jul 2023 15:22:20 +0400 Subject: [PATCH 18/87] useless newline removed --- src/gui/gui.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gui/gui.h b/src/gui/gui.h index 6110c7561..c14bea088 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1729,7 +1729,6 @@ class FurnaceGUI { bool subSongsOpen, findOpen, spoilerOpen, patManagerOpen, sysManagerOpen, clockOpen, speedOpen; bool groovesOpen, introMonOpen; - bool basicMode, shortIntro; bool insListDir, waveListDir, sampleListDir; From 7aa3aec20ef5daec852dedb7bfd01920bde12f2d Mon Sep 17 00:00:00 2001 From: MooingLemur Date: Fri, 28 Jul 2023 01:36:38 -0700 Subject: [PATCH 19/87] ZSM export: handle Virtual Tempo quantization --- src/engine/zsmOps.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/engine/zsmOps.cpp b/src/engine/zsmOps.cpp index 85ddb5d47..24d543b8f 100644 --- a/src/engine/zsmOps.cpp +++ b/src/engine/zsmOps.cpp @@ -94,6 +94,7 @@ SafeWriter* DivEngine::saveZSM(unsigned int zsmrate, bool loop) { playSub(false); //size_t tickCount=0; bool done=false; + bool loopNow=false; int loopPos=-1; int fracWait=0; // accumulates fractional ticks if (VERA>=0) disCont[VERA].dispatch->toggleRegisterDump(true); @@ -109,9 +110,17 @@ SafeWriter* DivEngine::saveZSM(unsigned int zsmrate, bool loop) { while (!done) { if (loopPos==-1) { - if (loopOrder==curOrder && loopRow==curRow && ticks==1 && loop) { - loopPos=zsm.getoffset(); - zsm.setLoopPoint(); + if (loopOrder==curOrder && loopRow==curRow && loop) + loopNow=true; + if (loopNow) { + // If Virtual Tempo is in use, our exact loop point + // might be skipped to quantization error. + // If this happens, the tick immediately following is our loop point. + if (ticks==1 || !(loopOrder==curOrder && loopRow==curRow)) { + loopPos=zsm.getoffset(); + zsm.setLoopPoint(); + loopNow=false; + } } } if (nextTick() || !playing) { From 9dcd5d1a89d5cabdca77f8bf468cf632427e0bde Mon Sep 17 00:00:00 2001 From: MooingLemur Date: Fri, 28 Jul 2023 01:51:22 -0700 Subject: [PATCH 20/87] comment grammar --- src/engine/zsmOps.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/zsmOps.cpp b/src/engine/zsmOps.cpp index 24d543b8f..b26e7a273 100644 --- a/src/engine/zsmOps.cpp +++ b/src/engine/zsmOps.cpp @@ -114,7 +114,7 @@ SafeWriter* DivEngine::saveZSM(unsigned int zsmrate, bool loop) { loopNow=true; if (loopNow) { // If Virtual Tempo is in use, our exact loop point - // might be skipped to quantization error. + // might be skipped due to quantization error. // If this happens, the tick immediately following is our loop point. if (ticks==1 || !(loopOrder==curOrder && loopRow==curRow)) { loopPos=zsm.getoffset(); From a7e9218562af843050c9a363f1219311b4cd5400 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 28 Jul 2023 04:27:53 -0500 Subject: [PATCH 21/87] Namco WSG: fix custom clock --- src/engine/platform/namcowsg.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/namcowsg.cpp b/src/engine/platform/namcowsg.cpp index 5b804b23f..5ac493f19 100644 --- a/src/engine/platform/namcowsg.cpp +++ b/src/engine/platform/namcowsg.cpp @@ -571,7 +571,7 @@ void DivPlatformNamcoWSG::setFlags(const DivConfig& flags) { chipClock=3072000; CHECK_CUSTOM_CLOCK; rate=chipClock/32; - namco->device_clock_changed(rate); + namco->device_clock_changed(96000); for (int i=0; irate=rate; } From d5b18ab080ffcc3a695cbafdaaf3b87b3c2450eb Mon Sep 17 00:00:00 2001 From: Eknous-P Date: Fri, 28 Jul 2023 18:24:56 +0400 Subject: [PATCH 22/87] is this "the button" --- src/gui/effectList.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/effectList.cpp b/src/gui/effectList.cpp index 6b309cdc9..e9da54d56 100644 --- a/src/gui/effectList.cpp +++ b/src/gui/effectList.cpp @@ -12,7 +12,8 @@ void FurnaceGUI::drawEffectList() { ImGui::SetNextWindowSizeConstraints(ImVec2(60.0f*dpiScale,20.0f*dpiScale),ImVec2(canvasW,canvasH)); if (ImGui::Begin("Effect List",&effectListOpen,globalWinFlags)) { ImGui::Text("Chip at cursor: %s",e->getSystemName(e->sysOfChan[cursor.xCoarse])); - if (ImGui::TreeNode("Sort Effects")) { + if (ImGui::Button("Sort Effects")) ImGui::OpenPopup("effectSort"); + if (ImGui::BeginPopup("effectSort")) { ImGui::Checkbox("Pitch",&effectShowPitch); ImGui::Checkbox("Song",&effectShowSong); ImGui::Checkbox("Time",&effectShowTime); @@ -45,7 +46,7 @@ void FurnaceGUI::drawEffectList() { effectShowSysPrimary = false; effectShowSysSecondary = false; } - ImGui::TreePop(); + ImGui::EndPopup(); } if (ImGui::BeginTable("effectList",2)) { From dd00d3bc66514f6d6ffa61906efda00f203e6911 Mon Sep 17 00:00:00 2001 From: Eknous-P Date: Fri, 28 Jul 2023 18:39:40 +0400 Subject: [PATCH 23/87] cleanup --- src/gui/effectList.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/gui/effectList.cpp b/src/gui/effectList.cpp index e9da54d56..f6b4c6c31 100644 --- a/src/gui/effectList.cpp +++ b/src/gui/effectList.cpp @@ -23,6 +23,7 @@ void FurnaceGUI::drawEffectList() { ImGui::Checkbox("System (primary)",&effectShowSysPrimary); ImGui::Checkbox("System (secondary)",&effectShowSysSecondary); ImGui::Checkbox("Miscellaneous",&effectShowMisc); + if (ImGui::Button("All")) { effectShowMisc = true; effectShowPanning = true; @@ -46,6 +47,7 @@ void FurnaceGUI::drawEffectList() { effectShowSysPrimary = false; effectShowSysSecondary = false; } + ImGui::EndPopup(); } @@ -63,6 +65,10 @@ void FurnaceGUI::drawEffectList() { for (int i=0; i<256; i++) { const char* name=e->getEffectDesc(i,cursor.xCoarse); bool effectShow = true; + if (name==prevName) { + continue; + } + prevName=name; switch (fxColors[i]) { case GUI_COLOR_PATTERN_EFFECT_MISC: effectShow = effectShowMisc; break; case GUI_COLOR_PATTERN_EFFECT_SONG: effectShow = effectShowSong; break; @@ -75,10 +81,6 @@ void FurnaceGUI::drawEffectList() { case GUI_COLOR_PATTERN_EFFECT_SYS_SECONDARY: effectShow = effectShowSysSecondary; break; default: effectShow = true; break; } - if (name==prevName) { - continue; - } - prevName=name; if (name!=NULL && effectShow) { ImGui::TableNextRow(); ImGui::TableNextColumn(); From 5c5ccbeb72c76a13db64392d39e58adf863a6a75 Mon Sep 17 00:00:00 2001 From: Eknous-P Date: Fri, 28 Jul 2023 20:38:13 +0400 Subject: [PATCH 24/87] change to beginpopupcontextitem --- src/gui/effectList.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/effectList.cpp b/src/gui/effectList.cpp index f6b4c6c31..8dd0b327a 100644 --- a/src/gui/effectList.cpp +++ b/src/gui/effectList.cpp @@ -13,7 +13,7 @@ void FurnaceGUI::drawEffectList() { if (ImGui::Begin("Effect List",&effectListOpen,globalWinFlags)) { ImGui::Text("Chip at cursor: %s",e->getSystemName(e->sysOfChan[cursor.xCoarse])); if (ImGui::Button("Sort Effects")) ImGui::OpenPopup("effectSort"); - if (ImGui::BeginPopup("effectSort")) { + if (ImGui::BeginPopupContextItem("effectSort")) { ImGui::Checkbox("Pitch",&effectShowPitch); ImGui::Checkbox("Song",&effectShowSong); ImGui::Checkbox("Time",&effectShowTime); From 9d567d8cca6b4a40d61446d7d84839d78d036252 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 28 Jul 2023 16:07:01 -0500 Subject: [PATCH 25/87] fix system fmt, part 1 --- src/engine/fileOps.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/fileOps.cpp b/src/engine/fileOps.cpp index de1074d6d..ec7b64955 100644 --- a/src/engine/fileOps.cpp +++ b/src/engine/fileOps.cpp @@ -869,7 +869,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) { if (ds.version>0x15) { sample->depth=(DivSampleDepth)reader.readC(); if (sample->depth!=DIV_SAMPLE_DEPTH_8BIT && sample->depth!=DIV_SAMPLE_DEPTH_16BIT) { - logW("%d: sample depth is wrong! (%d)",i,sample->depth); + logW("%d: sample depth is wrong! (%d)",i,(int)sample->depth); sample->depth=DIV_SAMPLE_DEPTH_16BIT; } } else { From 2c3bacbd3b0c936ff562805e1cc92baec49d6739 Mon Sep 17 00:00:00 2001 From: Eknous-P Date: Sat, 29 Jul 2023 11:07:20 +0400 Subject: [PATCH 26/87] colored text, arrays instead of many vars --- src/gui/effectList.cpp | 56 ++++++++++++------------------------------ src/gui/gui.cpp | 12 ++------- src/gui/gui.h | 2 +- src/gui/guiConst.cpp | 26 ++++++++++++++++++++ src/gui/guiConst.h | 4 ++- 5 files changed, 48 insertions(+), 52 deletions(-) diff --git a/src/gui/effectList.cpp b/src/gui/effectList.cpp index 8dd0b327a..4da92c29d 100644 --- a/src/gui/effectList.cpp +++ b/src/gui/effectList.cpp @@ -14,39 +14,15 @@ void FurnaceGUI::drawEffectList() { ImGui::Text("Chip at cursor: %s",e->getSystemName(e->sysOfChan[cursor.xCoarse])); if (ImGui::Button("Sort Effects")) ImGui::OpenPopup("effectSort"); if (ImGui::BeginPopupContextItem("effectSort")) { - ImGui::Checkbox("Pitch",&effectShowPitch); - ImGui::Checkbox("Song",&effectShowSong); - ImGui::Checkbox("Time",&effectShowTime); - ImGui::Checkbox("Speed",&effectShowSpeed); - ImGui::Checkbox("Panning",&effectShowPanning); - ImGui::Checkbox("Volume",&effectShowVolume); - ImGui::Checkbox("System (primary)",&effectShowSysPrimary); - ImGui::Checkbox("System (secondary)",&effectShowSysSecondary); - ImGui::Checkbox("Miscellaneous",&effectShowMisc); + for (int i=0; i<9; i++) { + ImGui::PushStyleColor(ImGuiCol_Text,uiColors[fxColorsSort[i]]); + ImGui::Checkbox(fxColorsNames[i],&effectsShow[i]); + ImGui::PopStyleColor(); + } - if (ImGui::Button("All")) { - effectShowMisc = true; - effectShowPanning = true; - effectShowPitch = true; - effectShowVolume = true; - effectShowSong = true; - effectShowTime = true; - effectShowSpeed = true; - effectShowSysPrimary = true; - effectShowSysSecondary = true; - } + if (ImGui::Button("All")) memset(effectsShow,1,sizeof(bool)*10); ImGui::SameLine(); - if (ImGui::Button("None")) { - effectShowMisc = false; - effectShowPanning = false; - effectShowPitch = false; - effectShowVolume = false; - effectShowSong = false; - effectShowTime = false; - effectShowSpeed = false; - effectShowSysPrimary = false; - effectShowSysSecondary = false; - } + if (ImGui::Button("None")) memset(effectsShow,0,sizeof(bool)*10); ImGui::EndPopup(); } @@ -70,15 +46,15 @@ void FurnaceGUI::drawEffectList() { } prevName=name; switch (fxColors[i]) { - case GUI_COLOR_PATTERN_EFFECT_MISC: effectShow = effectShowMisc; break; - case GUI_COLOR_PATTERN_EFFECT_SONG: effectShow = effectShowSong; break; - case GUI_COLOR_PATTERN_EFFECT_SPEED: effectShow = effectShowSpeed; break; - case GUI_COLOR_PATTERN_EFFECT_TIME: effectShow = effectShowTime; break; - case GUI_COLOR_PATTERN_EFFECT_PITCH: effectShow = effectShowPitch; break; - case GUI_COLOR_PATTERN_EFFECT_PANNING: effectShow = effectShowPanning; break; - case GUI_COLOR_PATTERN_EFFECT_VOLUME: effectShow = effectShowVolume; break; - case GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY: effectShow = effectShowSysPrimary; break; - case GUI_COLOR_PATTERN_EFFECT_SYS_SECONDARY: effectShow = effectShowSysSecondary; break; + case GUI_COLOR_PATTERN_EFFECT_MISC: effectShow = effectsShow[8]; break; + case GUI_COLOR_PATTERN_EFFECT_SONG: effectShow = effectsShow[1]; break; + case GUI_COLOR_PATTERN_EFFECT_SPEED: effectShow = effectsShow[3]; break; + case GUI_COLOR_PATTERN_EFFECT_TIME: effectShow = effectsShow[2]; break; + case GUI_COLOR_PATTERN_EFFECT_PITCH: effectShow = effectsShow[0]; break; + case GUI_COLOR_PATTERN_EFFECT_PANNING: effectShow = effectsShow[4]; break; + case GUI_COLOR_PATTERN_EFFECT_VOLUME: effectShow = effectsShow[5]; break; + case GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY: effectShow = effectsShow[6]; break; + case GUI_COLOR_PATTERN_EFFECT_SYS_SECONDARY: effectShow = effectsShow[7]; break; default: effectShow = true; break; } if (name!=NULL && effectShow) { diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 0883dce3f..4986cdfb4 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -7134,16 +7134,6 @@ FurnaceGUI::FurnaceGUI(): pianoView(PIANO_LAYOUT_STANDARD), pianoInputPadMode(PIANO_INPUT_PAD_DISABLE), #endif - //effect sorting - effectShowPitch(true), - effectShowVolume(true), - effectShowPanning(true), - effectShowSong(true), - effectShowTime(true), - effectShowSpeed(true), - effectShowSysPrimary(true), - effectShowSysSecondary(true), - effectShowMisc(true), hasACED(false), waveGenBaseShape(0), waveInterpolation(0), @@ -7279,6 +7269,8 @@ FurnaceGUI::FurnaceGUI(): memset(macroRelLabel,0,32); memset(emptyLabel,0,32); memset(emptyLabel2,0,32); + //effect sorting + memset(effectsShow,1,sizeof(bool)*10); strncpy(noteOffLabel,"OFF",32); strncpy(noteRelLabel,"===",32); diff --git a/src/gui/gui.h b/src/gui/gui.h index 65b1cc293..7d3e4cb5b 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -2031,7 +2031,7 @@ class FurnaceGUI { int pianoView, pianoInputPadMode; //effect sorting - bool effectShowPitch, effectShowVolume, effectShowPanning, effectShowSong, effectShowTime, effectShowSpeed, effectShowSysPrimary, effectShowSysSecondary, effectShowMisc; + bool effectsShow[10]; // TX81Z bool hasACED; diff --git a/src/gui/guiConst.cpp b/src/gui/guiConst.cpp index 09fe601d4..c1446ac6f 100644 --- a/src/gui/guiConst.cpp +++ b/src/gui/guiConst.cpp @@ -208,6 +208,32 @@ const char* resampleStrats[]={ "best possible" }; +const FurnaceGUIColors fxColorsSort[]={//used for sorting + GUI_COLOR_PATTERN_EFFECT_PITCH, + GUI_COLOR_PATTERN_EFFECT_SONG, + GUI_COLOR_PATTERN_EFFECT_TIME, + GUI_COLOR_PATTERN_EFFECT_SPEED, + GUI_COLOR_PATTERN_EFFECT_PANNING, + GUI_COLOR_PATTERN_EFFECT_VOLUME, + GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY, + GUI_COLOR_PATTERN_EFFECT_SYS_SECONDARY, + GUI_COLOR_PATTERN_EFFECT_MISC, + GUI_COLOR_PATTERN_EFFECT_INVALID +}; + +const char* fxColorsNames[]={ + "Pitch", + "Song", + "Time", + "Speed", + "Panning", + "Volume", + "System Primary", + "System Secondary", + "Miscellaneous", + "Invalid" +}; + const FurnaceGUIColors fxColors[256]={ GUI_COLOR_PATTERN_EFFECT_MISC, // 00 GUI_COLOR_PATTERN_EFFECT_PITCH, // 01 diff --git a/src/gui/guiConst.h b/src/gui/guiConst.h index 494ba58dc..616692de5 100644 --- a/src/gui/guiConst.h +++ b/src/gui/guiConst.h @@ -57,4 +57,6 @@ extern const FurnaceGUIActionDef guiActions[]; extern const FurnaceGUIColorDef guiColors[]; extern const int altValues[24]; extern const int vgmVersions[7]; -extern const FurnaceGUIColors fxColors[256]; \ No newline at end of file +extern const FurnaceGUIColors fxColors[256]; +extern const FurnaceGUIColors fxColorsSort[10]; +extern const char* fxColorsNames[10]; \ No newline at end of file From 1aef0079d14eb47e6895e8706c786e50b0d48c6f Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 29 Jul 2023 03:17:15 -0500 Subject: [PATCH 27/87] the first step to deprecating Defle compat Furnace will support .dmf loading/saving however in a far future, compatibility may not be guaranteed... I am not sure this setting is off by default (for now) --- src/engine/fileOps.cpp | 134 +++++++++++++++++++++-------------------- src/gui/gui.h | 2 + src/gui/settings.cpp | 11 ++++ 3 files changed, 81 insertions(+), 66 deletions(-) diff --git a/src/engine/fileOps.cpp b/src/engine/fileOps.cpp index ec7b64955..0ba5a1327 100644 --- a/src/engine/fileOps.cpp +++ b/src/engine/fileOps.cpp @@ -142,76 +142,78 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) { } // compatibility flags - ds.limitSlides=true; - ds.linearPitch=1; - ds.loopModality=0; - ds.properNoiseLayout=false; - ds.waveDutyIsVol=false; - // TODO: WHAT?! geodude.dmf fails when this is true - // but isn't that how Defle behaves??? - ds.resetMacroOnPorta=false; - ds.legacyVolumeSlides=true; - ds.compatibleArpeggio=true; - ds.noteOffResetsSlides=true; - ds.targetResetsSlides=true; - ds.arpNonPorta=false; - ds.algMacroBehavior=false; - ds.brokenShortcutSlides=false; - ds.ignoreDuplicateSlides=true; - ds.brokenDACMode=true; - ds.oneTickCut=false; - ds.newInsTriggersInPorta=true; - ds.arp0Reset=true; - ds.brokenSpeedSel=true; - ds.noSlidesOnFirstTick=false; - ds.rowResetsArpPos=false; - ds.ignoreJumpAtEnd=true; - ds.buggyPortaAfterSlide=true; - ds.gbInsAffectsEnvelope=true; - ds.ignoreDACModeOutsideIntendedChannel=false; - ds.e1e2AlsoTakePriority=true; - ds.fbPortaPause=true; - ds.snDutyReset=true; - ds.oldOctaveBoundary=false; - ds.noOPN2Vol=true; - ds.newVolumeScaling=false; - ds.volMacroLinger=false; - ds.brokenOutVol=true; - ds.brokenOutVol2=true; - ds.e1e2StopOnSameNote=true; - ds.brokenPortaArp=false; - ds.snNoLowPeriods=true; - ds.disableSampleMacro=true; - ds.delayBehavior=0; - ds.jumpTreatment=2; + if (!getConfInt("noDMFCompat",0)) { + ds.limitSlides=true; + ds.linearPitch=1; + ds.loopModality=0; + ds.properNoiseLayout=false; + ds.waveDutyIsVol=false; + // TODO: WHAT?! geodude.dmf fails when this is true + // but isn't that how Defle behaves??? + ds.resetMacroOnPorta=false; + ds.legacyVolumeSlides=true; + ds.compatibleArpeggio=true; + ds.noteOffResetsSlides=true; + ds.targetResetsSlides=true; + ds.arpNonPorta=false; + ds.algMacroBehavior=false; + ds.brokenShortcutSlides=false; + ds.ignoreDuplicateSlides=true; + ds.brokenDACMode=true; + ds.oneTickCut=false; + ds.newInsTriggersInPorta=true; + ds.arp0Reset=true; + ds.brokenSpeedSel=true; + ds.noSlidesOnFirstTick=false; + ds.rowResetsArpPos=false; + ds.ignoreJumpAtEnd=true; + ds.buggyPortaAfterSlide=true; + ds.gbInsAffectsEnvelope=true; + ds.ignoreDACModeOutsideIntendedChannel=false; + ds.e1e2AlsoTakePriority=true; + ds.fbPortaPause=true; + ds.snDutyReset=true; + ds.oldOctaveBoundary=false; + ds.noOPN2Vol=true; + ds.newVolumeScaling=false; + ds.volMacroLinger=false; + ds.brokenOutVol=true; + ds.brokenOutVol2=true; + ds.e1e2StopOnSameNote=true; + ds.brokenPortaArp=false; + ds.snNoLowPeriods=true; + ds.disableSampleMacro=true; + ds.delayBehavior=0; + ds.jumpTreatment=2; - // 1.1 compat flags - if (ds.version>24) { - ds.waveDutyIsVol=true; - ds.legacyVolumeSlides=false; - } + // 1.1 compat flags + if (ds.version>24) { + ds.waveDutyIsVol=true; + ds.legacyVolumeSlides=false; + } - // Neo Geo detune is caused by Defle running Neo Geo at the wrong clock. - /* - if (ds.system[0]==DIV_SYSTEM_YM2610 || ds.system[0]==DIV_SYSTEM_YM2610_EXT - || ds.system[0]==DIV_SYSTEM_YM2610_FULL || ds.system[0]==DIV_SYSTEM_YM2610_FULL_EXT - || ds.system[0]==DIV_SYSTEM_YM2610B || ds.system[0]==DIV_SYSTEM_YM2610B_EXT) { - ds.tuning=443.23; - } - */ + // Neo Geo detune is caused by Defle running Neo Geo at the wrong clock. + /* + if (ds.system[0]==DIV_SYSTEM_YM2610 || ds.system[0]==DIV_SYSTEM_YM2610_EXT + || ds.system[0]==DIV_SYSTEM_YM2610_FULL || ds.system[0]==DIV_SYSTEM_YM2610_FULL_EXT + || ds.system[0]==DIV_SYSTEM_YM2610B || ds.system[0]==DIV_SYSTEM_YM2610B_EXT) { + ds.tuning=443.23; + } + */ - // Genesis detuned on Defle v10 and earlier - /*if (ds.version<19 && ds.system[0]==DIV_SYSTEM_GENESIS) { - ds.tuning=443.23; - }*/ - // C64 detuned on Defle v11 and earlier - /*if (ds.version<21 && (ds.system[0]==DIV_SYSTEM_C64_6581 || ds.system[0]==DIV_SYSTEM_C64_8580)) { - ds.tuning=433.2; - }*/ + // Genesis detuned on Defle v10 and earlier + /*if (ds.version<19 && ds.system[0]==DIV_SYSTEM_GENESIS) { + ds.tuning=443.23; + }*/ + // C64 detuned on Defle v11 and earlier + /*if (ds.version<21 && (ds.system[0]==DIV_SYSTEM_C64_6581 || ds.system[0]==DIV_SYSTEM_C64_8580)) { + ds.tuning=433.2; + }*/ - // Game Boy arp+soundLen screwery - if (ds.system[0]==DIV_SYSTEM_GB) { - ds.systemFlags[0].set("enoughAlready",true); + // Game Boy arp+soundLen screwery + if (ds.system[0]==DIV_SYSTEM_GB) { + ds.systemFlags[0].set("enoughAlready",true); + } } logI("reading module data..."); diff --git a/src/gui/gui.h b/src/gui/gui.h index 42cec092f..433056033 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1523,6 +1523,7 @@ class FurnaceGUI { int newSongBehavior; int memUsageUnit; int cursorFollowsWheel; + int noDMFCompat; unsigned int maxUndoSteps; String mainFontPath; String patFontPath; @@ -1677,6 +1678,7 @@ class FurnaceGUI { newSongBehavior(0), memUsageUnit(1), cursorFollowsWheel(0), + noDMFCompat(0), maxUndoSteps(100), mainFontPath(""), patFontPath(""), diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 57f1fa32a..41f3ff225 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -676,6 +676,14 @@ void FurnaceGUI::drawSettings() { settings.blankIns=blankInsB; } + bool noDMFCompatB=settings.noDMFCompat; + if (ImGui::Checkbox("Don't apply compatibility flags when loading .dmf",&noDMFCompatB)) { + settings.noDMFCompat=noDMFCompatB; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("do not report any issues arising from the use of this option!"); + } + bool saveUnusedPatternsB=settings.saveUnusedPatterns; if (ImGui::Checkbox("Save unused patterns",&saveUnusedPatternsB)) { settings.saveUnusedPatterns=saveUnusedPatternsB; @@ -2821,6 +2829,7 @@ void FurnaceGUI::syncSettings() { settings.newSongBehavior=e->getConfInt("newSongBehavior",0); settings.memUsageUnit=e->getConfInt("memUsageUnit",1); settings.cursorFollowsWheel=e->getConfInt("cursorFollowsWheel",0); + settings.noDMFCompat=e->getConfInt("noDMFCompat",0); clampSetting(settings.mainFontSize,2,96); clampSetting(settings.patFontSize,2,96); @@ -2950,6 +2959,7 @@ void FurnaceGUI::syncSettings() { clampSetting(settings.newSongBehavior,0,1); clampSetting(settings.memUsageUnit,0,1); clampSetting(settings.cursorFollowsWheel,0,1); + clampSetting(settings.noDMFCompat,0,1); if (settings.exportLoops<0.0) settings.exportLoops=0.0; if (settings.exportFadeOut<0.0) settings.exportFadeOut=0.0; @@ -3175,6 +3185,7 @@ void FurnaceGUI::commitSettings() { e->setConf("newSongBehavior",settings.newSongBehavior); e->setConf("memUsageUnit",settings.memUsageUnit); e->setConf("cursorFollowsWheel",settings.cursorFollowsWheel); + e->setConf("noDMFCompat",settings.noDMFCompat); // colors for (int i=0; i Date: Sat, 29 Jul 2023 13:11:52 +0400 Subject: [PATCH 28/87] sameline --- src/gui/effectList.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/effectList.cpp b/src/gui/effectList.cpp index 4da92c29d..0be3d942a 100644 --- a/src/gui/effectList.cpp +++ b/src/gui/effectList.cpp @@ -12,6 +12,7 @@ void FurnaceGUI::drawEffectList() { ImGui::SetNextWindowSizeConstraints(ImVec2(60.0f*dpiScale,20.0f*dpiScale),ImVec2(canvasW,canvasH)); if (ImGui::Begin("Effect List",&effectListOpen,globalWinFlags)) { ImGui::Text("Chip at cursor: %s",e->getSystemName(e->sysOfChan[cursor.xCoarse])); + ImGui::SameLine(); if (ImGui::Button("Sort Effects")) ImGui::OpenPopup("effectSort"); if (ImGui::BeginPopupContextItem("effectSort")) { for (int i=0; i<9; i++) { From 92493485a3b9707cb0434fdd0959f651e0683cf8 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 29 Jul 2023 04:21:27 -0500 Subject: [PATCH 29/87] GUI: prepare for new settings layout --- src/gui/settings.cpp | 860 +++++++++++++++++++++++++------------------ 1 file changed, 493 insertions(+), 367 deletions(-) diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 41f3ff225..8a860c10f 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -236,6 +236,27 @@ const char* specificControls[18]={ } \ if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) actionKeys[what]=0; +#define CONFIG_SUBSECTION(what) \ + if (_subInit) { \ + ImGui::Separator(); \ + } else { \ + _subInit=true; \ + } \ + ImGui::PushFont(bigFont); \ + ImGui::TextUnformatted(what); \ + ImGui::PopFont(); + +#define CONFIG_SECTION(what) \ + if (ImGui::BeginTabItem(what)) { \ + bool _subInit=false; \ + ImVec2 settingsViewSize=ImGui::GetContentRegionAvail(); \ + settingsViewSize.y-=ImGui::GetFrameHeight()+ImGui::GetStyle().WindowPadding.y; \ + if (ImGui::BeginChild("SettingsView",settingsViewSize)) + +#define END_SECTION } \ + ImGui::EndChild(); \ + ImGui::EndTabItem(); + String stripName(String what) { String ret; for (char& i: what) { @@ -286,7 +307,472 @@ void FurnaceGUI::drawSettings() { showWarning("Do you want to save your settings?",GUI_WARN_CLOSE_SETTINGS); } if (ImGui::BeginTabBar("settingsTab")) { - if (ImGui::BeginTabItem("General")) { + // NEW SETTINGS HERE + CONFIG_SECTION("General") { + // SUBSECTION PROGRAM + CONFIG_SUBSECTION("Program"); + String curRenderBackend=settings.renderBackend.empty()?GUI_BACKEND_DEFAULT_NAME:settings.renderBackend; + if (ImGui::BeginCombo("Render backend",curRenderBackend.c_str())) { +#ifdef HAVE_RENDER_SDL + if (ImGui::Selectable("SDL Renderer",curRenderBackend=="SDL")) { + settings.renderBackend="SDL"; + } +#endif +#ifdef HAVE_RENDER_DX11 + if (ImGui::Selectable("DirectX 11",curRenderBackend=="DirectX 11")) { + settings.renderBackend="DirectX 11"; + } +#endif +#ifdef HAVE_RENDER_GL + if (ImGui::Selectable("OpenGL",curRenderBackend=="OpenGL")) { + settings.renderBackend="OpenGL"; + } +#endif + ImGui::EndCombo(); + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("you may need to restart Furnace for this setting to take effect."); + } + if (curRenderBackend=="SDL") { + if (ImGui::BeginCombo("Render driver",settings.renderDriver.empty()?"Automatic":settings.renderDriver.c_str())) { + if (ImGui::Selectable("Automatic",settings.renderDriver.empty())) { + settings.renderDriver=""; + } + for (String& i: availRenderDrivers) { + if (ImGui::Selectable(i.c_str(),i==settings.renderDriver)) { + settings.renderDriver=i; + } + } + ImGui::EndCombo(); + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("you may need to restart Furnace for this setting to take effect."); + } + } + + bool renderClearPosB=settings.renderClearPos; + if (ImGui::Checkbox("Late render clear",&renderClearPosB)) { + settings.renderClearPos=renderClearPosB; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("calls rend->clear() after rend->present(). might reduce UI latency by one frame in some drivers."); + } + + bool powerSaveB=settings.powerSave; + if (ImGui::Checkbox("Power-saving mode",&powerSaveB)) { + settings.powerSave=powerSaveB; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("saves power by lowering the frame rate to 2fps when idle.\nmay cause issues under Mesa drivers!"); + } + +#ifndef IS_MOBILE + bool noThreadedInputB=settings.noThreadedInput; + if (ImGui::Checkbox("Disable threaded input (restart after changing!)",&noThreadedInputB)) { + settings.noThreadedInput=noThreadedInputB; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("threaded input processes key presses for note preview on a separate thread (on supported platforms), which reduces latency.\nhowever, crashes have been reported when threaded input is on. enable this option if that is the case."); + } +#endif + + bool eventDelayB=settings.eventDelay; + if (ImGui::Checkbox("Enable event delay",&eventDelayB)) { + settings.eventDelay=eventDelayB; + applyUISettings(false); + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("may cause issues with high-polling-rate mice when previewing notes."); + } + + // SUBSECTION FILE + CONFIG_SUBSECTION("File"); + + bool sysFileDialogB=settings.sysFileDialog; + if (ImGui::Checkbox("Use system file picker",&sysFileDialogB)) { + settings.sysFileDialog=sysFileDialogB; + } + + if (ImGui::InputInt("Number of recent files",&settings.maxRecentFile)) { + if (settings.maxRecentFile<0) settings.maxRecentFile=0; + if (settings.maxRecentFile>30) settings.maxRecentFile=30; + } + + bool compressB=settings.compress; + if (ImGui::Checkbox("Compress when saving",&compressB)) { + settings.compress=compressB; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("use zlib to compress saved songs."); + } + + bool saveUnusedPatternsB=settings.saveUnusedPatterns; + if (ImGui::Checkbox("Save unused patterns",&saveUnusedPatternsB)) { + settings.saveUnusedPatterns=saveUnusedPatternsB; + } + + bool newPatternFormatB=settings.newPatternFormat; + if (ImGui::Checkbox("Use new pattern format when saving",&newPatternFormatB)) { + settings.newPatternFormat=newPatternFormatB; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("use a packed format which saves space when saving songs.\ndisable if you need compatibility with older Furnace and/or tools\nwhich do not support this format."); + } + + bool noDMFCompatB=settings.noDMFCompat; + if (ImGui::Checkbox("Don't apply compatibility flags when loading .dmf",&noDMFCompatB)) { + settings.noDMFCompat=noDMFCompatB; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("do not report any issues arising from the use of this option!"); + } + + ImGui::Text("Audio export loop/fade out time:"); + if (ImGui::RadioButton("Set to these values on start-up:##fot0",settings.persistFadeOut==0)) { + settings.persistFadeOut=0; + } + ImGui::BeginDisabled(settings.persistFadeOut); + if (ImGui::InputInt("Loops",&settings.exportLoops,1,2)) { + if (exportLoops<0) exportLoops=0; + exportLoops=settings.exportLoops; + } + if (ImGui::InputDouble("Fade out (seconds)",&settings.exportFadeOut,1.0,2.0,"%.1f")) { + if (exportFadeOut<0.0) exportFadeOut=0.0; + exportFadeOut=settings.exportFadeOut; + } + ImGui::EndDisabled(); + if (ImGui::RadioButton("Remember last values##fot1",settings.persistFadeOut==1)) { + settings.persistFadeOut=1; + } + + // SUBSECTION CHIP + CONFIG_SUBSECTION("Chip"); + ImGui::Text("Initial system:"); + ImGui::SameLine(); + if (ImGui::Button("Current system")) { + settings.initialSys.clear(); + for (int i=0; isong.systemLen; i++) { + settings.initialSys.set(fmt::sprintf("id%d",i),e->systemToFileFur(e->song.system[i])); + settings.initialSys.set(fmt::sprintf("vol%d",i),(float)e->song.systemVol[i]); + settings.initialSys.set(fmt::sprintf("pan%d",i),(float)e->song.systemPan[i]); + settings.initialSys.set(fmt::sprintf("fr%d",i),(float)e->song.systemPanFR[i]); + settings.initialSys.set(fmt::sprintf("flags%d",i),e->song.systemFlags[i].toBase64()); + } + settings.initialSysName=e->song.systemName; + } + ImGui::SameLine(); + if (ImGui::Button("Randomize")) { + settings.initialSys.clear(); + int howMany=1+rand()%3; + int totalAvailSys=0; + for (totalAvailSys=0; availableSystems[totalAvailSys]; totalAvailSys++); + if (totalAvailSys>0) { + for (int i=0; isystemToFileFur((DivSystem)availableSystems[rand()%totalAvailSys])); + settings.initialSys.set(fmt::sprintf("vol%d",i),1.0f); + settings.initialSys.set(fmt::sprintf("pan%d",i),0.0f); + settings.initialSys.set(fmt::sprintf("fr%d",i),0.0f); + settings.initialSys.set(fmt::sprintf("flags%d",i),""); + } + } else { + settings.initialSys.set("id0",e->systemToFileFur(DIV_SYSTEM_DUMMY)); + settings.initialSys.set("vol0",1.0f); + settings.initialSys.set("pan0",0.0f); + settings.initialSys.set("fr0",0.0f); + settings.initialSys.set("flags0",""); + howMany=1; + } + // randomize system name + std::vector wordPool[6]; + for (int i=0; isystemFromFileFur(settings.initialSys.getInt(fmt::sprintf("id%d",i),0)); + String sName=e->getSystemName(sysID); + String nameWord; + sName+=" "; + for (char& i: sName) { + if (i==' ') { + if (nameWord!="") { + wordPool[wpPos++].push_back(nameWord); + if (wpPos>=6) break; + nameWord=""; + } + } else { + nameWord+=i; + } + } + } + settings.initialSysName=""; + for (int i=0; i<6; i++) { + if (wordPool[i].empty()) continue; + settings.initialSysName+=wordPool[i][rand()%wordPool[i].size()]; + settings.initialSysName+=" "; + } + } + ImGui::SameLine(); + if (ImGui::Button("Reset to defaults")) { + settings.initialSys.clear(); + settings.initialSys.set("id0",e->systemToFileFur(DIV_SYSTEM_YM2612)); + settings.initialSys.set("vol0",1.0f); + settings.initialSys.set("pan0",0.0f); + settings.initialSys.set("fr0",0.0f); + settings.initialSys.set("flags0",""); + settings.initialSys.set("id1",e->systemToFileFur(DIV_SYSTEM_SMS)); + settings.initialSys.set("vol1",0.5f); + settings.initialSys.set("pan1",0.0f); + settings.initialSys.set("fr1",0.0f); + settings.initialSys.set("flags1",""); + settings.initialSysName="Sega Genesis/Mega Drive"; + } + + ImGui::Text("Name"); + ImGui::SameLine(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + ImGui::InputText("##InitSysName",&settings.initialSysName); + + int sysCount=0; + int doRemove=-1; + for (size_t i=0; settings.initialSys.getInt(fmt::sprintf("id%d",i),0); i++) { + DivSystem sysID=e->systemFromFileFur(settings.initialSys.getInt(fmt::sprintf("id%d",i),0)); + float sysVol=settings.initialSys.getFloat(fmt::sprintf("vol%d",i),0); + float sysPan=settings.initialSys.getFloat(fmt::sprintf("pan%d",i),0); + float sysPanFR=settings.initialSys.getFloat(fmt::sprintf("fr%d",i),0); + + sysCount=i+1; + + //bool doRemove=false; + bool doInvert=(sysVol<0); + float vol=fabs(sysVol); + ImGui::PushID(i); + + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize("Invert").x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x); + if (ImGui::BeginCombo("##System",getSystemName(sysID))) { + for (int j=0; availableSystems[j]; j++) { + if (ImGui::Selectable(getSystemName((DivSystem)availableSystems[j]),sysID==availableSystems[j])) { + sysID=(DivSystem)availableSystems[j]; + settings.initialSys.set(fmt::sprintf("id%d",i),(int)e->systemToFileFur(sysID)); + settings.initialSys.set(fmt::sprintf("flags%d",i),""); + } + } + ImGui::EndCombo(); + } + + ImGui::SameLine(); + if (ImGui::Checkbox("Invert",&doInvert)) { + sysVol=-sysVol; + settings.initialSys.set(fmt::sprintf("vol%d",i),sysVol); + } + ImGui::SameLine(); + //ImGui::BeginDisabled(settings.initialSys.size()<=4); + if (ImGui::Button(ICON_FA_MINUS "##InitSysRemove")) { + doRemove=i; + } + //ImGui::EndDisabled(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (CWSliderFloat("Volume",&vol,0.0f,3.0f)) { + if (doInvert) { + if (vol<0.0001) vol=0.0001; + } + if (vol<0) vol=0; + if (vol>10) vol=10; + sysVol=doInvert?-vol:vol; + settings.initialSys.set(fmt::sprintf("vol%d",i),(float)sysVol); + } rightClickable + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (CWSliderFloat("Panning",&sysPan,-1.0f,1.0f)) { + if (sysPan<-1.0f) sysPan=-1.0f; + if (sysPan>1.0f) sysPan=1.0f; + settings.initialSys.set(fmt::sprintf("pan%d",i),(float)sysPan); + } rightClickable + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (CWSliderFloat("Front/Rear",&sysPanFR,-1.0f,1.0f)) { + if (sysPanFR<-1.0f) sysPanFR=-1.0f; + if (sysPanFR>1.0f) sysPanFR=1.0f; + settings.initialSys.set(fmt::sprintf("fr%d",i),(float)sysPanFR); + } rightClickable + + // oh please MSVC don't cry + if (ImGui::TreeNode("Configure")) { + String sysFlagsS=settings.initialSys.getString(fmt::sprintf("flags%d",i),""); + DivConfig sysFlags; + sysFlags.loadFromBase64(sysFlagsS.c_str()); + if (drawSysConf(-1,sysID,sysFlags,false)) { + settings.initialSys.set(fmt::sprintf("flags%d",i),sysFlags.toBase64()); + } + ImGui::TreePop(); + } + + ImGui::PopID(); + } + + if (doRemove>=0 && sysCount>1) { + for (int i=doRemove; isystemToFileFur(DIV_SYSTEM_YM2612)); + settings.initialSys.set(fmt::sprintf("vol%d",sysCount),1.0f); + settings.initialSys.set(fmt::sprintf("pan%d",sysCount),0.0f); + settings.initialSys.set(fmt::sprintf("fr%d",sysCount),0.0f); + settings.initialSys.set(fmt::sprintf("flags%d",sysCount),""); + } + + ImGui::Text("When creating new song:"); + if (ImGui::RadioButton("Display system preset selector##NSB0",settings.newSongBehavior==0)) { + settings.newSongBehavior=0; + } + if (ImGui::RadioButton("Start with initial system##NSB1",settings.newSongBehavior==1)) { + settings.newSongBehavior=1; + } + + bool restartOnFlagChangeB=settings.restartOnFlagChange; + if (ImGui::Checkbox("Restart song when changing chip properties",&restartOnFlagChangeB)) { + settings.restartOnFlagChange=restartOnFlagChangeB; + } + + // SUBSECTION START-UP + CONFIG_SUBSECTION("Start-up"); + ImGui::Text("Play intro on start-up:"); + if (ImGui::RadioButton("No##pis0",settings.alwaysPlayIntro==0)) { + settings.alwaysPlayIntro=0; + } + if (ImGui::RadioButton("Short##pis1",settings.alwaysPlayIntro==1)) { + settings.alwaysPlayIntro=1; + } + if (ImGui::RadioButton("Full (short when loading song)##pis2",settings.alwaysPlayIntro==2)) { + settings.alwaysPlayIntro=2; + } + if (ImGui::RadioButton("Full (always)##pis3",settings.alwaysPlayIntro==3)) { + settings.alwaysPlayIntro=3; + } + + bool disableFadeInB=settings.disableFadeIn; + if (ImGui::Checkbox("Disable fade-in during start-up",&disableFadeInB)) { + settings.disableFadeIn=disableFadeInB; + } + + bool partyTimeB=settings.partyTime; + if (ImGui::Checkbox("About screen party time",&partyTimeB)) { + settings.partyTime=partyTimeB; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("Warning: may cause epileptic seizures."); + } + + // SUBSECTION BEHAVIOR + CONFIG_SUBSECTION("Behavior"); + bool blankInsB=settings.blankIns; + if (ImGui::Checkbox("New instruments are blank",&blankInsB)) { + settings.blankIns=blankInsB; + } + + END_SECTION; + } + CONFIG_SECTION("Audio/MIDI") { + // SUBSECTION OUTPUT + CONFIG_SUBSECTION("Output"); + + // SUBSECTION MIXING + CONFIG_SUBSECTION("Mixing"); + + // SUBSECTION METRONOME + CONFIG_SUBSECTION("Metronome"); + + // SUBSECTION MIDI + CONFIG_SUBSECTION("MIDI"); + + END_SECTION; + } + CONFIG_SECTION("Emulation") { + // SUBSECTION LAYOUT + CONFIG_SUBSECTION("Cores"); + END_SECTION; + } + CONFIG_SECTION("Keyboard") { + // SUBSECTION LAYOUT + CONFIG_SUBSECTION("Keyboard"); + END_SECTION; + } + CONFIG_SECTION("Interface") { + // SUBSECTION LAYOUT + CONFIG_SUBSECTION("Layout"); + + // SUBSECTION CLICKING + CONFIG_SUBSECTION("Clicking"); + + // SUBSECTION CURSOR: EDIT + CONFIG_SUBSECTION("Cursor: Edit"); + + // SUBSECTION CURSOR: MOVE + CONFIG_SUBSECTION("Cursor: Move"); + + // SUBSECTION SCROLLING + CONFIG_SUBSECTION("Scrolling"); + + END_SECTION; + } + CONFIG_SECTION("Appearance") { + // SUBSECTION INTERFACE + CONFIG_SUBSECTION("Interface"); + + // SUBSECTION BARS + CONFIG_SUBSECTION("Bars"); + + // SUBSECTION ORDERS + CONFIG_SUBSECTION("Orders"); + + // SUBSECTION PATTERN + CONFIG_SUBSECTION("Pattern"); + + // SUBSECTION CHANNEL + CONFIG_SUBSECTION("Channel"); + + // SUBSECTION ASSETS + CONFIG_SUBSECTION("Assets"); + + // SUBSECTION MACRO EDITOR + CONFIG_SUBSECTION("Macro Editor"); + + // SUBSECTION WAVE EDITOR + CONFIG_SUBSECTION("Wave Editor"); + + // SUBSECTION FM EDITOR + CONFIG_SUBSECTION("FM Editor"); + + // SUBSECTION STATISTICS + CONFIG_SUBSECTION("Statistics"); + + // SUBSECTION OSCILLOSCOPE + CONFIG_SUBSECTION("Oscilloscope"); + + // SUBSECTION WINDOWS + CONFIG_SUBSECTION("Windows"); + + // SUBSECTION COLOR + CONFIG_SUBSECTION("Color"); + + END_SECTION; + } + + // OLD SETTINGS HERE + if (ImGui::BeginTabItem("General (OLD)")) { ImVec2 settingsViewSize=ImGui::GetContentRegionAvail(); settingsViewSize.y-=ImGui::GetFrameHeight()+ImGui::GetStyle().WindowPadding.y; if (ImGui::BeginChild("SettingsView",settingsViewSize)) { @@ -306,216 +792,6 @@ void FurnaceGUI::drawSettings() { ImGui::Separator(); - ImGui::Text("Initial system:"); - ImGui::SameLine(); - if (ImGui::Button("Current system")) { - settings.initialSys.clear(); - for (int i=0; isong.systemLen; i++) { - settings.initialSys.set(fmt::sprintf("id%d",i),e->systemToFileFur(e->song.system[i])); - settings.initialSys.set(fmt::sprintf("vol%d",i),(float)e->song.systemVol[i]); - settings.initialSys.set(fmt::sprintf("pan%d",i),(float)e->song.systemPan[i]); - settings.initialSys.set(fmt::sprintf("fr%d",i),(float)e->song.systemPanFR[i]); - settings.initialSys.set(fmt::sprintf("flags%d",i),e->song.systemFlags[i].toBase64()); - } - settings.initialSysName=e->song.systemName; - } - ImGui::SameLine(); - if (ImGui::Button("Randomize")) { - settings.initialSys.clear(); - int howMany=1+rand()%3; - int totalAvailSys=0; - for (totalAvailSys=0; availableSystems[totalAvailSys]; totalAvailSys++); - if (totalAvailSys>0) { - for (int i=0; isystemToFileFur((DivSystem)availableSystems[rand()%totalAvailSys])); - settings.initialSys.set(fmt::sprintf("vol%d",i),1.0f); - settings.initialSys.set(fmt::sprintf("pan%d",i),0.0f); - settings.initialSys.set(fmt::sprintf("fr%d",i),0.0f); - settings.initialSys.set(fmt::sprintf("flags%d",i),""); - } - } else { - settings.initialSys.set("id0",e->systemToFileFur(DIV_SYSTEM_DUMMY)); - settings.initialSys.set("vol0",1.0f); - settings.initialSys.set("pan0",0.0f); - settings.initialSys.set("fr0",0.0f); - settings.initialSys.set("flags0",""); - howMany=1; - } - // randomize system name - std::vector wordPool[6]; - for (int i=0; isystemFromFileFur(settings.initialSys.getInt(fmt::sprintf("id%d",i),0)); - String sName=e->getSystemName(sysID); - String nameWord; - sName+=" "; - for (char& i: sName) { - if (i==' ') { - if (nameWord!="") { - wordPool[wpPos++].push_back(nameWord); - if (wpPos>=6) break; - nameWord=""; - } - } else { - nameWord+=i; - } - } - } - settings.initialSysName=""; - for (int i=0; i<6; i++) { - if (wordPool[i].empty()) continue; - settings.initialSysName+=wordPool[i][rand()%wordPool[i].size()]; - settings.initialSysName+=" "; - } - } - ImGui::SameLine(); - if (ImGui::Button("Reset to defaults")) { - settings.initialSys.clear(); - settings.initialSys.set("id0",e->systemToFileFur(DIV_SYSTEM_YM2612)); - settings.initialSys.set("vol0",1.0f); - settings.initialSys.set("pan0",0.0f); - settings.initialSys.set("fr0",0.0f); - settings.initialSys.set("flags0",""); - settings.initialSys.set("id1",e->systemToFileFur(DIV_SYSTEM_SMS)); - settings.initialSys.set("vol1",0.5f); - settings.initialSys.set("pan1",0.0f); - settings.initialSys.set("fr1",0.0f); - settings.initialSys.set("flags1",""); - settings.initialSysName="Sega Genesis/Mega Drive"; - } - - ImGui::Text("Name"); - ImGui::SameLine(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - ImGui::InputText("##InitSysName",&settings.initialSysName); - - int sysCount=0; - int doRemove=-1; - for (size_t i=0; settings.initialSys.getInt(fmt::sprintf("id%d",i),0); i++) { - DivSystem sysID=e->systemFromFileFur(settings.initialSys.getInt(fmt::sprintf("id%d",i),0)); - float sysVol=settings.initialSys.getFloat(fmt::sprintf("vol%d",i),0); - float sysPan=settings.initialSys.getFloat(fmt::sprintf("pan%d",i),0); - float sysPanFR=settings.initialSys.getFloat(fmt::sprintf("fr%d",i),0); - - sysCount=i+1; - - //bool doRemove=false; - bool doInvert=(sysVol<0); - float vol=fabs(sysVol); - ImGui::PushID(i); - - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize("Invert").x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x); - if (ImGui::BeginCombo("##System",getSystemName(sysID))) { - for (int j=0; availableSystems[j]; j++) { - if (ImGui::Selectable(getSystemName((DivSystem)availableSystems[j]),sysID==availableSystems[j])) { - sysID=(DivSystem)availableSystems[j]; - settings.initialSys.set(fmt::sprintf("id%d",i),(int)e->systemToFileFur(sysID)); - settings.initialSys.set(fmt::sprintf("flags%d",i),""); - } - } - ImGui::EndCombo(); - } - - ImGui::SameLine(); - if (ImGui::Checkbox("Invert",&doInvert)) { - sysVol=-sysVol; - settings.initialSys.set(fmt::sprintf("vol%d",i),sysVol); - } - ImGui::SameLine(); - //ImGui::BeginDisabled(settings.initialSys.size()<=4); - if (ImGui::Button(ICON_FA_MINUS "##InitSysRemove")) { - doRemove=i; - } - //ImGui::EndDisabled(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (CWSliderFloat("Volume",&vol,0.0f,3.0f)) { - if (doInvert) { - if (vol<0.0001) vol=0.0001; - } - if (vol<0) vol=0; - if (vol>10) vol=10; - sysVol=doInvert?-vol:vol; - settings.initialSys.set(fmt::sprintf("vol%d",i),(float)sysVol); - } rightClickable - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (CWSliderFloat("Panning",&sysPan,-1.0f,1.0f)) { - if (sysPan<-1.0f) sysPan=-1.0f; - if (sysPan>1.0f) sysPan=1.0f; - settings.initialSys.set(fmt::sprintf("pan%d",i),(float)sysPan); - } rightClickable - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (CWSliderFloat("Front/Rear",&sysPanFR,-1.0f,1.0f)) { - if (sysPanFR<-1.0f) sysPanFR=-1.0f; - if (sysPanFR>1.0f) sysPanFR=1.0f; - settings.initialSys.set(fmt::sprintf("fr%d",i),(float)sysPanFR); - } rightClickable - - // oh please MSVC don't cry - if (ImGui::TreeNode("Configure")) { - String sysFlagsS=settings.initialSys.getString(fmt::sprintf("flags%d",i),""); - DivConfig sysFlags; - sysFlags.loadFromBase64(sysFlagsS.c_str()); - if (drawSysConf(-1,sysID,sysFlags,false)) { - settings.initialSys.set(fmt::sprintf("flags%d",i),sysFlags.toBase64()); - } - ImGui::TreePop(); - } - - ImGui::PopID(); - } - - if (doRemove>=0 && sysCount>1) { - for (int i=doRemove; isystemToFileFur(DIV_SYSTEM_YM2612)); - settings.initialSys.set(fmt::sprintf("vol%d",sysCount),1.0f); - settings.initialSys.set(fmt::sprintf("pan%d",sysCount),0.0f); - settings.initialSys.set(fmt::sprintf("fr%d",sysCount),0.0f); - settings.initialSys.set(fmt::sprintf("flags%d",sysCount),""); - } - - ImGui::Separator(); - - ImGui::Text("Play intro on start-up:"); - if (ImGui::RadioButton("No##pis0",settings.alwaysPlayIntro==0)) { - settings.alwaysPlayIntro=0; - } - if (ImGui::RadioButton("Short##pis1",settings.alwaysPlayIntro==1)) { - settings.alwaysPlayIntro=1; - } - if (ImGui::RadioButton("Full (short when loading song)##pis2",settings.alwaysPlayIntro==2)) { - settings.alwaysPlayIntro=2; - } - if (ImGui::RadioButton("Full (always)##pis3",settings.alwaysPlayIntro==3)) { - settings.alwaysPlayIntro=3; - } - - ImGui::Text("When creating new song:"); - if (ImGui::RadioButton("Display system preset selector##NSB0",settings.newSongBehavior==0)) { - settings.newSongBehavior=0; - } - if (ImGui::RadioButton("Start with initial system##NSB1",settings.newSongBehavior==1)) { - settings.newSongBehavior=1; - } ImGui::Separator(); @@ -612,56 +888,13 @@ void FurnaceGUI::drawSettings() { settings.insFocusesPattern=insFocusesPatternB; } - bool restartOnFlagChangeB=settings.restartOnFlagChange; - if (ImGui::Checkbox("Restart song when changing chip properties",&restartOnFlagChangeB)) { - settings.restartOnFlagChange=restartOnFlagChangeB; - } - - bool sysFileDialogB=settings.sysFileDialog; - if (ImGui::Checkbox("Use system file picker",&sysFileDialogB)) { - settings.sysFileDialog=sysFileDialogB; - } - bool moveWindowTitleB=settings.moveWindowTitle; if (ImGui::Checkbox("Only allow window movement when clicking on title bar",&moveWindowTitleB)) { settings.moveWindowTitle=moveWindowTitleB; applyUISettings(false); } - bool eventDelayB=settings.eventDelay; - if (ImGui::Checkbox("Enable event delay",&eventDelayB)) { - settings.eventDelay=eventDelayB; - applyUISettings(false); - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("may cause issues with high-polling-rate mice when previewing notes."); - } - - bool powerSaveB=settings.powerSave; - if (ImGui::Checkbox("Power-saving mode",&powerSaveB)) { - settings.powerSave=powerSaveB; - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("saves power by lowering the frame rate to 2fps when idle.\nmay cause issues under Mesa drivers!"); - } - - bool renderClearPosB=settings.renderClearPos; - if (ImGui::Checkbox("Late render clear",&renderClearPosB)) { - settings.renderClearPos=renderClearPosB; - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("calls rend->clear() after rend->present(). might reduce UI latency by one frame in some drivers."); - } - #ifndef IS_MOBILE - bool noThreadedInputB=settings.noThreadedInput; - if (ImGui::Checkbox("Disable threaded input (restart after changing!)",&noThreadedInputB)) { - settings.noThreadedInput=noThreadedInputB; - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("threaded input processes key presses for note preview on a separate thread (on supported platforms), which reduces latency.\nhowever, crashes have been reported when threaded input is on. enable this option if that is the case."); - } - bool saveWindowPosB=settings.saveWindowPos; if (ImGui::Checkbox("Remember window position",&saveWindowPosB)) { settings.saveWindowPos=saveWindowPosB; @@ -671,40 +904,6 @@ void FurnaceGUI::drawSettings() { } #endif - bool blankInsB=settings.blankIns; - if (ImGui::Checkbox("New instruments are blank",&blankInsB)) { - settings.blankIns=blankInsB; - } - - bool noDMFCompatB=settings.noDMFCompat; - if (ImGui::Checkbox("Don't apply compatibility flags when loading .dmf",&noDMFCompatB)) { - settings.noDMFCompat=noDMFCompatB; - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("do not report any issues arising from the use of this option!"); - } - - bool saveUnusedPatternsB=settings.saveUnusedPatterns; - if (ImGui::Checkbox("Save unused patterns",&saveUnusedPatternsB)) { - settings.saveUnusedPatterns=saveUnusedPatternsB; - } - - bool compressB=settings.compress; - if (ImGui::Checkbox("Compress when saving",&compressB)) { - settings.compress=compressB; - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("use zlib to compress saved songs."); - } - - bool newPatternFormatB=settings.newPatternFormat; - if (ImGui::Checkbox("Use new pattern format when saving",&newPatternFormatB)) { - settings.newPatternFormat=newPatternFormatB; - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("use a packed format which saves space when saving songs.\ndisable if you need compatibility with older Furnace and/or tools\nwhich do not support this format."); - } - bool cursorFollowsOrderB=settings.cursorFollowsOrder; if (ImGui::Checkbox("Cursor follows current order when moving it",&cursorFollowsOrderB)) { settings.cursorFollowsOrder=cursorFollowsOrderB; @@ -713,24 +912,6 @@ void FurnaceGUI::drawSettings() { ImGui::SetTooltip("applies when playback is stopped."); } - ImGui::Text("Audio export loop/fade out time:"); - if (ImGui::RadioButton("Set to these values on start-up:##fot0",settings.persistFadeOut==0)) { - settings.persistFadeOut=0; - } - ImGui::BeginDisabled(settings.persistFadeOut); - if (ImGui::InputInt("Loops",&settings.exportLoops,1,2)) { - if (exportLoops<0) exportLoops=0; - exportLoops=settings.exportLoops; - } - if (ImGui::InputDouble("Fade out (seconds)",&settings.exportFadeOut,1.0,2.0,"%.1f")) { - if (exportFadeOut<0.0) exportFadeOut=0.0; - exportFadeOut=settings.exportFadeOut; - } - ImGui::EndDisabled(); - if (ImGui::RadioButton("Remember last values##fot1",settings.persistFadeOut==1)) { - settings.persistFadeOut=1; - } - ImGui::Text("Note preview behavior:"); if (ImGui::RadioButton("Never##npb0",settings.notePreviewBehavior==0)) { settings.notePreviewBehavior=0; @@ -815,7 +996,7 @@ void FurnaceGUI::drawSettings() { ImGui::EndChild(); ImGui::EndTabItem(); } - if (ImGui::BeginTabItem("Audio/MIDI")) { + if (ImGui::BeginTabItem("Audio/MIDI (OLD)")) { ImVec2 settingsViewSize=ImGui::GetContentRegionAvail(); settingsViewSize.y-=ImGui::GetFrameHeight()+ImGui::GetStyle().WindowPadding.y; if (ImGui::BeginChild("SettingsView",settingsViewSize)) { @@ -1271,7 +1452,7 @@ void FurnaceGUI::drawSettings() { ImGui::EndChild(); ImGui::EndTabItem(); } - if (ImGui::BeginTabItem("Emulation")) { + if (ImGui::BeginTabItem("Emulation (OLD)")) { ImVec2 settingsViewSize=ImGui::GetContentRegionAvail(); settingsViewSize.y-=ImGui::GetFrameHeight()+ImGui::GetStyle().WindowPadding.y; if (ImGui::BeginChild("SettingsView",settingsViewSize)) { @@ -1343,49 +1524,10 @@ void FurnaceGUI::drawSettings() { ImGui::EndChild(); ImGui::EndTabItem(); } - if (ImGui::BeginTabItem("Appearance")) { + if (ImGui::BeginTabItem("Appearance (OLD)")) { ImVec2 settingsViewSize=ImGui::GetContentRegionAvail(); settingsViewSize.y-=ImGui::GetFrameHeight()+ImGui::GetStyle().WindowPadding.y; if (ImGui::BeginChild("SettingsView",settingsViewSize)) { - String curRenderBackend=settings.renderBackend.empty()?GUI_BACKEND_DEFAULT_NAME:settings.renderBackend; - if (ImGui::BeginCombo("Render backend",curRenderBackend.c_str())) { -#ifdef HAVE_RENDER_SDL - if (ImGui::Selectable("SDL Renderer",curRenderBackend=="SDL")) { - settings.renderBackend="SDL"; - } -#endif -#ifdef HAVE_RENDER_DX11 - if (ImGui::Selectable("DirectX 11",curRenderBackend=="DirectX 11")) { - settings.renderBackend="DirectX 11"; - } -#endif -#ifdef HAVE_RENDER_GL - if (ImGui::Selectable("OpenGL",curRenderBackend=="OpenGL")) { - settings.renderBackend="OpenGL"; - } -#endif - ImGui::EndCombo(); - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("you may need to restart Furnace for this setting to take effect."); - } - if (curRenderBackend=="SDL") { - if (ImGui::BeginCombo("Render driver",settings.renderDriver.empty()?"Automatic":settings.renderDriver.c_str())) { - if (ImGui::Selectable("Automatic",settings.renderDriver.empty())) { - settings.renderDriver=""; - } - for (String& i: availRenderDrivers) { - if (ImGui::Selectable(i.c_str(),i==settings.renderDriver)) { - settings.renderDriver=i; - } - } - ImGui::EndCombo(); - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("you may need to restart Furnace for this setting to take effect."); - } - } - bool dpiScaleAuto=(settings.dpiScale<0.5f); if (ImGui::Checkbox("Automatic UI scaling factor",&dpiScaleAuto)) { if (dpiScaleAuto) { @@ -1487,10 +1629,7 @@ void FurnaceGUI::drawSettings() { ImGui::Separator(); - if (ImGui::InputInt("Number of recent files",&settings.maxRecentFile)) { - if (settings.maxRecentFile<0) settings.maxRecentFile=0; - if (settings.maxRecentFile>30) settings.maxRecentFile=30; - } + ImGui::Separator(); @@ -1827,14 +1966,6 @@ void FurnaceGUI::drawSettings() { settings.ordersCursor=ordersCursorB; } - bool partyTimeB=settings.partyTime; - if (ImGui::Checkbox("About screen party time",&partyTimeB)) { - settings.partyTime=partyTimeB; - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("Warning: may cause epileptic seizures."); - } - ImGui::Separator(); bool waveLayoutB=settings.waveLayout; @@ -1867,11 +1998,6 @@ void FurnaceGUI::drawSettings() { settings.frameBorders=frameBordersB; } - bool disableFadeInB=settings.disableFadeIn; - if (ImGui::Checkbox("Disable fade-in during start-up",&disableFadeInB)) { - settings.disableFadeIn=disableFadeInB; - } - ImGui::Separator(); ImGui::Text("Oscilloscope settings:"); @@ -2241,7 +2367,7 @@ void FurnaceGUI::drawSettings() { ImGui::EndChild(); ImGui::EndTabItem(); } - if (ImGui::BeginTabItem("Keyboard")) { + if (ImGui::BeginTabItem("Keyboard (OLD)")) { ImVec2 settingsViewSize=ImGui::GetContentRegionAvail(); settingsViewSize.y-=ImGui::GetFrameHeight()+ImGui::GetStyle().WindowPadding.y; if (ImGui::BeginChild("SettingsView",settingsViewSize)) { @@ -2606,7 +2732,7 @@ void FurnaceGUI::drawSettings() { // "Nice Amiga cover of the song!" - enables hidden systems (YMU759/SoundUnit/Dummy) // "42 63" - enables all instrument types // "????" - enables stuff - if (ImGui::BeginTabItem("Cheat Codes")) { + if (ImGui::BeginTabItem("Cheat Codes (OLD)")) { ImVec2 settingsViewSize=ImGui::GetContentRegionAvail(); settingsViewSize.y-=ImGui::GetFrameHeight()+ImGui::GetStyle().WindowPadding.y; if (ImGui::BeginChild("SettingsView",settingsViewSize)) { From ac011a0fa111e670ecf419e4b9cab3775cc6d136 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 29 Jul 2023 05:39:28 -0500 Subject: [PATCH 30/87] GUI: fix sort button in effect list --- src/gui/effectList.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/gui/effectList.cpp b/src/gui/effectList.cpp index 0be3d942a..6b0ee23f3 100644 --- a/src/gui/effectList.cpp +++ b/src/gui/effectList.cpp @@ -1,6 +1,7 @@ #include "gui.h" #include "guiConst.h" #include +#include "IconsFontAwesome4.h" void FurnaceGUI::drawEffectList() { if (nextWindow==GUI_WINDOW_EFFECT_LIST) { @@ -11,9 +12,14 @@ void FurnaceGUI::drawEffectList() { if (!effectListOpen) return; ImGui::SetNextWindowSizeConstraints(ImVec2(60.0f*dpiScale,20.0f*dpiScale),ImVec2(canvasW,canvasH)); if (ImGui::Begin("Effect List",&effectListOpen,globalWinFlags)) { - ImGui::Text("Chip at cursor: %s",e->getSystemName(e->sysOfChan[cursor.xCoarse])); - ImGui::SameLine(); - if (ImGui::Button("Sort Effects")) ImGui::OpenPopup("effectSort"); + float availB=ImGui::GetContentRegionAvail().x-ImGui::GetFrameHeightWithSpacing(); + if (availB>0) { + ImGui::PushTextWrapPos(availB); + ImGui::TextWrapped("Chip at cursor: %s",e->getSystemName(e->sysOfChan[cursor.xCoarse])); + ImGui::PopTextWrapPos(); + ImGui::SameLine(); + } + ImGui::Button(ICON_FA_BARS "##SortEffects"); if (ImGui::BeginPopupContextItem("effectSort")) { for (int i=0; i<9; i++) { ImGui::PushStyleColor(ImGuiCol_Text,uiColors[fxColorsSort[i]]); From 98a6080ca1e5d80d3b35f5b4eff62b429fcc6218 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 29 Jul 2023 13:09:35 -0500 Subject: [PATCH 31/87] fix system fmt, part 2 thanks r-c-f --- src/engine/zsmOps.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/zsmOps.cpp b/src/engine/zsmOps.cpp index b26e7a273..92b8aecb8 100644 --- a/src/engine/zsmOps.cpp +++ b/src/engine/zsmOps.cpp @@ -52,7 +52,7 @@ SafeWriter* DivEngine::saveZSM(unsigned int zsmrate, bool loop) { break; default: IGNORED++; - logD("Ignoring chip %d systemID %d",i,song.system[i]); + logD("Ignoring chip %d systemID %d",i,(int)song.system[i]); break; } } From b83d8f3198e83ddc4bea710d3ac23eb6603975f8 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 29 Jul 2023 13:10:59 -0500 Subject: [PATCH 32/87] fix system fmt, part 3 --- src/engine/sample.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/sample.cpp b/src/engine/sample.cpp index d88bf4bc9..437b8bbcc 100644 --- a/src/engine/sample.cpp +++ b/src/engine/sample.cpp @@ -207,7 +207,7 @@ DivDataErrors DivSample::readSampleData(SafeReader& reader, short version) { // render data if (depth!=DIV_SAMPLE_DEPTH_8BIT && depth!=DIV_SAMPLE_DEPTH_16BIT) { - logW("sample depth is wrong! (%d)",depth); + logW("sample depth is wrong! (%d)",(int)depth); depth=DIV_SAMPLE_DEPTH_16BIT; } samples=(double)samples/samplePitchesSD[pitch]; From bc7e267a85fff685dd55a155b72a0ab2ac5440e9 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 29 Jul 2023 13:22:05 -0500 Subject: [PATCH 33/87] GUI: BeginPopupContextItem fix --- src/gui/effectList.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/effectList.cpp b/src/gui/effectList.cpp index 6b0ee23f3..2d1bd1f1e 100644 --- a/src/gui/effectList.cpp +++ b/src/gui/effectList.cpp @@ -20,7 +20,7 @@ void FurnaceGUI::drawEffectList() { ImGui::SameLine(); } ImGui::Button(ICON_FA_BARS "##SortEffects"); - if (ImGui::BeginPopupContextItem("effectSort")) { + if (ImGui::BeginPopupContextItem("effectSort",ImGuiPopupFlags_MouseButtonLeft)) { for (int i=0; i<9; i++) { ImGui::PushStyleColor(ImGuiCol_Text,uiColors[fxColorsSort[i]]); ImGui::Checkbox(fxColorsNames[i],&effectsShow[i]); From 97d44d9a26d41f4a4cf9687b0a4771b93093a996 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 29 Jul 2023 13:43:49 -0500 Subject: [PATCH 34/87] GUI: Namco 163 offset -> position --- doc/4-instrument/n163.md | 6 +++--- src/gui/insEdit.cpp | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/4-instrument/n163.md b/doc/4-instrument/n163.md index 2e37b0d5f..b12bfe354 100644 --- a/doc/4-instrument/n163.md +++ b/doc/4-instrument/n163.md @@ -5,11 +5,11 @@ The Namco 163 instrument editor consists of two tabs: "Namco 163" for control of ## Namco 163 - **Load waveform**: if enabled, a waveform will be loaded when this instrument plays. - - if it isn't then only the offset/length change. + - if it isn't then only the position/length change. - **Waveform**: determines the waveform that will be loaded. - only appears when Load waveform is enabled. -- **Per-channel wave offset/length**: when enabled, the offset/length settings are split per channel. -- **Offset**: determines the waveform position in RAM. +- **Per-channel wave position/length**: when enabled, the position/length settings are split per channel. +- **Position**: determines the waveform position in RAM. - **Length**: determines the waveform length in RAM. ## Macros diff --git a/src/gui/insEdit.cpp b/src/gui/insEdit.cpp index a490b0a6e..e5f60d86b 100644 --- a/src/gui/insEdit.cpp +++ b/src/gui/insEdit.cpp @@ -4685,7 +4685,7 @@ void FurnaceGUI::drawInsEdit() { ImGui::Separator(); - P(ImGui::Checkbox("Per-channel wave offset/length",&ins->n163.perChanPos)); + P(ImGui::Checkbox("Per-channel wave position/length",&ins->n163.perChanPos)); if (ins->n163.perChanPos) { if (ImGui::BeginTable("N1PerChPos",3)) { @@ -4697,7 +4697,7 @@ void FurnaceGUI::drawInsEdit() { ImGui::TableNextColumn(); ImGui::Text("Ch"); ImGui::TableNextColumn(); - ImGui::Text("Offset"); + ImGui::Text("Position"); ImGui::TableNextColumn(); ImGui::Text("Length"); @@ -4729,7 +4729,7 @@ void FurnaceGUI::drawInsEdit() { ImGui::EndTable(); } } else { - if (ImGui::InputInt("Offset##WAVEPOS",&ins->n163.wavePos,1,16)) { PARAMETER + if (ImGui::InputInt("Position##WAVEPOS",&ins->n163.wavePos,1,16)) { PARAMETER if (ins->n163.wavePos<0) ins->n163.wavePos=0; if (ins->n163.wavePos>255) ins->n163.wavePos=255; } From 233431c2ccd12096a53972b7e9fa17448cd9780c Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 29 Jul 2023 14:17:04 -0500 Subject: [PATCH 35/87] YM2612: implement 30xx on ExtCh --- src/engine/platform/genesisext.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/engine/platform/genesisext.cpp b/src/engine/platform/genesisext.cpp index d4ac27603..1a90adf92 100644 --- a/src/engine/platform/genesisext.cpp +++ b/src/engine/platform/genesisext.cpp @@ -19,6 +19,7 @@ #include "genesisext.h" #include "../engine.h" +#include "../../ta-log.h" #include #define CHIP_FREQBASE fmFreqBase @@ -576,6 +577,7 @@ void DivPlatformGenesisExt::tick(bool sysTick) { bool writeNoteOn=false; unsigned char writeMask=2; + unsigned char hardResetMask=0; if (extMode) for (int i=0; i<4; i++) { if (opChan[i].freqChanged) { if (parent->song.linearPitch==2) { @@ -603,8 +605,13 @@ void DivPlatformGenesisExt::tick(bool sysTick) { writeNoteOn=true; if (opChan[i].mask) { writeMask|=1<<(4+i); + if (opChan[i].hardReset) { + hardResetMask|=1<<(4+i); + } + } + if (!opChan[i].hardReset) { + opChan[i].keyOn=false; } - opChan[i].keyOn=false; } } @@ -638,7 +645,9 @@ void DivPlatformGenesisExt::tick(bool sysTick) { (writeMask&0x40)?'3':'-', (writeMask&0x80)?'4':'-' );*/ + writeMask^=hardResetMask; immWrite(0x28,writeMask); + writeMask^=hardResetMask; // hard reset handling if (mustHardReset) { @@ -648,9 +657,11 @@ void DivPlatformGenesisExt::tick(bool sysTick) { for (int i=0; i<4; i++) { if (opChan[i].keyOn && opChan[i].hardReset) { // restore SL/RR + logV("eco: %d",extChanOffs); unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[i]; DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[i]; immWrite(baseAddr+ADDR_SL_RR,(op.rr&15)|(op.sl<<4)); + opChan[i].keyOn=false; } } immWrite(0x28,writeMask); From 41c41859ed2f522f02a5ba7d03a082ddc4c07097 Mon Sep 17 00:00:00 2001 From: freq-mod <32672779+freq-mod@users.noreply.github.com> Date: Sat, 29 Jul 2023 23:04:55 +0200 Subject: [PATCH 36/87] remove redundant SNES entry --- doc/6-sample/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/6-sample/README.md b/doc/6-sample/README.md index 637884370..66d35479a 100644 --- a/doc/6-sample/README.md +++ b/doc/6-sample/README.md @@ -32,7 +32,6 @@ the following sound chips have sample support: - Ensoniq OTTO/ES5506 - Yamaha PCMD8/YMZ280B - MMC5 (last channel only) -- SNES/S-DSP ## compatible sample mode From 423f2f50697b25a0267b69e8b86c5e359bb0d32d Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 29 Jul 2023 16:04:39 -0500 Subject: [PATCH 37/87] OPN/A/B: implement 30xx on ExtCh issue #1113 --- src/engine/platform/genesisext.cpp | 15 ------------ src/engine/platform/ym2203ext.cpp | 39 +++++++++++++++++++++++++++++- src/engine/platform/ym2608ext.cpp | 39 +++++++++++++++++++++++++++++- src/engine/platform/ym2610bext.cpp | 39 +++++++++++++++++++++++++++++- src/engine/platform/ym2610ext.cpp | 39 +++++++++++++++++++++++++++++- 5 files changed, 152 insertions(+), 19 deletions(-) diff --git a/src/engine/platform/genesisext.cpp b/src/engine/platform/genesisext.cpp index 1a90adf92..7e9278daa 100644 --- a/src/engine/platform/genesisext.cpp +++ b/src/engine/platform/genesisext.cpp @@ -477,13 +477,6 @@ void DivPlatformGenesisExt::tick(bool sysTick) { if (chan[csmChan].active) { // CSM writeMask^=0xf0; } - /*printf( - "Mask: %c %c %c %c\n", - (writeMask&0x10)?'1':'-', - (writeMask&0x20)?'2':'-', - (writeMask&0x40)?'3':'-', - (writeMask&0x80)?'4':'-' - );*/ immWrite(0x28,writeMask); } } @@ -638,13 +631,6 @@ void DivPlatformGenesisExt::tick(bool sysTick) { if (chan[csmChan].active) { // CSM writeMask^=0xf0; } - /*printf( - "Mask: %c %c %c %c\n", - (writeMask&0x10)?'1':'-', - (writeMask&0x20)?'2':'-', - (writeMask&0x40)?'3':'-', - (writeMask&0x80)?'4':'-' - );*/ writeMask^=hardResetMask; immWrite(0x28,writeMask); writeMask^=hardResetMask; @@ -657,7 +643,6 @@ void DivPlatformGenesisExt::tick(bool sysTick) { for (int i=0; i<4; i++) { if (opChan[i].keyOn && opChan[i].hardReset) { // restore SL/RR - logV("eco: %d",extChanOffs); unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[i]; DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[i]; immWrite(baseAddr+ADDR_SL_RR,(op.rr&15)|(op.sl<<4)); diff --git a/src/engine/platform/ym2203ext.cpp b/src/engine/platform/ym2203ext.cpp index 6398ba7f1..8842b3cc8 100644 --- a/src/engine/platform/ym2203ext.cpp +++ b/src/engine/platform/ym2203ext.cpp @@ -355,6 +355,9 @@ int DivPlatformYM2203Ext::dispatch(DivCommand c) { } break; } + case DIV_CMD_FM_HARD_RESET: + opChan[ch].hardReset=c.value; + break; case DIV_CMD_GET_VOLMAX: return 127; break; @@ -385,6 +388,9 @@ static int opChanOffsH[4]={ }; void DivPlatformYM2203Ext::tick(bool sysTick) { + int hardResetElapsed=0; + bool mustHardReset=false; + if (extMode) { bool writeSomething=false; unsigned char writeMask=2; @@ -395,6 +401,12 @@ void DivPlatformYM2203Ext::tick(bool sysTick) { writeMask&=~(1<<(4+i)); opChan[i].keyOff=false; } + if (opChan[i].hardReset && opChan[i].keyOn) { + mustHardReset=true; + unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[i]; + immWrite(baseAddr+ADDR_SL_RR,0x0f); + hardResetElapsed++; + } } if (writeSomething) { immWrite(0x28,writeMask); @@ -491,6 +503,7 @@ void DivPlatformYM2203Ext::tick(bool sysTick) { bool writeNoteOn=false; unsigned char writeMask=2; + unsigned char hardResetMask=0; if (extMode) for (int i=0; i<4; i++) { if (opChan[i].freqChanged) { if (parent->song.linearPitch==2) { @@ -517,12 +530,36 @@ void DivPlatformYM2203Ext::tick(bool sysTick) { writeNoteOn=true; if (opChan[i].mask) { writeMask|=1<<(4+i); + if (opChan[i].hardReset) { + hardResetMask|=1<<(4+i); + } + } + if (!opChan[i].hardReset) { + opChan[i].keyOn=false; } - opChan[i].keyOn=false; } } if (writeNoteOn) { + writeMask^=hardResetMask; immWrite(0x28,writeMask); + writeMask^=hardResetMask; + + // hard reset handling + if (mustHardReset) { + for (unsigned int i=hardResetElapsed; isong.linearPitch==2) { @@ -539,12 +552,36 @@ void DivPlatformYM2608Ext::tick(bool sysTick) { writeNoteOn=true; if (opChan[i].mask) { writeMask|=1<<(4+i); + if (opChan[i].hardReset) { + hardResetMask|=1<<(4+i); + } + } + if (!opChan[i].hardReset) { + opChan[i].keyOn=false; } - opChan[i].keyOn=false; } } if (writeNoteOn) { + writeMask^=hardResetMask; immWrite(0x28,writeMask); + writeMask^=hardResetMask; + + // hard reset handling + if (mustHardReset) { + for (unsigned int i=hardResetElapsed; isong.linearPitch==2) { @@ -535,12 +548,36 @@ void DivPlatformYM2610BExt::tick(bool sysTick) { writeNoteOn=true; if (opChan[i].mask) { writeMask|=1<<(4+i); + if (opChan[i].hardReset) { + hardResetMask|=1<<(4+i); + } + } + if (!opChan[i].hardReset) { + opChan[i].keyOn=false; } - opChan[i].keyOn=false; } } if (writeNoteOn) { + writeMask^=hardResetMask; immWrite(0x28,writeMask); + writeMask^=hardResetMask; + + // hard reset handling + if (mustHardReset) { + for (unsigned int i=hardResetElapsed; isong.linearPitch==2) { @@ -535,12 +548,36 @@ void DivPlatformYM2610Ext::tick(bool sysTick) { writeNoteOn=true; if (opChan[i].mask) { writeMask|=1<<(4+i); + if (opChan[i].hardReset) { + hardResetMask|=1<<(4+i); + } + } + if (!opChan[i].hardReset) { + opChan[i].keyOn=false; } - opChan[i].keyOn=false; } } if (writeNoteOn) { + writeMask^=hardResetMask; immWrite(0x28,writeMask); + writeMask^=hardResetMask; + + // hard reset handling + if (mustHardReset) { + for (unsigned int i=hardResetElapsed; i Date: Sat, 29 Jul 2023 23:12:41 +0200 Subject: [PATCH 38/87] improve table --- doc/5-wave/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/5-wave/README.md b/doc/5-wave/README.md index 59131d39b..7c586ef78 100644 --- a/doc/5-wave/README.md +++ b/doc/5-wave/README.md @@ -2,19 +2,19 @@ Wavetable synthesizers, in context of Furnace, are sound sources that operate on extremely short n-bit PCM streams. By extremely short, no more than 256 bytes. This amount of space is nowhere near enough to store an actual sampled sound, it allows certain amount of freedom to define a waveform shape. -Each chip has its own maximum size, shown in the following table. If a larger wave is defined for these chips, it will be squashed to fit within the constraints of the chips. Some hardware doesn't work well with the wavetable synthesizer (described below); these systems are marked in the "synth?" column. +Each chip has its own maximum size, shown in the following table. If a larger wave is defined for these chips, it will be squashed to fit within the constraints of the chips. Some hardware doesn't work well with the wavetable synthesizer (described below); these systems are marked in the "notes" column. -system | width | height | synth? +system | width | height | notes --------------------|------:|:-------|:------ Bubble System | 32 | 16 | -Game Boy | 32 | 16 | +Game Boy | 32 | 16 | phase reset on waveform change (clicking) SM8521 | 32 | 16 | Namco WSG | 32 | 16 | RAM only WonderSwan | 32 | 16 | -Namco 163 | ≤128 | 16 | +Namco 163 | ≤240 | 16 | limits differ depending on channel count SNES | ≤256 | 16 | -PC Engine | 32 | 32 | -Virtual Boy | 32 | 64 | no +PC Engine | 32 | 32 | phase reset on waveform change (clicking) +Virtual Boy | 32 | 64 | wavesynth unsupported Famicom Disk System | 64 | 64 | Konami SCC | 32 | 256 | Seta X1-010 | 128 | 256 | From 1325664d25fde20ae5b94cbbc8ae2624c9a3bc55 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 29 Jul 2023 17:12:46 -0500 Subject: [PATCH 39/87] SNES: fix possible sample corruption when toggling echo --- src/engine/platform/opll.cpp | 9 +++++++++ src/engine/platform/opll.h | 1 + src/engine/platform/snes.cpp | 8 +++++--- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/engine/platform/opll.cpp b/src/engine/platform/opll.cpp index b0012c224..593b659c3 100644 --- a/src/engine/platform/opll.cpp +++ b/src/engine/platform/opll.cpp @@ -392,6 +392,15 @@ void DivPlatformOPLL::commitState(int ch, DivInstrument* ins) { } } +void DivPlatformOPLL::switchMode(bool mode) { + if (mode==properDrums) return; + if (mode) { + + } else { + + } +} + int DivPlatformOPLL::dispatch(DivCommand c) { switch (c.cmd) { case DIV_CMD_NOTE_ON: { diff --git a/src/engine/platform/opll.h b/src/engine/platform/opll.h index 7333f7298..f5d79b39c 100644 --- a/src/engine/platform/opll.h +++ b/src/engine/platform/opll.h @@ -75,6 +75,7 @@ class DivPlatformOPLL: public DivDispatch { int octave(int freq); int toFreq(int freq); void commitState(int ch, DivInstrument* ins); + void switchMode(bool mode); friend void putDispatchChip(void*,int); friend void putDispatchChan(void*,int,int); diff --git a/src/engine/platform/snes.cpp b/src/engine/platform/snes.cpp index 43401ebcb..a03121613 100644 --- a/src/engine/platform/snes.cpp +++ b/src/engine/platform/snes.cpp @@ -733,6 +733,7 @@ int DivPlatformSNES::getRegisterPoolSize() { void DivPlatformSNES::initEcho() { unsigned char esa=0xf8-(echoDelay<<3); + unsigned char control=(noiseFreq&0x1f)|(echoOn?0:0x20); if (echoOn) { rWrite(0x6d,esa); rWrite(0x7d,echoDelay); @@ -742,13 +743,14 @@ void DivPlatformSNES::initEcho() { for (int i=0; i<8; i++) { rWrite(0x0f+(i<<4),echoFIR[i]); } + rWrite(0x6c,control); } else { - rWrite(0x6d,0); - rWrite(0x7d,0); rWrite(0x2c,0); rWrite(0x3c,0); + rWrite(0x6c,control); + rWrite(0x7d,0); + rWrite(0x6d,0xff); } - writeControl=true; } void DivPlatformSNES::reset() { From 954d91d073f109bb41e65987e69647786d36a6c2 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 30 Jul 2023 02:20:19 -0500 Subject: [PATCH 40/87] OPLL: asdfasfd --- src/engine/platform/opll.cpp | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/engine/platform/opll.cpp b/src/engine/platform/opll.cpp index 593b659c3..1d72760a6 100644 --- a/src/engine/platform/opll.cpp +++ b/src/engine/platform/opll.cpp @@ -782,18 +782,10 @@ int DivPlatformOPLL::dispatch(DivCommand c) { if ((int)properDrums==c.value) break; if (c.value) { properDrums=true; - immWrite(0x0e,0x20); - drumState=0; } else { properDrums=false; - immWrite(0x0e,0x00); - drumState=0; } - chan[6].freqChanged=true; - chan[7].freqChanged=true; - chan[8].freqChanged=true; - chan[9].freqChanged=true; - chan[10].freqChanged=true; + switchMode(properDrums); break; case DIV_CMD_MACRO_OFF: chan[c.chan].std.mask(c.value,true); From 036ba996d56bb698daf68f445d33d25fd055bf0a Mon Sep 17 00:00:00 2001 From: freq-mod <32672779+freq-mod@users.noreply.github.com> Date: Sun, 30 Jul 2023 11:06:38 +0200 Subject: [PATCH 41/87] OPLL patch swiching guide feel free to improve it as you wish --- doc/9-guides/README.md | 3 ++- doc/9-guides/opllswitching.md | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 doc/9-guides/opllswitching.md diff --git a/doc/9-guides/README.md b/doc/9-guides/README.md index 80c96a005..aa6d5cbf6 100644 --- a/doc/9-guides/README.md +++ b/doc/9-guides/README.md @@ -3,4 +3,5 @@ here is a small collection of useful tricks and techniques to really make Furnace sing. - [using samples with limited playback rates](limited-samples.md) -- [choosing emulation cores](emulation-cores.md) \ No newline at end of file +- [choosing emulation cores](emulation-cores.md) +- [guide on using OPLL patch macro](opllswitching.md) \ No newline at end of file diff --git a/doc/9-guides/opllswitching.md b/doc/9-guides/opllswitching.md new file mode 100644 index 000000000..030959b65 --- /dev/null +++ b/doc/9-guides/opllswitching.md @@ -0,0 +1,19 @@ +# using OPLL patch macro + +YM2413's biggest flaw (or, rather, cost-saving feature) was that it could use only one user-defined instrument at once. It wasn't monotimbrial; you could use 15 built-in presets and 5 built-in drum tones freely, but for these going off the beaten path, it surely was limiting. However, there is one technique, as amazing as simple: **mid-note preset switching**. + + the idea is to use the first patch to put the envelope in an unintended state for the second patch so that it sounds different, with a higher or lower modulation level. the sustain level defines at which "envelope level" the envelope will switch to the sustain state (or release depending on envelope type). if the first patch is used to put the envelope into sustain at a higher or lower envelope state than intended for the second patch, it'll still be in sustain/release but at a higher or lower level than it should be at that point. + +therefore, much more variety can be forced out, without using custom instruments. As of July 2023, Furnace is the only tool supporting this feature. It is accessed in 'Macros' tab in OPLL instrument editor. + +For example, try putting the first macro value as 14 (acoustic bass preset), followed by 4 (flute preset). This way you will get distortion guitar-like sound this is nothing like other 2413 preset! There are many combination to test out, which is highly recommended (I can only say, 12->1 or 12->4 produces sound similiar to the well-known 4-op FM mallet brass) + +## drums using this technique + +Using OPLL's drum mode, described is systems/opll.md, you gain access to 5 hardcoded drum tones at the expense of 3 melodic FM channels. Patch switching eliminates that, as using it, it's also possible to construct percussive sounds, some even fuller than their drum mode counterparts! +In short, noise portion of drums (as in hi-hats), can be created of the very high pitched pseudo-distortion guitar, described as above. For kicks, snares, toms and claps, more effort is needed, however using volume and arpeggio macros will help. + +## examples + +[Lman-Clubster cover by Mahbod](https://www.youtube.com/watch?v=jfHs7tSyjXI) +[OPLL Nation by Mahbod](https://www.youtube.com/watch?v=ou6pEfxByeE) \ No newline at end of file From 41f6a6e0a300e70fe659873f129319d98de55919 Mon Sep 17 00:00:00 2001 From: freq-mod <32672779+freq-mod@users.noreply.github.com> Date: Sun, 30 Jul 2023 11:08:27 +0200 Subject: [PATCH 42/87] links aligned properly --- doc/9-guides/opllswitching.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/9-guides/opllswitching.md b/doc/9-guides/opllswitching.md index 030959b65..157a153f5 100644 --- a/doc/9-guides/opllswitching.md +++ b/doc/9-guides/opllswitching.md @@ -15,5 +15,5 @@ In short, noise portion of drums (as in hi-hats), can be created of the very hig ## examples -[Lman-Clubster cover by Mahbod](https://www.youtube.com/watch?v=jfHs7tSyjXI) -[OPLL Nation by Mahbod](https://www.youtube.com/watch?v=ou6pEfxByeE) \ No newline at end of file +- [Lman-Clubster cover by Mahbod](https://www.youtube.com/watch?v=jfHs7tSyjXI) +- [OPLL Nation by Mahbod](https://www.youtube.com/watch?v=ou6pEfxByeE) From 308af5a34efafdffd8254a352298d5abf3335f79 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 30 Jul 2023 04:32:40 -0500 Subject: [PATCH 43/87] GUI: new settings layout --- src/gui/settings.cpp | 3964 +++++++++++++++++++++--------------------- 1 file changed, 1936 insertions(+), 2028 deletions(-) diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 8a860c10f..2d92a4c87 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -685,214 +685,908 @@ void FurnaceGUI::drawSettings() { END_SECTION; } - CONFIG_SECTION("Audio/MIDI") { + CONFIG_SECTION("Audio") { // SUBSECTION OUTPUT CONFIG_SUBSECTION("Output"); +#ifdef HAVE_JACK + ImGui::Text("Backend"); + ImGui::SameLine(); + int prevAudioEngine=settings.audioEngine; + if (ImGui::Combo("##Backend",&settings.audioEngine,audioBackends,2)) { + if (settings.audioEngine!=prevAudioEngine) { + if (!isProAudio[settings.audioEngine]) settings.audioChans=2; + } + } +#endif + + if (settings.audioEngine==DIV_AUDIO_SDL) { + ImGui::Text("Driver"); + ImGui::SameLine(); + if (ImGui::BeginCombo("##SDLADriver",settings.sdlAudioDriver.empty()?"Automatic":settings.sdlAudioDriver.c_str())) { + if (ImGui::Selectable("Automatic",settings.sdlAudioDriver.empty())) { + settings.sdlAudioDriver=""; + } + for (String& i: availAudioDrivers) { + if (ImGui::Selectable(i.c_str(),i==settings.sdlAudioDriver)) { + settings.sdlAudioDriver=i; + } + } + ImGui::EndCombo(); + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("you may need to restart Furnace for this setting to take effect."); + } + } + + ImGui::Text("Device"); + ImGui::SameLine(); + String audioDevName=settings.audioDevice.empty()?"":settings.audioDevice; + if (ImGui::BeginCombo("##AudioDevice",audioDevName.c_str())) { + if (ImGui::Selectable("",settings.audioDevice.empty())) { + settings.audioDevice=""; + } + for (String& i: e->getAudioDevices()) { + if (ImGui::Selectable(i.c_str(),i==settings.audioDevice)) { + settings.audioDevice=i; + } + } + ImGui::EndCombo(); + } + + ImGui::Text("Sample rate"); + ImGui::SameLine(); + String sr=fmt::sprintf("%d",settings.audioRate); + if (ImGui::BeginCombo("##SampleRate",sr.c_str())) { + SAMPLE_RATE_SELECTABLE(8000); + SAMPLE_RATE_SELECTABLE(16000); + SAMPLE_RATE_SELECTABLE(22050); + SAMPLE_RATE_SELECTABLE(32000); + SAMPLE_RATE_SELECTABLE(44100); + SAMPLE_RATE_SELECTABLE(48000); + SAMPLE_RATE_SELECTABLE(88200); + SAMPLE_RATE_SELECTABLE(96000); + SAMPLE_RATE_SELECTABLE(192000); + ImGui::EndCombo(); + } + + if (isProAudio[settings.audioEngine]) { + ImGui::Text("Outputs"); + ImGui::SameLine(); + if (ImGui::InputInt("##AudioChansI",&settings.audioChans,1,1)) { + if (settings.audioChans<1) settings.audioChans=1; + if (settings.audioChans>16) settings.audioChans=16; + } + } else { + ImGui::Text("Channels"); + ImGui::SameLine(); + String chStr=(settings.audioChans<1 || settings.audioChans>8)?"What?":nonProAudioOuts[settings.audioChans-1]; + if (ImGui::BeginCombo("##AudioChans",chStr.c_str())) { + CHANS_SELECTABLE(1); + CHANS_SELECTABLE(2); + CHANS_SELECTABLE(4); + CHANS_SELECTABLE(6); + CHANS_SELECTABLE(8); + ImGui::EndCombo(); + } + } + + ImGui::Text("Buffer size"); + ImGui::SameLine(); + String bs=fmt::sprintf("%d (latency: ~%.1fms)",settings.audioBufSize,2000.0*(double)settings.audioBufSize/(double)MAX(1,settings.audioRate)); + if (ImGui::BeginCombo("##BufferSize",bs.c_str())) { + BUFFER_SIZE_SELECTABLE(64); + BUFFER_SIZE_SELECTABLE(128); + BUFFER_SIZE_SELECTABLE(256); + BUFFER_SIZE_SELECTABLE(512); + BUFFER_SIZE_SELECTABLE(1024); + BUFFER_SIZE_SELECTABLE(2048); + ImGui::EndCombo(); + } + + bool lowLatencyB=settings.lowLatency; + if (ImGui::Checkbox("Low-latency mode (experimental!)",&lowLatencyB)) { + settings.lowLatency=lowLatencyB; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("reduces latency by running the engine faster than the tick rate.\nuseful for live playback/jam mode.\n\nwarning: experimental! may produce glitches.\nonly enable if your buffer size is small (10ms or less)."); + } + + bool forceMonoB=settings.forceMono; + if (ImGui::Checkbox("Force mono audio",&forceMonoB)) { + settings.forceMono=forceMonoB; + } + + TAAudioDesc& audioWant=e->getAudioDescWant(); + TAAudioDesc& audioGot=e->getAudioDescGot(); + + ImGui::Text("want: %d samples @ %.0fHz (%d channels)",audioWant.bufsize,audioWant.rate,audioWant.outChans); + ImGui::Text("got: %d samples @ %.0fHz (%d channels)",audioGot.bufsize,audioGot.rate,audioWant.outChans); // SUBSECTION MIXING CONFIG_SUBSECTION("Mixing"); + ImGui::Text("Quality"); + ImGui::SameLine(); + ImGui::Combo("##Quality",&settings.audioQuality,audioQualities,2); + + bool clampSamplesB=settings.clampSamples; + if (ImGui::Checkbox("Software clipping",&clampSamplesB)) { + settings.clampSamples=clampSamplesB; + } // SUBSECTION METRONOME CONFIG_SUBSECTION("Metronome"); + ImGui::Text("Metronome volume"); + ImGui::SameLine(); + if (ImGui::SliderInt("##MetroVol",&settings.metroVol,0,200,"%d%%")) { + if (settings.metroVol<0) settings.metroVol=0; + if (settings.metroVol>200) settings.metroVol=200; + e->setMetronomeVol(((float)settings.metroVol)/100.0f); + } - // SUBSECTION MIDI - CONFIG_SUBSECTION("MIDI"); + END_SECTION; + } + CONFIG_SECTION("MIDI") { + // SUBSECTION MIDI INPUT + CONFIG_SUBSECTION("MIDI input"); + ImGui::Text("MIDI input"); + ImGui::SameLine(); + String midiInName=settings.midiInDevice.empty()?"":settings.midiInDevice; + bool hasToReloadMidi=false; + if (ImGui::BeginCombo("##MidiInDevice",midiInName.c_str())) { + if (ImGui::Selectable("",settings.midiInDevice.empty())) { + settings.midiInDevice=""; + hasToReloadMidi=true; + } + for (String& i: e->getMidiIns()) { + if (ImGui::Selectable(i.c_str(),i==settings.midiInDevice)) { + settings.midiInDevice=i; + hasToReloadMidi=true; + } + } + ImGui::EndCombo(); + } + + if (hasToReloadMidi) { + midiMap.read(e->getConfigPath()+DIR_SEPARATOR_STR+"midiIn_"+stripName(settings.midiInDevice)+".cfg"); + midiMap.compile(); + } + + ImGui::Checkbox("Note input",&midiMap.noteInput); + ImGui::Checkbox("Velocity input",&midiMap.volInput); + // TODO + //ImGui::Checkbox("Use raw velocity value (don't map from linear to log)",&midiMap.rawVolume); + //ImGui::Checkbox("Polyphonic/chord input",&midiMap.polyInput); + ImGui::Checkbox("Map MIDI channels to direct channels",&midiMap.directChannel); + ImGui::Checkbox("Map Yamaha FM voice data to instruments",&midiMap.yamahaFMResponse); + ImGui::Checkbox("Program change is instrument selection",&midiMap.programChange); + //ImGui::Checkbox("Listen to MIDI clock",&midiMap.midiClock); + //ImGui::Checkbox("Listen to MIDI time code",&midiMap.midiTimeCode); + ImGui::Combo("Value input style",&midiMap.valueInputStyle,valueInputStyles,7); + if (midiMap.valueInputStyle>3) { + if (midiMap.valueInputStyle==6) { + if (ImGui::InputInt("Control##valueCCS",&midiMap.valueInputControlSingle,1,16)) { + if (midiMap.valueInputControlSingle<0) midiMap.valueInputControlSingle=0; + if (midiMap.valueInputControlSingle>127) midiMap.valueInputControlSingle=127; + } + } else { + if (ImGui::InputInt((midiMap.valueInputStyle==4)?"CC of upper nibble##valueCC1":"MSB CC##valueCC1",&midiMap.valueInputControlMSB,1,16)) { + if (midiMap.valueInputControlMSB<0) midiMap.valueInputControlMSB=0; + if (midiMap.valueInputControlMSB>127) midiMap.valueInputControlMSB=127; + } + if (ImGui::InputInt((midiMap.valueInputStyle==4)?"CC of lower nibble##valueCC2":"LSB CC##valueCC2",&midiMap.valueInputControlLSB,1,16)) { + if (midiMap.valueInputControlLSB<0) midiMap.valueInputControlLSB=0; + if (midiMap.valueInputControlLSB>127) midiMap.valueInputControlLSB=127; + } + } + } + if (ImGui::TreeNode("Per-column control change")) { + for (int i=0; i<18; i++) { + ImGui::PushID(i); + ImGui::Combo(specificControls[i],&midiMap.valueInputSpecificStyle[i],valueSInputStyles,4); + if (midiMap.valueInputSpecificStyle[i]>0) { + ImGui::Indent(); + if (midiMap.valueInputSpecificStyle[i]==3) { + if (ImGui::InputInt("Control##valueCCS",&midiMap.valueInputSpecificSingle[i],1,16)) { + if (midiMap.valueInputSpecificSingle[i]<0) midiMap.valueInputSpecificSingle[i]=0; + if (midiMap.valueInputSpecificSingle[i]>127) midiMap.valueInputSpecificSingle[i]=127; + } + } else { + if (ImGui::InputInt((midiMap.valueInputSpecificStyle[i]==4)?"CC of upper nibble##valueCC1":"MSB CC##valueCC1",&midiMap.valueInputSpecificMSB[i],1,16)) { + if (midiMap.valueInputSpecificMSB[i]<0) midiMap.valueInputSpecificMSB[i]=0; + if (midiMap.valueInputSpecificMSB[i]>127) midiMap.valueInputSpecificMSB[i]=127; + } + if (ImGui::InputInt((midiMap.valueInputSpecificStyle[i]==4)?"CC of lower nibble##valueCC2":"LSB CC##valueCC2",&midiMap.valueInputSpecificLSB[i],1,16)) { + if (midiMap.valueInputSpecificLSB[i]<0) midiMap.valueInputSpecificLSB[i]=0; + if (midiMap.valueInputSpecificLSB[i]>127) midiMap.valueInputSpecificLSB[i]=127; + } + } + ImGui::Unindent(); + } + ImGui::PopID(); + } + ImGui::TreePop(); + } + if (ImGui::SliderFloat("Volume curve",&midiMap.volExp,0.01,8.0,"%.2f")) { + if (midiMap.volExp<0.01) midiMap.volExp=0.01; + if (midiMap.volExp>8.0) midiMap.volExp=8.0; + } rightClickable + float curve[128]; + for (int i=0; i<128; i++) { + curve[i]=(int)(pow((double)i/127.0,midiMap.volExp)*127.0); + } + ImGui::PlotLines("##VolCurveDisplay",curve,128,0,"Volume curve",0.0,127.0,ImVec2(200.0f*dpiScale,200.0f*dpiScale)); + + ImGui::Text("Actions:"); + ImGui::SameLine(); + if (ImGui::Button(ICON_FA_PLUS "##AddAction")) { + midiMap.binds.push_back(MIDIBind()); + } + ImGui::SameLine(); + if (ImGui::Button(ICON_FA_EXTERNAL_LINK "##AddLearnAction")) { + midiMap.binds.push_back(MIDIBind()); + learning=midiMap.binds.size()-1; + } + if (learning!=-1) { + ImGui::SameLine(); + ImGui::Text("(learning! press a button or move a slider/knob/something on your device.)"); + } + + if (ImGui::BeginTable("MIDIActions",7)) { + ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthStretch,0.2); + ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.1); + ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch,0.3); + ImGui::TableSetupColumn("c3",ImGuiTableColumnFlags_WidthStretch,0.2); + ImGui::TableSetupColumn("c4",ImGuiTableColumnFlags_WidthStretch,0.5); + ImGui::TableSetupColumn("c5",ImGuiTableColumnFlags_WidthFixed); + ImGui::TableSetupColumn("c6",ImGuiTableColumnFlags_WidthFixed); + + ImGui::TableNextRow(ImGuiTableRowFlags_Headers); + ImGui::TableNextColumn(); + ImGui::Text("Type"); + ImGui::TableNextColumn(); + ImGui::Text("Channel"); + ImGui::TableNextColumn(); + ImGui::Text("Note/Control"); + ImGui::TableNextColumn(); + ImGui::Text("Velocity/Value"); + ImGui::TableNextColumn(); + ImGui::Text("Action"); + ImGui::TableNextColumn(); + ImGui::Text("Learn"); + ImGui::TableNextColumn(); + ImGui::Text("Remove"); + + for (size_t i=0; i0 && (bind.data1+60)<180) { + nName=noteNames[bind.data1+60]; + } + snprintf(bindID,1024,"%d (0x%.2X, %s)",bind.data1,bind.data1,nName); + } + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("##BValue1",bindID)) { + if (ImGui::Selectable("Any",bind.data1==128)) { + bind.data1=128; + } + for (int j=0; j<128; j++) { + const char* nName="???"; + if ((j+60)>0 && (j+60)<180) { + nName=noteNames[j+60]; + } + snprintf(bindID,1024,"%d (0x%.2X, %s)##BV1_%d",j,j,nName,j); + if (ImGui::Selectable(bindID,bind.data1==j)) { + bind.data1=j; + } + } + ImGui::EndCombo(); + } + + ImGui::TableNextColumn(); + if (bind.data2==128) { + snprintf(bindID,1024,"Any"); + } else { + snprintf(bindID,1024,"%d (0x%.2X)",bind.data2,bind.data2); + } + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("##BValue2",bindID)) { + if (ImGui::Selectable("Any",bind.data2==128)) { + bind.data2=128; + } + for (int j=0; j<128; j++) { + snprintf(bindID,1024,"%d (0x%.2X)##BV2_%d",j,j,j); + if (ImGui::Selectable(bindID,bind.data2==j)) { + bind.data2=j; + } + } + ImGui::EndCombo(); + } + + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::BeginCombo("##BAction",(bind.action==0)?"--none--":guiActions[bind.action].friendlyName)) { + if (ImGui::Selectable("--none--",bind.action==0)) { + bind.action=0; + } + for (int j=0; j":settings.midiOutDevice; + if (ImGui::BeginCombo("##MidiOutDevice",midiOutName.c_str())) { + if (ImGui::Selectable("",settings.midiOutDevice.empty())) { + settings.midiOutDevice=""; + } + for (String& i: e->getMidiIns()) { + if (ImGui::Selectable(i.c_str(),i==settings.midiOutDevice)) { + settings.midiOutDevice=i; + } + } + ImGui::EndCombo(); + } + + ImGui::Text("Output mode:"); + if (ImGui::RadioButton("Off (use for TX81Z)",settings.midiOutMode==0)) { + settings.midiOutMode=0; + } + if (ImGui::RadioButton("Melodic",settings.midiOutMode==1)) { + settings.midiOutMode=1; + } + /* + if (ImGui::RadioButton("Light Show (use for Launchpad)",settings.midiOutMode==2)) { + settings.midiOutMode=2; + }*/ + + bool midiOutProgramChangeB=settings.midiOutProgramChange; + if (ImGui::Checkbox("Send Program Change",&midiOutProgramChangeB)) { + settings.midiOutProgramChange=midiOutProgramChangeB; + } + + bool midiOutClockB=settings.midiOutClock; + if (ImGui::Checkbox("Send MIDI clock",&midiOutClockB)) { + settings.midiOutClock=midiOutClockB; + } + + bool midiOutTimeB=settings.midiOutTime; + if (ImGui::Checkbox("Send MIDI timecode",&midiOutTimeB)) { + settings.midiOutTime=midiOutTimeB; + } + + if (settings.midiOutTime) { + ImGui::Text("Timecode frame rate:"); + if (ImGui::RadioButton("Closest to Tick Rate",settings.midiOutTimeRate==0)) { + settings.midiOutTimeRate=0; + } + if (ImGui::RadioButton("Film (24fps)",settings.midiOutTimeRate==1)) { + settings.midiOutTimeRate=1; + } + if (ImGui::RadioButton("PAL (25fps)",settings.midiOutTimeRate==2)) { + settings.midiOutTimeRate=2; + } + if (ImGui::RadioButton("NTSC drop (29.97fps)",settings.midiOutTimeRate==3)) { + settings.midiOutTimeRate=3; + } + if (ImGui::RadioButton("NTSC non-drop (30fps)",settings.midiOutTimeRate==4)) { + settings.midiOutTimeRate=4; + } + } END_SECTION; } CONFIG_SECTION("Emulation") { // SUBSECTION LAYOUT CONFIG_SUBSECTION("Cores"); + ImGui::Text("Arcade/YM2151 core"); + ImGui::SameLine(); + ImGui::Combo("##ArcadeCore",&settings.arcadeCore,arcadeCores,2); + + ImGui::Text("Genesis/YM2612 core"); + ImGui::SameLine(); + ImGui::Combo("##YM2612Core",&settings.ym2612Core,ym2612Cores,2); + + ImGui::Text("SN76489 core"); + ImGui::SameLine(); + ImGui::Combo("##SNCore",&settings.snCore,snCores,2); + + ImGui::Text("NES core"); + ImGui::SameLine(); + ImGui::Combo("##NESCore",&settings.nesCore,nesCores,2); + + ImGui::Text("FDS core"); + ImGui::SameLine(); + ImGui::Combo("##FDSCore",&settings.fdsCore,nesCores,2); + + ImGui::Text("SID core"); + ImGui::SameLine(); + ImGui::Combo("##C64Core",&settings.c64Core,c64Cores,3); + + ImGui::Text("POKEY core"); + ImGui::SameLine(); + ImGui::Combo("##POKEYCore",&settings.pokeyCore,pokeyCores,2); + + ImGui::Text("OPN/OPNA/OPNB cores"); + ImGui::SameLine(); + ImGui::Combo("##OPNCore",&settings.opnCore,opnCores,2); + + ImGui::Separator(); + + ImGui::Text("PC Speaker strategy"); + ImGui::SameLine(); + ImGui::Combo("##PCSOutMethod",&settings.pcSpeakerOutMethod,pcspkrOutMethods,5); + + ImGui::Separator(); + ImGui::Text("Sample ROMs:"); + + ImGui::Text("OPL4 YRW801 path"); + ImGui::SameLine(); + ImGui::InputText("##YRW801Path",&settings.yrw801Path); + ImGui::SameLine(); + if (ImGui::Button(ICON_FA_FOLDER "##YRW801Load")) { + openFileDialog(GUI_FILE_YRW801_ROM_OPEN); + } + + ImGui::Text("MultiPCM TG100 path"); + ImGui::SameLine(); + ImGui::InputText("##TG100Path",&settings.tg100Path); + ImGui::SameLine(); + if (ImGui::Button(ICON_FA_FOLDER "##TG100Load")) { + openFileDialog(GUI_FILE_TG100_ROM_OPEN); + } + + ImGui::Text("MultiPCM MU5 path"); + ImGui::SameLine(); + ImGui::InputText("##MU5Path",&settings.mu5Path); + ImGui::SameLine(); + if (ImGui::Button(ICON_FA_FOLDER "##MU5Load")) { + openFileDialog(GUI_FILE_MU5_ROM_OPEN); + } + END_SECTION; } CONFIG_SECTION("Keyboard") { // SUBSECTION LAYOUT CONFIG_SUBSECTION("Keyboard"); + if (ImGui::Button("Import")) { + openFileDialog(GUI_FILE_IMPORT_KEYBINDS); + } + ImGui::SameLine(); + if (ImGui::Button("Export")) { + openFileDialog(GUI_FILE_EXPORT_KEYBINDS); + } + ImGui::SameLine(); + if (ImGui::Button("Reset defaults")) { + showWarning("Are you sure you want to reset the keyboard settings?",GUI_WARN_RESET_KEYBINDS); + } + if (ImGui::TreeNode("Global hotkeys")) { + KEYBIND_CONFIG_BEGIN("keysGlobal"); + + UI_KEYBIND_CONFIG(GUI_ACTION_NEW); + UI_KEYBIND_CONFIG(GUI_ACTION_OPEN); + UI_KEYBIND_CONFIG(GUI_ACTION_OPEN_BACKUP); + UI_KEYBIND_CONFIG(GUI_ACTION_SAVE); + UI_KEYBIND_CONFIG(GUI_ACTION_SAVE_AS); + UI_KEYBIND_CONFIG(GUI_ACTION_UNDO); + UI_KEYBIND_CONFIG(GUI_ACTION_REDO); + UI_KEYBIND_CONFIG(GUI_ACTION_PLAY_TOGGLE); + UI_KEYBIND_CONFIG(GUI_ACTION_PLAY); + UI_KEYBIND_CONFIG(GUI_ACTION_STOP); + UI_KEYBIND_CONFIG(GUI_ACTION_PLAY_START); + UI_KEYBIND_CONFIG(GUI_ACTION_PLAY_REPEAT); + UI_KEYBIND_CONFIG(GUI_ACTION_PLAY_CURSOR); + UI_KEYBIND_CONFIG(GUI_ACTION_STEP_ONE); + UI_KEYBIND_CONFIG(GUI_ACTION_OCTAVE_UP); + UI_KEYBIND_CONFIG(GUI_ACTION_OCTAVE_DOWN); + UI_KEYBIND_CONFIG(GUI_ACTION_INS_UP); + UI_KEYBIND_CONFIG(GUI_ACTION_INS_DOWN); + UI_KEYBIND_CONFIG(GUI_ACTION_STEP_UP); + UI_KEYBIND_CONFIG(GUI_ACTION_STEP_DOWN); + UI_KEYBIND_CONFIG(GUI_ACTION_TOGGLE_EDIT); + UI_KEYBIND_CONFIG(GUI_ACTION_METRONOME); + UI_KEYBIND_CONFIG(GUI_ACTION_REPEAT_PATTERN); + UI_KEYBIND_CONFIG(GUI_ACTION_FOLLOW_ORDERS); + UI_KEYBIND_CONFIG(GUI_ACTION_FOLLOW_PATTERN); + UI_KEYBIND_CONFIG(GUI_ACTION_FULLSCREEN); + UI_KEYBIND_CONFIG(GUI_ACTION_PANIC); + + KEYBIND_CONFIG_END; + ImGui::TreePop(); + } + if (ImGui::TreeNode("Window activation")) { + KEYBIND_CONFIG_BEGIN("keysWindow"); + + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_EDIT_CONTROLS); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_ORDERS); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_INS_LIST); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_INS_EDIT); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_SONG_INFO); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_SUBSONGS); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_PATTERN); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_WAVE_LIST); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_WAVE_EDIT); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_SAMPLE_LIST); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_SAMPLE_EDIT); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_ABOUT); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_SETTINGS); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_MIXER); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_DEBUG); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_OSCILLOSCOPE); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_CHAN_OSC); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_EFFECT_LIST); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_VOL_METER); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_STATS); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_COMPAT_FLAGS); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_PIANO); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_NOTES); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_CHANNELS); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_REGISTER_VIEW); + UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_LOG); + + UI_KEYBIND_CONFIG(GUI_ACTION_COLLAPSE_WINDOW); + UI_KEYBIND_CONFIG(GUI_ACTION_CLOSE_WINDOW); + + KEYBIND_CONFIG_END; + ImGui::TreePop(); + } + if (ImGui::TreeNode("Note input")) { + std::vector sorted; + if (ImGui::BeginTable("keysNoteInput",4)) { + for (std::map::value_type& i: noteKeys) { + std::vector::iterator j; + for (j=sorted.begin(); j!=sorted.end(); j++) { + if (j->val>i.second) { + break; + } + } + sorted.insert(j,MappedInput(i.first,i.second)); + } + + static char id[4096]; + + ImGui::TableNextRow(ImGuiTableRowFlags_Headers); + ImGui::TableNextColumn(); + ImGui::Text("Key"); + ImGui::TableNextColumn(); + ImGui::Text("Type"); + ImGui::TableNextColumn(); + ImGui::Text("Value"); + ImGui::TableNextColumn(); + ImGui::Text("Remove"); + + for (MappedInput& i: sorted) { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Text("%s",SDL_GetScancodeName((SDL_Scancode)i.scan)); + ImGui::TableNextColumn(); + if (i.val==102) { + snprintf(id,4095,"Macro release##SNType_%d",i.scan); + if (ImGui::Button(id)) { + noteKeys[i.scan]=0; + } + } else if (i.val==101) { + snprintf(id,4095,"Note release##SNType_%d",i.scan); + if (ImGui::Button(id)) { + noteKeys[i.scan]=102; + } + } else if (i.val==100) { + snprintf(id,4095,"Note off##SNType_%d",i.scan); + if (ImGui::Button(id)) { + noteKeys[i.scan]=101; + } + } else { + snprintf(id,4095,"Note##SNType_%d",i.scan); + if (ImGui::Button(id)) { + noteKeys[i.scan]=100; + } + } + ImGui::TableNextColumn(); + if (i.val<100) { + snprintf(id,4095,"##SNValue_%d",i.scan); + if (ImGui::InputInt(id,&i.val,1,1)) { + if (i.val<0) i.val=0; + if (i.val>96) i.val=96; + noteKeys[i.scan]=i.val; + } + } + ImGui::TableNextColumn(); + snprintf(id,4095,ICON_FA_TIMES "##SNRemove_%d",i.scan); + if (ImGui::Button(id)) { + noteKeys.erase(i.scan); + } + } + ImGui::EndTable(); + + if (ImGui::BeginCombo("##SNAddNew","Add...")) { + for (int i=0; i1.0) settings.doubleClickTime=1.0; - - applyUISettings(false); - } - - ImGui::Text("Toggle channel solo on:"); - if (ImGui::RadioButton("Right-click or double-click##soloA",settings.soloAction==0)) { - settings.soloAction=0; - } - if (ImGui::RadioButton("Right-click##soloR",settings.soloAction==1)) { - settings.soloAction=1; - } - if (ImGui::RadioButton("Double-click##soloD",settings.soloAction==2)) { - settings.soloAction=2; - } - - bool pushNibbleB=settings.pushNibble; - if (ImGui::Checkbox("Push value when overwriting instead of clearing it",&pushNibbleB)) { - settings.pushNibble=pushNibbleB; - } - - bool pullDeleteBehaviorB=settings.pullDeleteBehavior; - if (ImGui::Checkbox("Move cursor up on backspace-delete",&pullDeleteBehaviorB)) { - settings.pullDeleteBehavior=pullDeleteBehaviorB; - } - - bool stepOnDeleteB=settings.stepOnDelete; - if (ImGui::Checkbox("Move cursor by edit step on delete",&stepOnDeleteB)) { - settings.stepOnDelete=stepOnDeleteB; - } - - bool insertBehaviorB=settings.insertBehavior; - if (ImGui::Checkbox("Insert pushes entire channel row",&insertBehaviorB)) { - settings.insertBehavior=insertBehaviorB; - } - - bool pullDeleteRowB=settings.pullDeleteRow; - if (ImGui::Checkbox("Pull delete affects entire channel row",&pullDeleteRowB)) { - settings.pullDeleteRow=pullDeleteRowB; - } - - bool absorbInsInputB=settings.absorbInsInput; - if (ImGui::Checkbox("Change current instrument when changing instrument column (absorb)",&absorbInsInputB)) { - settings.absorbInsInput=absorbInsInputB; - } - - bool effectDeletionAltersValueB=settings.effectDeletionAltersValue; - if (ImGui::Checkbox("Delete effect value when deleting effect",&effectDeletionAltersValueB)) { - settings.effectDeletionAltersValue=effectDeletionAltersValueB; - } - - bool stepOnInsertB=settings.stepOnInsert; - if (ImGui::Checkbox("Move cursor by edit step on insert (push)",&stepOnInsertB)) { - settings.stepOnInsert=stepOnInsertB; - } - - bool cursorPastePosB=settings.cursorPastePos; - if (ImGui::Checkbox("Move cursor to end of clipboard content when pasting",&cursorPastePosB)) { - settings.cursorPastePos=cursorPastePosB; - } - - bool cursorMoveNoScrollB=settings.cursorMoveNoScroll; - if (ImGui::Checkbox("Don't scroll when moving cursor",&cursorMoveNoScrollB)) { - settings.cursorMoveNoScroll=cursorMoveNoScrollB; - } - - bool cursorFollowsWheelB=settings.cursorFollowsWheel; - if (ImGui::Checkbox("Move cursor with scroll wheel",&cursorFollowsWheelB)) { - settings.cursorFollowsWheel=cursorFollowsWheelB; - } - - bool doubleClickColumnB=settings.doubleClickColumn; - if (ImGui::Checkbox("Double click selects entire column",&doubleClickColumnB)) { - settings.doubleClickColumn=doubleClickColumnB; - } - - bool allowEditDockingB=settings.allowEditDocking; - if (ImGui::Checkbox("Allow docking editors",&allowEditDockingB)) { - settings.allowEditDocking=allowEditDockingB; - } - - bool avoidRaisingPatternB=settings.avoidRaisingPattern; - if (ImGui::Checkbox("Don't raise pattern editor on click",&avoidRaisingPatternB)) { - settings.avoidRaisingPattern=avoidRaisingPatternB; - } - - bool insFocusesPatternB=settings.insFocusesPattern; - if (ImGui::Checkbox("Focus pattern editor when selecting instrument",&insFocusesPatternB)) { - settings.insFocusesPattern=insFocusesPatternB; - } - - bool moveWindowTitleB=settings.moveWindowTitle; - if (ImGui::Checkbox("Only allow window movement when clicking on title bar",&moveWindowTitleB)) { - settings.moveWindowTitle=moveWindowTitleB; - applyUISettings(false); - } + bool allowEditDockingB=settings.allowEditDocking; + if (ImGui::Checkbox("Allow docking editors",&allowEditDockingB)) { + settings.allowEditDocking=allowEditDockingB; + } #ifndef IS_MOBILE bool saveWindowPosB=settings.saveWindowPos; @@ -904,1826 +1598,1043 @@ void FurnaceGUI::drawSettings() { } #endif - bool cursorFollowsOrderB=settings.cursorFollowsOrder; - if (ImGui::Checkbox("Cursor follows current order when moving it",&cursorFollowsOrderB)) { - settings.cursorFollowsOrder=cursorFollowsOrderB; - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("applies when playback is stopped."); - } - - ImGui::Text("Note preview behavior:"); - if (ImGui::RadioButton("Never##npb0",settings.notePreviewBehavior==0)) { - settings.notePreviewBehavior=0; - } - if (ImGui::RadioButton("When cursor is in Note column##npb1",settings.notePreviewBehavior==1)) { - settings.notePreviewBehavior=1; - } - if (ImGui::RadioButton("When cursor is in Note column or not in edit mode##npb2",settings.notePreviewBehavior==2)) { - settings.notePreviewBehavior=2; - } - if (ImGui::RadioButton("Always##npb3",settings.notePreviewBehavior==3)) { - settings.notePreviewBehavior=3; - } - - ImGui::Text("Wrap pattern cursor horizontally:"); - if (ImGui::RadioButton("No##wrapH0",settings.wrapHorizontal==0)) { - settings.wrapHorizontal=0; - } - if (ImGui::RadioButton("Yes##wrapH1",settings.wrapHorizontal==1)) { - settings.wrapHorizontal=1; - } - if (ImGui::RadioButton("Yes, and move to next/prev row##wrapH2",settings.wrapHorizontal==2)) { - settings.wrapHorizontal=2; - } - - ImGui::Text("Wrap pattern cursor vertically:"); - if (ImGui::RadioButton("No##wrapV0",settings.wrapVertical==0)) { - settings.wrapVertical=0; - } - if (ImGui::RadioButton("Yes##wrapV1",settings.wrapVertical==1)) { - settings.wrapVertical=1; - } - if (ImGui::RadioButton("Yes, and move to next/prev pattern##wrapV2",settings.wrapVertical==2)) { - settings.wrapVertical=2; - } - if (ImGui::RadioButton("Yes, and move to next/prev pattern (wrap around)##wrapV2",settings.wrapVertical==3)) { - settings.wrapVertical=3; - } - - ImGui::Text("Change order when scrolling outside of pattern bounds:"); - if (ImGui::RadioButton("No##pscroll0",settings.scrollChangesOrder==0)) { - settings.scrollChangesOrder=0; - } - if (ImGui::RadioButton("Yes##pscroll1",settings.scrollChangesOrder==1)) { - settings.scrollChangesOrder=1; - } - if (ImGui::RadioButton("Yes, and wrap around song##pscroll2",settings.scrollChangesOrder==2)) { - settings.scrollChangesOrder=2; - } - - - ImGui::Text("Cursor movement keys behavior:"); - if (ImGui::RadioButton("Move by one##cmk0",settings.scrollStep==0)) { - settings.scrollStep=0; - } - if (ImGui::RadioButton("Move by Edit Step##cmk1",settings.scrollStep==1)) { - settings.scrollStep=1; - } - - ImGui::Text("Effect input cursor behavior:"); - if (ImGui::RadioButton("Move down##eicb0",settings.effectCursorDir==0)) { - settings.effectCursorDir=0; - } - if (ImGui::RadioButton("Move to effect value (otherwise move down)##eicb1",settings.effectCursorDir==1)) { - settings.effectCursorDir=1; - } - if (ImGui::RadioButton("Move to effect value/next effect and wrap around##eicb2",settings.effectCursorDir==2)) { - settings.effectCursorDir=2; - } - - ImGui::Text("Allow dragging selection:"); - if (ImGui::RadioButton("No##dms0",settings.dragMovesSelection==0)) { - settings.dragMovesSelection=0; - } - if (ImGui::RadioButton("Yes##dms1",settings.dragMovesSelection==1)) { - settings.dragMovesSelection=1; - } - if (ImGui::RadioButton("Yes (while holding Ctrl only)##dms2",settings.dragMovesSelection==2)) { - settings.dragMovesSelection=2; - } + bool moveWindowTitleB=settings.moveWindowTitle; + if (ImGui::Checkbox("Only allow window movement when clicking on title bar",&moveWindowTitleB)) { + settings.moveWindowTitle=moveWindowTitleB; + applyUISettings(false); } - ImGui::EndChild(); - ImGui::EndTabItem(); + + ImGui::Text("Play/edit controls layout:"); + if (ImGui::RadioButton("Classic##ecl0",settings.controlLayout==0)) { + settings.controlLayout=0; + } + if (ImGui::RadioButton("Compact##ecl1",settings.controlLayout==1)) { + settings.controlLayout=1; + } + if (ImGui::RadioButton("Compact (vertical)##ecl2",settings.controlLayout==2)) { + settings.controlLayout=2; + } + if (ImGui::RadioButton("Split##ecl3",settings.controlLayout==3)) { + settings.controlLayout=3; + } + + ImGui::Text("Position of buttons in Orders:"); + if (ImGui::RadioButton("Top##obp0",settings.orderButtonPos==0)) { + settings.orderButtonPos=0; + } + if (ImGui::RadioButton("Left##obp1",settings.orderButtonPos==1)) { + settings.orderButtonPos=1; + } + if (ImGui::RadioButton("Right##obp2",settings.orderButtonPos==2)) { + settings.orderButtonPos=2; + } + + // SUBSECTION MOUSE + CONFIG_SUBSECTION("Mouse"); + + if (CWSliderFloat("Double-click time (seconds)",&settings.doubleClickTime,0.02,1.0,"%.2f")) { + if (settings.doubleClickTime<0.02) settings.doubleClickTime=0.02; + if (settings.doubleClickTime>1.0) settings.doubleClickTime=1.0; + + applyUISettings(false); + } + + bool avoidRaisingPatternB=settings.avoidRaisingPattern; + if (ImGui::Checkbox("Don't raise pattern editor on click",&avoidRaisingPatternB)) { + settings.avoidRaisingPattern=avoidRaisingPatternB; + } + + bool insFocusesPatternB=settings.insFocusesPattern; + if (ImGui::Checkbox("Focus pattern editor when selecting instrument",&insFocusesPatternB)) { + settings.insFocusesPattern=insFocusesPatternB; + } + + ImGui::Text("Note preview behavior:"); + if (ImGui::RadioButton("Never##npb0",settings.notePreviewBehavior==0)) { + settings.notePreviewBehavior=0; + } + if (ImGui::RadioButton("When cursor is in Note column##npb1",settings.notePreviewBehavior==1)) { + settings.notePreviewBehavior=1; + } + if (ImGui::RadioButton("When cursor is in Note column or not in edit mode##npb2",settings.notePreviewBehavior==2)) { + settings.notePreviewBehavior=2; + } + if (ImGui::RadioButton("Always##npb3",settings.notePreviewBehavior==3)) { + settings.notePreviewBehavior=3; + } + + ImGui::Text("Allow dragging selection:"); + if (ImGui::RadioButton("No##dms0",settings.dragMovesSelection==0)) { + settings.dragMovesSelection=0; + } + if (ImGui::RadioButton("Yes##dms1",settings.dragMovesSelection==1)) { + settings.dragMovesSelection=1; + } + if (ImGui::RadioButton("Yes (while holding Ctrl only)##dms2",settings.dragMovesSelection==2)) { + settings.dragMovesSelection=2; + } + + ImGui::Text("Toggle channel solo on:"); + if (ImGui::RadioButton("Right-click or double-click##soloA",settings.soloAction==0)) { + settings.soloAction=0; + } + if (ImGui::RadioButton("Right-click##soloR",settings.soloAction==1)) { + settings.soloAction=1; + } + if (ImGui::RadioButton("Double-click##soloD",settings.soloAction==2)) { + settings.soloAction=2; + } + + bool doubleClickColumnB=settings.doubleClickColumn; + if (ImGui::Checkbox("Double click selects entire column",&doubleClickColumnB)) { + settings.doubleClickColumn=doubleClickColumnB; + } + + // SUBSECTION CURSOR BEHAVIOR + CONFIG_SUBSECTION("Cursor behavior"); + bool insertBehaviorB=settings.insertBehavior; + if (ImGui::Checkbox("Insert pushes entire channel row",&insertBehaviorB)) { + settings.insertBehavior=insertBehaviorB; + } + + bool pullDeleteRowB=settings.pullDeleteRow; + if (ImGui::Checkbox("Pull delete affects entire channel row",&pullDeleteRowB)) { + settings.pullDeleteRow=pullDeleteRowB; + } + + bool pushNibbleB=settings.pushNibble; + if (ImGui::Checkbox("Push value when overwriting instead of clearing it",&pushNibbleB)) { + settings.pushNibble=pushNibbleB; + } + + ImGui::Text("Effect input behavior:"); + if (ImGui::RadioButton("Move down##eicb0",settings.effectCursorDir==0)) { + settings.effectCursorDir=0; + } + if (ImGui::RadioButton("Move to effect value (otherwise move down)##eicb1",settings.effectCursorDir==1)) { + settings.effectCursorDir=1; + } + if (ImGui::RadioButton("Move to effect value/next effect and wrap around##eicb2",settings.effectCursorDir==2)) { + settings.effectCursorDir=2; + } + + bool effectDeletionAltersValueB=settings.effectDeletionAltersValue; + if (ImGui::Checkbox("Delete effect value when deleting effect",&effectDeletionAltersValueB)) { + settings.effectDeletionAltersValue=effectDeletionAltersValueB; + } + + bool absorbInsInputB=settings.absorbInsInput; + if (ImGui::Checkbox("Change current instrument when changing instrument column (absorb)",&absorbInsInputB)) { + settings.absorbInsInput=absorbInsInputB; + } + + // SUBSECTION CURSOR MOVEMENT + CONFIG_SUBSECTION("Cursor movement"); + + ImGui::Text("Wrap horizontally:"); + if (ImGui::RadioButton("No##wrapH0",settings.wrapHorizontal==0)) { + settings.wrapHorizontal=0; + } + if (ImGui::RadioButton("Yes##wrapH1",settings.wrapHorizontal==1)) { + settings.wrapHorizontal=1; + } + if (ImGui::RadioButton("Yes, and move to next/prev row##wrapH2",settings.wrapHorizontal==2)) { + settings.wrapHorizontal=2; + } + + ImGui::Text("Wrap vertically:"); + if (ImGui::RadioButton("No##wrapV0",settings.wrapVertical==0)) { + settings.wrapVertical=0; + } + if (ImGui::RadioButton("Yes##wrapV1",settings.wrapVertical==1)) { + settings.wrapVertical=1; + } + if (ImGui::RadioButton("Yes, and move to next/prev pattern##wrapV2",settings.wrapVertical==2)) { + settings.wrapVertical=2; + } + if (ImGui::RadioButton("Yes, and move to next/prev pattern (wrap around)##wrapV2",settings.wrapVertical==3)) { + settings.wrapVertical=3; + } + + ImGui::Text("Cursor movement keys behavior:"); + if (ImGui::RadioButton("Move by one##cmk0",settings.scrollStep==0)) { + settings.scrollStep=0; + } + if (ImGui::RadioButton("Move by Edit Step##cmk1",settings.scrollStep==1)) { + settings.scrollStep=1; + } + + bool stepOnDeleteB=settings.stepOnDelete; + if (ImGui::Checkbox("Move cursor by edit step on delete",&stepOnDeleteB)) { + settings.stepOnDelete=stepOnDeleteB; + } + + bool stepOnInsertB=settings.stepOnInsert; + if (ImGui::Checkbox("Move cursor by edit step on insert (push)",&stepOnInsertB)) { + settings.stepOnInsert=stepOnInsertB; + } + + bool pullDeleteBehaviorB=settings.pullDeleteBehavior; + if (ImGui::Checkbox("Move cursor up on backspace-delete",&pullDeleteBehaviorB)) { + settings.pullDeleteBehavior=pullDeleteBehaviorB; + } + + bool cursorPastePosB=settings.cursorPastePos; + if (ImGui::Checkbox("Move cursor to end of clipboard content when pasting",&cursorPastePosB)) { + settings.cursorPastePos=cursorPastePosB; + } + + // SUBSECTION SCROLLING + CONFIG_SUBSECTION("Scrolling"); + + ImGui::Text("Change order when scrolling outside of pattern bounds:"); + if (ImGui::RadioButton("No##pscroll0",settings.scrollChangesOrder==0)) { + settings.scrollChangesOrder=0; + } + if (ImGui::RadioButton("Yes##pscroll1",settings.scrollChangesOrder==1)) { + settings.scrollChangesOrder=1; + } + if (ImGui::RadioButton("Yes, and wrap around song##pscroll2",settings.scrollChangesOrder==2)) { + settings.scrollChangesOrder=2; + } + + bool cursorFollowsOrderB=settings.cursorFollowsOrder; + if (ImGui::Checkbox("Cursor follows current order when moving it",&cursorFollowsOrderB)) { + settings.cursorFollowsOrder=cursorFollowsOrderB; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("applies when playback is stopped."); + } + + bool cursorMoveNoScrollB=settings.cursorMoveNoScroll; + if (ImGui::Checkbox("Don't scroll when moving cursor",&cursorMoveNoScrollB)) { + settings.cursorMoveNoScroll=cursorMoveNoScrollB; + } + + bool cursorFollowsWheelB=settings.cursorFollowsWheel; + if (ImGui::Checkbox("Move cursor with scroll wheel",&cursorFollowsWheelB)) { + settings.cursorFollowsWheel=cursorFollowsWheelB; + } + + END_SECTION; } - if (ImGui::BeginTabItem("Audio/MIDI (OLD)")) { - ImVec2 settingsViewSize=ImGui::GetContentRegionAvail(); - settingsViewSize.y-=ImGui::GetFrameHeight()+ImGui::GetStyle().WindowPadding.y; - if (ImGui::BeginChild("SettingsView",settingsViewSize)) { -#ifdef HAVE_JACK - ImGui::Text("Backend"); - ImGui::SameLine(); - int prevAudioEngine=settings.audioEngine; - if (ImGui::Combo("##Backend",&settings.audioEngine,audioBackends,2)) { - if (settings.audioEngine!=prevAudioEngine) { - if (!isProAudio[settings.audioEngine]) settings.audioChans=2; - } - } -#endif - - if (settings.audioEngine==DIV_AUDIO_SDL) { - ImGui::Text("Driver"); - ImGui::SameLine(); - if (ImGui::BeginCombo("##SDLADriver",settings.sdlAudioDriver.empty()?"Automatic":settings.sdlAudioDriver.c_str())) { - if (ImGui::Selectable("Automatic",settings.sdlAudioDriver.empty())) { - settings.sdlAudioDriver=""; - } - for (String& i: availAudioDrivers) { - if (ImGui::Selectable(i.c_str(),i==settings.sdlAudioDriver)) { - settings.sdlAudioDriver=i; - } - } - ImGui::EndCombo(); - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("you may need to restart Furnace for this setting to take effect."); - } - } - - ImGui::Text("Device"); - ImGui::SameLine(); - String audioDevName=settings.audioDevice.empty()?"":settings.audioDevice; - if (ImGui::BeginCombo("##AudioDevice",audioDevName.c_str())) { - if (ImGui::Selectable("",settings.audioDevice.empty())) { - settings.audioDevice=""; - } - for (String& i: e->getAudioDevices()) { - if (ImGui::Selectable(i.c_str(),i==settings.audioDevice)) { - settings.audioDevice=i; - } - } - ImGui::EndCombo(); - } - - ImGui::Text("Sample rate"); - ImGui::SameLine(); - String sr=fmt::sprintf("%d",settings.audioRate); - if (ImGui::BeginCombo("##SampleRate",sr.c_str())) { - SAMPLE_RATE_SELECTABLE(8000); - SAMPLE_RATE_SELECTABLE(16000); - SAMPLE_RATE_SELECTABLE(22050); - SAMPLE_RATE_SELECTABLE(32000); - SAMPLE_RATE_SELECTABLE(44100); - SAMPLE_RATE_SELECTABLE(48000); - SAMPLE_RATE_SELECTABLE(88200); - SAMPLE_RATE_SELECTABLE(96000); - SAMPLE_RATE_SELECTABLE(192000); - ImGui::EndCombo(); - } - - if (isProAudio[settings.audioEngine]) { - ImGui::Text("Outputs"); - ImGui::SameLine(); - if (ImGui::InputInt("##AudioChansI",&settings.audioChans,1,1)) { - if (settings.audioChans<1) settings.audioChans=1; - if (settings.audioChans>16) settings.audioChans=16; - } + CONFIG_SECTION("Appearance") { + // SUBSECTION INTERFACE + CONFIG_SUBSECTION("Scaling"); + bool dpiScaleAuto=(settings.dpiScale<0.5f); + if (ImGui::Checkbox("Automatic UI scaling factor",&dpiScaleAuto)) { + if (dpiScaleAuto) { + settings.dpiScale=0.0f; } else { - ImGui::Text("Channels"); - ImGui::SameLine(); - String chStr=(settings.audioChans<1 || settings.audioChans>8)?"What?":nonProAudioOuts[settings.audioChans-1]; - if (ImGui::BeginCombo("##AudioChans",chStr.c_str())) { - CHANS_SELECTABLE(1); - CHANS_SELECTABLE(2); - CHANS_SELECTABLE(4); - CHANS_SELECTABLE(6); - CHANS_SELECTABLE(8); - ImGui::EndCombo(); - } - } - - ImGui::Text("Buffer size"); - ImGui::SameLine(); - String bs=fmt::sprintf("%d (latency: ~%.1fms)",settings.audioBufSize,2000.0*(double)settings.audioBufSize/(double)MAX(1,settings.audioRate)); - if (ImGui::BeginCombo("##BufferSize",bs.c_str())) { - BUFFER_SIZE_SELECTABLE(64); - BUFFER_SIZE_SELECTABLE(128); - BUFFER_SIZE_SELECTABLE(256); - BUFFER_SIZE_SELECTABLE(512); - BUFFER_SIZE_SELECTABLE(1024); - BUFFER_SIZE_SELECTABLE(2048); - ImGui::EndCombo(); - } - - ImGui::Text("Quality"); - ImGui::SameLine(); - ImGui::Combo("##Quality",&settings.audioQuality,audioQualities,2); - - ImGui::Text("Metronome volume"); - ImGui::SameLine(); - if (ImGui::SliderInt("##MetroVol",&settings.metroVol,0,200,"%d%%")) { - if (settings.metroVol<0) settings.metroVol=0; - if (settings.metroVol>200) settings.metroVol=200; - e->setMetronomeVol(((float)settings.metroVol)/100.0f); - } - - bool lowLatencyB=settings.lowLatency; - if (ImGui::Checkbox("Low-latency mode (experimental!)",&lowLatencyB)) { - settings.lowLatency=lowLatencyB; - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("reduces latency by running the engine faster than the tick rate.\nuseful for live playback/jam mode.\n\nwarning: experimental! may produce glitches.\nonly enable if your buffer size is small (10ms or less)."); - } - - bool forceMonoB=settings.forceMono; - if (ImGui::Checkbox("Force mono audio",&forceMonoB)) { - settings.forceMono=forceMonoB; - } - - bool clampSamplesB=settings.clampSamples; - if (ImGui::Checkbox("Software clipping",&clampSamplesB)) { - settings.clampSamples=clampSamplesB; - } - - TAAudioDesc& audioWant=e->getAudioDescWant(); - TAAudioDesc& audioGot=e->getAudioDescGot(); - - ImGui::Text("want: %d samples @ %.0fHz (%d channels)",audioWant.bufsize,audioWant.rate,audioWant.outChans); - ImGui::Text("got: %d samples @ %.0fHz (%d channels)",audioGot.bufsize,audioGot.rate,audioWant.outChans); - - ImGui::Separator(); - - ImGui::Text("MIDI input"); - ImGui::SameLine(); - String midiInName=settings.midiInDevice.empty()?"":settings.midiInDevice; - bool hasToReloadMidi=false; - if (ImGui::BeginCombo("##MidiInDevice",midiInName.c_str())) { - if (ImGui::Selectable("",settings.midiInDevice.empty())) { - settings.midiInDevice=""; - hasToReloadMidi=true; - } - for (String& i: e->getMidiIns()) { - if (ImGui::Selectable(i.c_str(),i==settings.midiInDevice)) { - settings.midiInDevice=i; - hasToReloadMidi=true; - } - } - ImGui::EndCombo(); - } - - if (hasToReloadMidi) { - midiMap.read(e->getConfigPath()+DIR_SEPARATOR_STR+"midiIn_"+stripName(settings.midiInDevice)+".cfg"); - midiMap.compile(); - } - - ImGui::Text("MIDI output"); - ImGui::SameLine(); - String midiOutName=settings.midiOutDevice.empty()?"":settings.midiOutDevice; - if (ImGui::BeginCombo("##MidiOutDevice",midiOutName.c_str())) { - if (ImGui::Selectable("",settings.midiOutDevice.empty())) { - settings.midiOutDevice=""; - } - for (String& i: e->getMidiIns()) { - if (ImGui::Selectable(i.c_str(),i==settings.midiOutDevice)) { - settings.midiOutDevice=i; - } - } - ImGui::EndCombo(); - } - - if (ImGui::TreeNode("MIDI input settings")) { - ImGui::Checkbox("Note input",&midiMap.noteInput); - ImGui::Checkbox("Velocity input",&midiMap.volInput); - // TODO - //ImGui::Checkbox("Use raw velocity value (don't map from linear to log)",&midiMap.rawVolume); - //ImGui::Checkbox("Polyphonic/chord input",&midiMap.polyInput); - ImGui::Checkbox("Map MIDI channels to direct channels",&midiMap.directChannel); - ImGui::Checkbox("Map Yamaha FM voice data to instruments",&midiMap.yamahaFMResponse); - ImGui::Checkbox("Program change is instrument selection",&midiMap.programChange); - //ImGui::Checkbox("Listen to MIDI clock",&midiMap.midiClock); - //ImGui::Checkbox("Listen to MIDI time code",&midiMap.midiTimeCode); - ImGui::Combo("Value input style",&midiMap.valueInputStyle,valueInputStyles,7); - if (midiMap.valueInputStyle>3) { - if (midiMap.valueInputStyle==6) { - if (ImGui::InputInt("Control##valueCCS",&midiMap.valueInputControlSingle,1,16)) { - if (midiMap.valueInputControlSingle<0) midiMap.valueInputControlSingle=0; - if (midiMap.valueInputControlSingle>127) midiMap.valueInputControlSingle=127; - } - } else { - if (ImGui::InputInt((midiMap.valueInputStyle==4)?"CC of upper nibble##valueCC1":"MSB CC##valueCC1",&midiMap.valueInputControlMSB,1,16)) { - if (midiMap.valueInputControlMSB<0) midiMap.valueInputControlMSB=0; - if (midiMap.valueInputControlMSB>127) midiMap.valueInputControlMSB=127; - } - if (ImGui::InputInt((midiMap.valueInputStyle==4)?"CC of lower nibble##valueCC2":"LSB CC##valueCC2",&midiMap.valueInputControlLSB,1,16)) { - if (midiMap.valueInputControlLSB<0) midiMap.valueInputControlLSB=0; - if (midiMap.valueInputControlLSB>127) midiMap.valueInputControlLSB=127; - } - } - } - if (ImGui::TreeNode("Per-column control change")) { - for (int i=0; i<18; i++) { - ImGui::PushID(i); - ImGui::Combo(specificControls[i],&midiMap.valueInputSpecificStyle[i],valueSInputStyles,4); - if (midiMap.valueInputSpecificStyle[i]>0) { - ImGui::Indent(); - if (midiMap.valueInputSpecificStyle[i]==3) { - if (ImGui::InputInt("Control##valueCCS",&midiMap.valueInputSpecificSingle[i],1,16)) { - if (midiMap.valueInputSpecificSingle[i]<0) midiMap.valueInputSpecificSingle[i]=0; - if (midiMap.valueInputSpecificSingle[i]>127) midiMap.valueInputSpecificSingle[i]=127; - } - } else { - if (ImGui::InputInt((midiMap.valueInputSpecificStyle[i]==4)?"CC of upper nibble##valueCC1":"MSB CC##valueCC1",&midiMap.valueInputSpecificMSB[i],1,16)) { - if (midiMap.valueInputSpecificMSB[i]<0) midiMap.valueInputSpecificMSB[i]=0; - if (midiMap.valueInputSpecificMSB[i]>127) midiMap.valueInputSpecificMSB[i]=127; - } - if (ImGui::InputInt((midiMap.valueInputSpecificStyle[i]==4)?"CC of lower nibble##valueCC2":"LSB CC##valueCC2",&midiMap.valueInputSpecificLSB[i],1,16)) { - if (midiMap.valueInputSpecificLSB[i]<0) midiMap.valueInputSpecificLSB[i]=0; - if (midiMap.valueInputSpecificLSB[i]>127) midiMap.valueInputSpecificLSB[i]=127; - } - } - ImGui::Unindent(); - } - ImGui::PopID(); - } - ImGui::TreePop(); - } - if (ImGui::SliderFloat("Volume curve",&midiMap.volExp,0.01,8.0,"%.2f")) { - if (midiMap.volExp<0.01) midiMap.volExp=0.01; - if (midiMap.volExp>8.0) midiMap.volExp=8.0; - } rightClickable - float curve[128]; - for (int i=0; i<128; i++) { - curve[i]=(int)(pow((double)i/127.0,midiMap.volExp)*127.0); - } - ImGui::PlotLines("##VolCurveDisplay",curve,128,0,"Volume curve",0.0,127.0,ImVec2(200.0f*dpiScale,200.0f*dpiScale)); - - ImGui::Text("Actions:"); - ImGui::SameLine(); - if (ImGui::Button(ICON_FA_PLUS "##AddAction")) { - midiMap.binds.push_back(MIDIBind()); - } - ImGui::SameLine(); - if (ImGui::Button(ICON_FA_EXTERNAL_LINK "##AddLearnAction")) { - midiMap.binds.push_back(MIDIBind()); - learning=midiMap.binds.size()-1; - } - if (learning!=-1) { - ImGui::SameLine(); - ImGui::Text("(learning! press a button or move a slider/knob/something on your device.)"); - } - - if (ImGui::BeginTable("MIDIActions",7)) { - ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthStretch,0.2); - ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthStretch,0.1); - ImGui::TableSetupColumn("c2",ImGuiTableColumnFlags_WidthStretch,0.3); - ImGui::TableSetupColumn("c3",ImGuiTableColumnFlags_WidthStretch,0.2); - ImGui::TableSetupColumn("c4",ImGuiTableColumnFlags_WidthStretch,0.5); - ImGui::TableSetupColumn("c5",ImGuiTableColumnFlags_WidthFixed); - ImGui::TableSetupColumn("c6",ImGuiTableColumnFlags_WidthFixed); - - ImGui::TableNextRow(ImGuiTableRowFlags_Headers); - ImGui::TableNextColumn(); - ImGui::Text("Type"); - ImGui::TableNextColumn(); - ImGui::Text("Channel"); - ImGui::TableNextColumn(); - ImGui::Text("Note/Control"); - ImGui::TableNextColumn(); - ImGui::Text("Velocity/Value"); - ImGui::TableNextColumn(); - ImGui::Text("Action"); - ImGui::TableNextColumn(); - ImGui::Text("Learn"); - ImGui::TableNextColumn(); - ImGui::Text("Remove"); - - for (size_t i=0; i0 && (bind.data1+60)<180) { - nName=noteNames[bind.data1+60]; - } - snprintf(bindID,1024,"%d (0x%.2X, %s)",bind.data1,bind.data1,nName); - } - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::BeginCombo("##BValue1",bindID)) { - if (ImGui::Selectable("Any",bind.data1==128)) { - bind.data1=128; - } - for (int j=0; j<128; j++) { - const char* nName="???"; - if ((j+60)>0 && (j+60)<180) { - nName=noteNames[j+60]; - } - snprintf(bindID,1024,"%d (0x%.2X, %s)##BV1_%d",j,j,nName,j); - if (ImGui::Selectable(bindID,bind.data1==j)) { - bind.data1=j; - } - } - ImGui::EndCombo(); - } - - ImGui::TableNextColumn(); - if (bind.data2==128) { - snprintf(bindID,1024,"Any"); - } else { - snprintf(bindID,1024,"%d (0x%.2X)",bind.data2,bind.data2); - } - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::BeginCombo("##BValue2",bindID)) { - if (ImGui::Selectable("Any",bind.data2==128)) { - bind.data2=128; - } - for (int j=0; j<128; j++) { - snprintf(bindID,1024,"%d (0x%.2X)##BV2_%d",j,j,j); - if (ImGui::Selectable(bindID,bind.data2==j)) { - bind.data2=j; - } - } - ImGui::EndCombo(); - } - - ImGui::TableNextColumn(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::BeginCombo("##BAction",(bind.action==0)?"--none--":guiActions[bind.action].friendlyName)) { - if (ImGui::Selectable("--none--",bind.action==0)) { - bind.action=0; - } - for (int j=0; j3.0f) settings.dpiScale=3.0f; + } rightClickable + } + + if (ImGui::InputInt("Icon size",&settings.iconSize)) { + if (settings.iconSize<3) settings.iconSize=3; + if (settings.iconSize>48) settings.iconSize=48; + } + + // SUBSECTION TEXT + CONFIG_SUBSECTION("Text"); + ImGui::Text("Main font"); + ImGui::SameLine(); + ImGui::Combo("##MainFont",&settings.mainFont,mainFonts,7); + if (settings.mainFont==6) { + ImGui::InputText("##MainFontPath",&settings.mainFontPath); + ImGui::SameLine(); + if (ImGui::Button(ICON_FA_FOLDER "##MainFontLoad")) { + openFileDialog(GUI_FILE_LOAD_MAIN_FONT); + } + } + if (ImGui::InputInt("Size##MainFontSize",&settings.mainFontSize)) { + if (settings.mainFontSize<3) settings.mainFontSize=3; + if (settings.mainFontSize>96) settings.mainFontSize=96; + } + ImGui::Text("Pattern font"); + ImGui::SameLine(); + ImGui::Combo("##PatFont",&settings.patFont,patFonts,7); + if (settings.patFont==6) { + ImGui::InputText("##PatFontPath",&settings.patFontPath); + ImGui::SameLine(); + if (ImGui::Button(ICON_FA_FOLDER "##PatFontLoad")) { + openFileDialog(GUI_FILE_LOAD_PAT_FONT); + } + } + if (ImGui::InputInt("Size##PatFontSize",&settings.patFontSize)) { + if (settings.patFontSize<3) settings.patFontSize=3; + if (settings.patFontSize>96) settings.patFontSize=96; + } + + bool loadJapaneseB=settings.loadJapanese; + if (ImGui::Checkbox("Display Japanese characters",&loadJapaneseB)) { + settings.loadJapanese=loadJapaneseB; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip( + "Only toggle this option if you have enough graphics memory.\n" + "This is a temporary solution until dynamic font atlas is implemented in Dear ImGui.\n\n" + "このオプションは、十分なグラフィックメモリがある場合にのみ切り替えてください。\n" + "これは、Dear ImGuiにダイナミックフォントアトラスが実装されるまでの一時的な解決策です。" + ); + } + + bool loadChineseB=settings.loadChinese; + if (ImGui::Checkbox("Display Chinese (Simplified) characters",&loadChineseB)) { + settings.loadChinese=loadChineseB; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip( + "Only toggle this option if you have enough graphics memory.\n" + "This is a temporary solution until dynamic font atlas is implemented in Dear ImGui.\n\n" + "请在确保你有足够的显存后再启动此设定\n" + "这是一个在ImGui实现动态字体加载之前的临时解决方案" + ); + } + + bool loadChineseTraditionalB=settings.loadChineseTraditional; + if (ImGui::Checkbox("Display Chinese (Traditional) characters",&loadChineseTraditionalB)) { + settings.loadChineseTraditional=loadChineseTraditionalB; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip( + "Only toggle this option if you have enough graphics memory.\n" + "This is a temporary solution until dynamic font atlas is implemented in Dear ImGui.\n\n" + "請在確保你有足夠的顯存后再啟動此設定\n" + "這是一個在ImGui實現動態字體加載之前的臨時解決方案" + ); + } + + bool loadKoreanB=settings.loadKorean; + if (ImGui::Checkbox("Display Korean characters",&loadKoreanB)) { + settings.loadKorean=loadKoreanB; + } + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip( + "Only toggle this option if you have enough graphics memory.\n" + "This is a temporary solution until dynamic font atlas is implemented in Dear ImGui.\n\n" + "그래픽 메모리가 충분한 경우에만 이 옵션을 선택하십시오.\n" + "이 옵션은 Dear ImGui에 동적 글꼴 아틀라스가 구현될 때까지 임시 솔루션입니다." + ); + } + + // SUBSECTION PROGRAM + CONFIG_SUBSECTION("Program"); + ImGui::Text("Title bar:"); + if (ImGui::RadioButton("Furnace##tbar0",settings.titleBarInfo==0)) { + settings.titleBarInfo=0; + updateWindowTitle(); + } + if (ImGui::RadioButton("Song Name - Furnace##tbar1",settings.titleBarInfo==1)) { + settings.titleBarInfo=1; + updateWindowTitle(); + } + if (ImGui::RadioButton("file_name.fur - Furnace##tbar2",settings.titleBarInfo==2)) { + settings.titleBarInfo=2; + updateWindowTitle(); + } + if (ImGui::RadioButton("/path/to/file.fur - Furnace##tbar3",settings.titleBarInfo==3)) { + settings.titleBarInfo=3; + updateWindowTitle(); + } + + bool titleBarSysB=settings.titleBarSys; + if (ImGui::Checkbox("Display system name on title bar",&titleBarSysB)) { + settings.titleBarSys=titleBarSysB; + updateWindowTitle(); + } + + bool noMultiSystemB=settings.noMultiSystem; + if (ImGui::Checkbox("Display chip names instead of \"multi-system\" in title bar",&noMultiSystemB)) { + settings.noMultiSystem=noMultiSystemB; + updateWindowTitle(); + } + + ImGui::Text("Status bar:"); + if (ImGui::RadioButton("Cursor details##sbar0",settings.statusDisplay==0)) { + settings.statusDisplay=0; + } + if (ImGui::RadioButton("File path##sbar1",settings.statusDisplay==1)) { + settings.statusDisplay=1; + } + if (ImGui::RadioButton("Cursor details or file path##sbar2",settings.statusDisplay==2)) { + settings.statusDisplay=2; + } + if (ImGui::RadioButton("Nothing##sbar3",settings.statusDisplay==3)) { + settings.statusDisplay=3; + } + + // SUBSECTION ORDERS + CONFIG_SUBSECTION("Orders"); + // sorry. temporarily disabled until ImGui has a way to add separators in tables arbitrarily. + /*bool sysSeparatorsB=settings.sysSeparators; + if (ImGui::Checkbox("Add separators between systems in Orders",&sysSeparatorsB)) { + settings.sysSeparators=sysSeparatorsB; + }*/ + + bool ordersCursorB=settings.ordersCursor; + if (ImGui::Checkbox("Highlight channel at cursor in Orders",&ordersCursorB)) { + settings.ordersCursor=ordersCursorB; + } + + ImGui::Text("Orders row number format:"); + if (ImGui::RadioButton("Decimal##orbD",settings.orderRowsBase==0)) { + settings.orderRowsBase=0; + } + if (ImGui::RadioButton("Hexadecimal##orbH",settings.orderRowsBase==1)) { + settings.orderRowsBase=1; + } + + // SUBSECTION PATTERN + CONFIG_SUBSECTION("Pattern"); + bool centerPatternB=settings.centerPattern; + if (ImGui::Checkbox("Center pattern view",¢erPatternB)) { + settings.centerPattern=centerPatternB; + } + + bool overflowHighlightB=settings.overflowHighlight; + if (ImGui::Checkbox("Overflow pattern highlights",&overflowHighlightB)) { + settings.overflowHighlight=overflowHighlightB; + } + + bool viewPrevPatternB=settings.viewPrevPattern; + if (ImGui::Checkbox("Display previous/next pattern",&viewPrevPatternB)) { + settings.viewPrevPattern=viewPrevPatternB; + } + + ImGui::Text("Pattern row number format:"); + if (ImGui::RadioButton("Decimal##prbD",settings.patRowsBase==0)) { + settings.patRowsBase=0; + } + if (ImGui::RadioButton("Hexadecimal##prbH",settings.patRowsBase==1)) { + settings.patRowsBase=1; + } + + ImGui::Text("Pattern view labels:"); + ImGui::InputTextWithHint("Note off (3-char)","OFF",&settings.noteOffLabel); + ImGui::InputTextWithHint("Note release (3-char)","===",&settings.noteRelLabel); + ImGui::InputTextWithHint("Macro release (3-char)","REL",&settings.macroRelLabel); + ImGui::InputTextWithHint("Empty field (3-char)","...",&settings.emptyLabel); + ImGui::InputTextWithHint("Empty field (2-char)","..",&settings.emptyLabel2); + + ImGui::Text("Pattern view spacing after:"); + + if (CWSliderInt("Note",&settings.noteCellSpacing,0,32)) { + if (settings.noteCellSpacing<0) settings.noteCellSpacing=0; + if (settings.noteCellSpacing>32) settings.noteCellSpacing=32; + } + + if (CWSliderInt("Instrument",&settings.insCellSpacing,0,32)) { + if (settings.insCellSpacing<0) settings.insCellSpacing=0; + if (settings.insCellSpacing>32) settings.insCellSpacing=32; + } + + if (CWSliderInt("Volume",&settings.volCellSpacing,0,32)) { + if (settings.volCellSpacing<0) settings.volCellSpacing=0; + if (settings.volCellSpacing>32) settings.volCellSpacing=32; + } + + if (CWSliderInt("Effect",&settings.effectCellSpacing,0,32)) { + if (settings.effectCellSpacing<0) settings.effectCellSpacing=0; + if (settings.effectCellSpacing>32) settings.effectCellSpacing=32; + } + + if (CWSliderInt("Effect value",&settings.effectValCellSpacing,0,32)) { + if (settings.effectValCellSpacing<0) settings.effectValCellSpacing=0; + if (settings.effectValCellSpacing>32) settings.effectValCellSpacing=32; + } + + bool oneDigitEffectsB=settings.oneDigitEffects; + if (ImGui::Checkbox("Single-digit effects for 00-0F",&oneDigitEffectsB)) { + settings.oneDigitEffects=oneDigitEffectsB; + } + + bool flatNotesB=settings.flatNotes; + if (ImGui::Checkbox("Use flats instead of sharps",&flatNotesB)) { + settings.flatNotes=flatNotesB; + } + + bool germanNotationB=settings.germanNotation; + if (ImGui::Checkbox("Use German notation",&germanNotationB)) { + settings.germanNotation=germanNotationB; + } + + // SUBSECTION CHANNEL + CONFIG_SUBSECTION("Channel"); + + ImGui::Text("Channel style:"); + if (ImGui::RadioButton("Classic##CHS0",settings.channelStyle==0)) { + settings.channelStyle=0; + } + if (ImGui::RadioButton("Line##CHS1",settings.channelStyle==1)) { + settings.channelStyle=1; + } + if (ImGui::RadioButton("Round##CHS2",settings.channelStyle==2)) { + settings.channelStyle=2; + } + if (ImGui::RadioButton("Split button##CHS3",settings.channelStyle==3)) { + settings.channelStyle=3; + } + if (ImGui::RadioButton("Square border##CH42",settings.channelStyle==4)) { + settings.channelStyle=4; + } + if (ImGui::RadioButton("Round border##CHS5",settings.channelStyle==5)) { + settings.channelStyle=5; + } + + ImGui::Text("Channel volume bar:"); + if (ImGui::RadioButton("None##CHV0",settings.channelVolStyle==0)) { + settings.channelVolStyle=0; + } + if (ImGui::RadioButton("Simple##CHV1",settings.channelVolStyle==1)) { + settings.channelVolStyle=1; + } + if (ImGui::RadioButton("Stereo##CHV2",settings.channelVolStyle==2)) { + settings.channelVolStyle=2; + } + if (ImGui::RadioButton("Real##CHV3",settings.channelVolStyle==3)) { + settings.channelVolStyle=3; + } + if (ImGui::RadioButton("Real (stereo)##CHV4",settings.channelVolStyle==4)) { + settings.channelVolStyle=4; + } + + ImGui::Text("Channel feedback style:"); + + if (ImGui::RadioButton("Off##CHF0",settings.channelFeedbackStyle==0)) { + settings.channelFeedbackStyle=0; + } + if (ImGui::RadioButton("Note##CHF1",settings.channelFeedbackStyle==1)) { + settings.channelFeedbackStyle=1; + } + if (ImGui::RadioButton("Volume##CHF2",settings.channelFeedbackStyle==2)) { + settings.channelFeedbackStyle=2; + } + if (ImGui::RadioButton("Active##CHF3",settings.channelFeedbackStyle==3)) { + settings.channelFeedbackStyle=3; + } + + ImGui::Text("Channel font:"); + + if (ImGui::RadioButton("Regular##CHFont0",settings.channelFont==0)) { + settings.channelFont=0; + } + if (ImGui::RadioButton("Monospace##CHFont1",settings.channelFont==1)) { + settings.channelFont=1; + } + + bool channelTextCenterB=settings.channelTextCenter; + if (ImGui::Checkbox("Center channel name",&channelTextCenterB)) { + settings.channelTextCenter=channelTextCenterB; + } + + ImGui::Text("Channel colors:"); + if (ImGui::RadioButton("Single##CHC0",settings.channelColors==0)) { + settings.channelColors=0; + } + if (ImGui::RadioButton("Channel type##CHC1",settings.channelColors==1)) { + settings.channelColors=1; + } + if (ImGui::RadioButton("Instrument type##CHC2",settings.channelColors==2)) { + settings.channelColors=2; + } + + ImGui::Text("Channel name colors:"); + if (ImGui::RadioButton("Single##CTC0",settings.channelTextColors==0)) { + settings.channelTextColors=0; + } + if (ImGui::RadioButton("Channel type##CTC1",settings.channelTextColors==1)) { + settings.channelTextColors=1; + } + if (ImGui::RadioButton("Instrument type##CTC2",settings.channelTextColors==2)) { + settings.channelTextColors=2; + } + + // SUBSECTION ASSETS + CONFIG_SUBSECTION("Assets"); + bool unifiedDataViewB=settings.unifiedDataView; + if (ImGui::Checkbox("Unified instrument/wavetable/sample list",&unifiedDataViewB)) { + settings.unifiedDataView=unifiedDataViewB; + } + if (settings.unifiedDataView) { + settings.horizontalDataView=0; + } + + ImGui::BeginDisabled(settings.unifiedDataView); + bool horizontalDataViewB=settings.horizontalDataView; + if (ImGui::Checkbox("Horizontal instrument list",&horizontalDataViewB)) { + settings.horizontalDataView=horizontalDataViewB; + } + ImGui::EndDisabled(); + + bool insEditColorizeB=settings.insEditColorize; + if (ImGui::Checkbox("Colorize instrument editor using instrument type",&insEditColorizeB)) { + settings.insEditColorize=insEditColorizeB; + } + + // SUBSECTION MACRO EDITOR + CONFIG_SUBSECTION("Macro Editor"); + ImGui::Text("Macro editor layout:"); + if (ImGui::RadioButton("Unified##mel0",settings.macroLayout==0)) { + settings.macroLayout=0; + } + if (ImGui::RadioButton("Mobile##mel1",settings.macroLayout==1)) { + settings.macroLayout=1; + } + if (ImGui::RadioButton("Grid##mel2",settings.macroLayout==2)) { + settings.macroLayout=2; + } + if (ImGui::RadioButton("Single (with list)##mel3",settings.macroLayout==3)) { + settings.macroLayout=3; + } + if (ImGui::RadioButton("Single (combo box)##mel4",settings.macroLayout==4)) { + settings.macroLayout=4; + } + + bool oldMacroVSliderB=settings.oldMacroVSlider; + if (ImGui::Checkbox("Use classic macro editor vertical slider",&oldMacroVSliderB)) { + settings.oldMacroVSlider=oldMacroVSliderB; + } + + // SUBSECTION WAVE EDITOR + CONFIG_SUBSECTION("Wave Editor"); + bool waveLayoutB=settings.waveLayout; + if (ImGui::Checkbox("Use compact wave editor",&waveLayoutB)) { + settings.waveLayout=waveLayoutB; + } + + // SUBSECTION FM EDITOR + CONFIG_SUBSECTION("FM Editor"); + ImGui::Text("FM parameter names:"); + if (ImGui::RadioButton("Friendly##fmn0",settings.fmNames==0)) { + settings.fmNames=0; + } + if (ImGui::RadioButton("Technical##fmn1",settings.fmNames==1)) { + settings.fmNames=1; + } + if (ImGui::RadioButton("Technical (alternate)##fmn2",settings.fmNames==2)) { + settings.fmNames=2; + } + + bool oplStandardWaveNamesB=settings.oplStandardWaveNames; + if (ImGui::Checkbox("Use standard OPL waveform names",&oplStandardWaveNamesB)) { + settings.oplStandardWaveNames=oplStandardWaveNamesB; + } + + ImGui::Text("FM parameter editor layout:"); + if (ImGui::RadioButton("Modern##fml0",settings.fmLayout==0)) { + settings.fmLayout=0; + } + if (ImGui::RadioButton("Compact (2x2, classic)##fml1",settings.fmLayout==1)) { + settings.fmLayout=1; + } + if (ImGui::RadioButton("Compact (1x4)##fml2",settings.fmLayout==2)) { + settings.fmLayout=2; + } + if (ImGui::RadioButton("Compact (4x1)##fml3",settings.fmLayout==3)) { + settings.fmLayout=3; + } + if (ImGui::RadioButton("Alternate (2x2)##fml4",settings.fmLayout==4)) { + settings.fmLayout=4; + } + if (ImGui::RadioButton("Alternate (1x4)##fml5",settings.fmLayout==5)) { + settings.fmLayout=5; + } + if (ImGui::RadioButton("Alternate (4x1)##fml5",settings.fmLayout==6)) { + settings.fmLayout=6; + } + + ImGui::Text("Position of Sustain in FM editor:"); + if (ImGui::RadioButton("Between Decay and Sustain Rate##susp0",settings.susPosition==0)) { + settings.susPosition=0; + } + if (ImGui::RadioButton("After Release Rate##susp1",settings.susPosition==1)) { + settings.susPosition=1; + } + + bool separateFMColorsB=settings.separateFMColors; + if (ImGui::Checkbox("Use separate colors for carriers/modulators in FM editor",&separateFMColorsB)) { + settings.separateFMColors=separateFMColorsB; + } + + bool unsignedDetuneB=settings.unsignedDetune; + if (ImGui::Checkbox("Unsigned FM detune values",&unsignedDetuneB)) { + settings.unsignedDetune=unsignedDetuneB; + } + + // SUBSECTION STATISTICS + CONFIG_SUBSECTION("Statistics"); + ImGui::Text("Chip memory usage unit:"); + if (ImGui::RadioButton("Bytes##MUU0",settings.memUsageUnit==0)) { + settings.memUsageUnit=0; + } + if (ImGui::RadioButton("Kilobytes##MUU1",settings.memUsageUnit==1)) { + settings.memUsageUnit=1; + } + + // SUBSECTION OSCILLOSCOPE + CONFIG_SUBSECTION("Oscilloscope"); + bool oscRoundedCornersB=settings.oscRoundedCorners; + if (ImGui::Checkbox("Rounded corners",&oscRoundedCornersB)) { + settings.oscRoundedCorners=oscRoundedCornersB; + } + + bool oscBorderB=settings.oscBorder; + if (ImGui::Checkbox("Border",&oscBorderB)) { + settings.oscBorder=oscBorderB; + } + + bool oscTakesEntireWindowB=settings.oscTakesEntireWindow; + if (ImGui::Checkbox("Fill entire window",&oscTakesEntireWindowB)) { + settings.oscTakesEntireWindow=oscTakesEntireWindowB; + } + + bool oscEscapesBoundaryB=settings.oscEscapesBoundary; + if (ImGui::Checkbox("Waveform goes out of bounds",&oscEscapesBoundaryB)) { + settings.oscEscapesBoundary=oscEscapesBoundaryB; + } + + // SUBSECTION WINDOWS + CONFIG_SUBSECTION("Windows"); + bool roundedWindowsB=settings.roundedWindows; + if (ImGui::Checkbox("Rounded window corners",&roundedWindowsB)) { + settings.roundedWindows=roundedWindowsB; + } + + bool roundedButtonsB=settings.roundedButtons; + if (ImGui::Checkbox("Rounded buttons",&roundedButtonsB)) { + settings.roundedButtons=roundedButtonsB; + } + + bool roundedMenusB=settings.roundedMenus; + if (ImGui::Checkbox("Rounded menu corners",&roundedMenusB)) { + settings.roundedMenus=roundedMenusB; + } + + bool frameBordersB=settings.frameBorders; + if (ImGui::Checkbox("Borders around widgets",&frameBordersB)) { + settings.frameBorders=frameBordersB; + } + + END_SECTION; } - if (ImGui::BeginTabItem("Emulation (OLD)")) { - ImVec2 settingsViewSize=ImGui::GetContentRegionAvail(); - settingsViewSize.y-=ImGui::GetFrameHeight()+ImGui::GetStyle().WindowPadding.y; - if (ImGui::BeginChild("SettingsView",settingsViewSize)) { - ImGui::Text("Arcade/YM2151 core"); - ImGui::SameLine(); - ImGui::Combo("##ArcadeCore",&settings.arcadeCore,arcadeCores,2); - - ImGui::Text("Genesis/YM2612 core"); - ImGui::SameLine(); - ImGui::Combo("##YM2612Core",&settings.ym2612Core,ym2612Cores,2); - - ImGui::Text("SN76489 core"); - ImGui::SameLine(); - ImGui::Combo("##SNCore",&settings.snCore,snCores,2); - - ImGui::Text("NES core"); - ImGui::SameLine(); - ImGui::Combo("##NESCore",&settings.nesCore,nesCores,2); - - ImGui::Text("FDS core"); - ImGui::SameLine(); - ImGui::Combo("##FDSCore",&settings.fdsCore,nesCores,2); - - ImGui::Text("SID core"); - ImGui::SameLine(); - ImGui::Combo("##C64Core",&settings.c64Core,c64Cores,3); - - ImGui::Text("POKEY core"); - ImGui::SameLine(); - ImGui::Combo("##POKEYCore",&settings.pokeyCore,pokeyCores,2); - - ImGui::Text("OPN/OPNA/OPNB cores"); - ImGui::SameLine(); - ImGui::Combo("##OPNCore",&settings.opnCore,opnCores,2); - - ImGui::Separator(); - - ImGui::Text("PC Speaker strategy"); - ImGui::SameLine(); - ImGui::Combo("##PCSOutMethod",&settings.pcSpeakerOutMethod,pcspkrOutMethods,5); - - ImGui::Separator(); - ImGui::Text("Sample ROMs:"); - - ImGui::Text("OPL4 YRW801 path"); - ImGui::SameLine(); - ImGui::InputText("##YRW801Path",&settings.yrw801Path); - ImGui::SameLine(); - if (ImGui::Button(ICON_FA_FOLDER "##YRW801Load")) { - openFileDialog(GUI_FILE_YRW801_ROM_OPEN); - } - - ImGui::Text("MultiPCM TG100 path"); - ImGui::SameLine(); - ImGui::InputText("##TG100Path",&settings.tg100Path); - ImGui::SameLine(); - if (ImGui::Button(ICON_FA_FOLDER "##TG100Load")) { - openFileDialog(GUI_FILE_TG100_ROM_OPEN); - } - - ImGui::Text("MultiPCM MU5 path"); - ImGui::SameLine(); - ImGui::InputText("##MU5Path",&settings.mu5Path); - ImGui::SameLine(); - if (ImGui::Button(ICON_FA_FOLDER "##MU5Load")) { - openFileDialog(GUI_FILE_MU5_ROM_OPEN); - } + CONFIG_SECTION("Color") { + // SUBSECTION COLOR SCHEME + CONFIG_SUBSECTION("Color scheme"); + if (ImGui::Button("Import")) { + openFileDialog(GUI_FILE_IMPORT_COLORS); } - ImGui::EndChild(); - ImGui::EndTabItem(); - } - if (ImGui::BeginTabItem("Appearance (OLD)")) { - ImVec2 settingsViewSize=ImGui::GetContentRegionAvail(); - settingsViewSize.y-=ImGui::GetFrameHeight()+ImGui::GetStyle().WindowPadding.y; - if (ImGui::BeginChild("SettingsView",settingsViewSize)) { - bool dpiScaleAuto=(settings.dpiScale<0.5f); - if (ImGui::Checkbox("Automatic UI scaling factor",&dpiScaleAuto)) { - if (dpiScaleAuto) { - settings.dpiScale=0.0f; - } else { - settings.dpiScale=1.0f; - } - } - if (!dpiScaleAuto) { - if (ImGui::SliderFloat("UI scaling factor",&settings.dpiScale,1.0f,3.0f,"%.2fx")) { - if (settings.dpiScale<0.5f) settings.dpiScale=0.5f; - if (settings.dpiScale>3.0f) settings.dpiScale=3.0f; - } rightClickable - } - ImGui::Text("Main font"); - ImGui::SameLine(); - ImGui::Combo("##MainFont",&settings.mainFont,mainFonts,7); - if (settings.mainFont==6) { - ImGui::InputText("##MainFontPath",&settings.mainFontPath); - ImGui::SameLine(); - if (ImGui::Button(ICON_FA_FOLDER "##MainFontLoad")) { - openFileDialog(GUI_FILE_LOAD_MAIN_FONT); - } - } - if (ImGui::InputInt("Size##MainFontSize",&settings.mainFontSize)) { - if (settings.mainFontSize<3) settings.mainFontSize=3; - if (settings.mainFontSize>96) settings.mainFontSize=96; - } - ImGui::Text("Pattern font"); - ImGui::SameLine(); - ImGui::Combo("##PatFont",&settings.patFont,patFonts,7); - if (settings.patFont==6) { - ImGui::InputText("##PatFontPath",&settings.patFontPath); - ImGui::SameLine(); - if (ImGui::Button(ICON_FA_FOLDER "##PatFontLoad")) { - openFileDialog(GUI_FILE_LOAD_PAT_FONT); - } - } - if (ImGui::InputInt("Size##PatFontSize",&settings.patFontSize)) { - if (settings.patFontSize<3) settings.patFontSize=3; - if (settings.patFontSize>96) settings.patFontSize=96; - } - if (ImGui::InputInt("Icon size",&settings.iconSize)) { - if (settings.iconSize<3) settings.iconSize=3; - if (settings.iconSize>48) settings.iconSize=48; - } - - bool loadJapaneseB=settings.loadJapanese; - if (ImGui::Checkbox("Display Japanese characters",&loadJapaneseB)) { - settings.loadJapanese=loadJapaneseB; - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip( - "Only toggle this option if you have enough graphics memory.\n" - "This is a temporary solution until dynamic font atlas is implemented in Dear ImGui.\n\n" - "このオプションは、十分なグラフィックメモリがある場合にのみ切り替えてください。\n" - "これは、Dear ImGuiにダイナミックフォントアトラスが実装されるまでの一時的な解決策です。" - ); - } - - bool loadChineseB=settings.loadChinese; - if (ImGui::Checkbox("Display Chinese (Simplified) characters",&loadChineseB)) { - settings.loadChinese=loadChineseB; - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip( - "Only toggle this option if you have enough graphics memory.\n" - "This is a temporary solution until dynamic font atlas is implemented in Dear ImGui.\n\n" - "请在确保你有足够的显存后再启动此设定\n" - "这是一个在ImGui实现动态字体加载之前的临时解决方案" - ); - } - - bool loadChineseTraditionalB=settings.loadChineseTraditional; - if (ImGui::Checkbox("Display Chinese (Traditional) characters",&loadChineseTraditionalB)) { - settings.loadChineseTraditional=loadChineseTraditionalB; - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip( - "Only toggle this option if you have enough graphics memory.\n" - "This is a temporary solution until dynamic font atlas is implemented in Dear ImGui.\n\n" - "請在確保你有足夠的顯存后再啟動此設定\n" - "這是一個在ImGui實現動態字體加載之前的臨時解決方案" - ); - } - - bool loadKoreanB=settings.loadKorean; - if (ImGui::Checkbox("Display Korean characters",&loadKoreanB)) { - settings.loadKorean=loadKoreanB; - } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip( - "Only toggle this option if you have enough graphics memory.\n" - "This is a temporary solution until dynamic font atlas is implemented in Dear ImGui.\n\n" - "그래픽 메모리가 충분한 경우에만 이 옵션을 선택하십시오.\n" - "이 옵션은 Dear ImGui에 동적 글꼴 아틀라스가 구현될 때까지 임시 솔루션입니다." - ); - } - - ImGui::Separator(); - - - - ImGui::Separator(); - - ImGui::Text("Pattern view labels:"); - ImGui::InputTextWithHint("Note off (3-char)","OFF",&settings.noteOffLabel); - ImGui::InputTextWithHint("Note release (3-char)","===",&settings.noteRelLabel); - ImGui::InputTextWithHint("Macro release (3-char)","REL",&settings.macroRelLabel); - ImGui::InputTextWithHint("Empty field (3-char)","...",&settings.emptyLabel); - ImGui::InputTextWithHint("Empty field (2-char)","..",&settings.emptyLabel2); - - ImGui::Separator(); - - ImGui::Text("Orders row number format:"); - if (ImGui::RadioButton("Decimal##orbD",settings.orderRowsBase==0)) { - settings.orderRowsBase=0; - } - if (ImGui::RadioButton("Hexadecimal##orbH",settings.orderRowsBase==1)) { - settings.orderRowsBase=1; - } - - ImGui::Text("Pattern row number format:"); - if (ImGui::RadioButton("Decimal##prbD",settings.patRowsBase==0)) { - settings.patRowsBase=0; - } - if (ImGui::RadioButton("Hexadecimal##prbH",settings.patRowsBase==1)) { - settings.patRowsBase=1; - } - - ImGui::Text("FM parameter names:"); - if (ImGui::RadioButton("Friendly##fmn0",settings.fmNames==0)) { - settings.fmNames=0; - } - if (ImGui::RadioButton("Technical##fmn1",settings.fmNames==1)) { - settings.fmNames=1; - } - if (ImGui::RadioButton("Technical (alternate)##fmn2",settings.fmNames==2)) { - settings.fmNames=2; - } - - ImGui::Separator(); - - ImGui::Text("Title bar:"); - if (ImGui::RadioButton("Furnace##tbar0",settings.titleBarInfo==0)) { - settings.titleBarInfo=0; - updateWindowTitle(); - } - if (ImGui::RadioButton("Song Name - Furnace##tbar1",settings.titleBarInfo==1)) { - settings.titleBarInfo=1; - updateWindowTitle(); - } - if (ImGui::RadioButton("file_name.fur - Furnace##tbar2",settings.titleBarInfo==2)) { - settings.titleBarInfo=2; - updateWindowTitle(); - } - if (ImGui::RadioButton("/path/to/file.fur - Furnace##tbar3",settings.titleBarInfo==3)) { - settings.titleBarInfo=3; - updateWindowTitle(); - } - - bool titleBarSysB=settings.titleBarSys; - if (ImGui::Checkbox("Display system name on title bar",&titleBarSysB)) { - settings.titleBarSys=titleBarSysB; - updateWindowTitle(); - } - - bool noMultiSystemB=settings.noMultiSystem; - if (ImGui::Checkbox("Display chip names instead of \"multi-system\" in title bar",&noMultiSystemB)) { - settings.noMultiSystem=noMultiSystemB; - updateWindowTitle(); - } - - ImGui::Text("Status bar:"); - if (ImGui::RadioButton("Cursor details##sbar0",settings.statusDisplay==0)) { - settings.statusDisplay=0; - } - if (ImGui::RadioButton("File path##sbar1",settings.statusDisplay==1)) { - settings.statusDisplay=1; - } - if (ImGui::RadioButton("Cursor details or file path##sbar2",settings.statusDisplay==2)) { - settings.statusDisplay=2; - } - if (ImGui::RadioButton("Nothing##sbar3",settings.statusDisplay==3)) { - settings.statusDisplay=3; - } - - ImGui::Text("Play/edit controls layout:"); - if (ImGui::RadioButton("Classic##ecl0",settings.controlLayout==0)) { - settings.controlLayout=0; - } - if (ImGui::RadioButton("Compact##ecl1",settings.controlLayout==1)) { - settings.controlLayout=1; - } - if (ImGui::RadioButton("Compact (vertical)##ecl2",settings.controlLayout==2)) { - settings.controlLayout=2; - } - if (ImGui::RadioButton("Split##ecl3",settings.controlLayout==3)) { - settings.controlLayout=3; - } - - ImGui::Text("Position of buttons in Orders:"); - if (ImGui::RadioButton("Top##obp0",settings.orderButtonPos==0)) { - settings.orderButtonPos=0; - } - if (ImGui::RadioButton("Left##obp1",settings.orderButtonPos==1)) { - settings.orderButtonPos=1; - } - if (ImGui::RadioButton("Right##obp2",settings.orderButtonPos==2)) { - settings.orderButtonPos=2; - } - - ImGui::Text("FM parameter editor layout:"); - if (ImGui::RadioButton("Modern##fml0",settings.fmLayout==0)) { - settings.fmLayout=0; - } - if (ImGui::RadioButton("Compact (2x2, classic)##fml1",settings.fmLayout==1)) { - settings.fmLayout=1; - } - if (ImGui::RadioButton("Compact (1x4)##fml2",settings.fmLayout==2)) { - settings.fmLayout=2; - } - if (ImGui::RadioButton("Compact (4x1)##fml3",settings.fmLayout==3)) { - settings.fmLayout=3; - } - if (ImGui::RadioButton("Alternate (2x2)##fml4",settings.fmLayout==4)) { - settings.fmLayout=4; - } - if (ImGui::RadioButton("Alternate (1x4)##fml5",settings.fmLayout==5)) { - settings.fmLayout=5; - } - if (ImGui::RadioButton("Alternate (4x1)##fml5",settings.fmLayout==6)) { - settings.fmLayout=6; - } - - ImGui::Text("Position of Sustain in FM editor:"); - if (ImGui::RadioButton("Between Decay and Sustain Rate##susp0",settings.susPosition==0)) { - settings.susPosition=0; - } - if (ImGui::RadioButton("After Release Rate##susp1",settings.susPosition==1)) { - settings.susPosition=1; - } - - ImGui::Text("Macro editor layout:"); - if (ImGui::RadioButton("Unified##mel0",settings.macroLayout==0)) { - settings.macroLayout=0; - } - if (ImGui::RadioButton("Mobile##mel1",settings.macroLayout==1)) { - settings.macroLayout=1; - } - if (ImGui::RadioButton("Grid##mel2",settings.macroLayout==2)) { - settings.macroLayout=2; - } - if (ImGui::RadioButton("Single (with list)##mel3",settings.macroLayout==3)) { - settings.macroLayout=3; - } - if (ImGui::RadioButton("Single (combo box)##mel4",settings.macroLayout==4)) { - settings.macroLayout=4; - } - - ImGui::Separator(); - - ImGui::Text("Chip memory usage unit:"); - if (ImGui::RadioButton("Bytes##MUU0",settings.memUsageUnit==0)) { - settings.memUsageUnit=0; - } - if (ImGui::RadioButton("Kilobytes##MUU1",settings.memUsageUnit==1)) { - settings.memUsageUnit=1; - } - - ImGui::Separator(); - - ImGui::Text("Channel colors:"); - if (ImGui::RadioButton("Single##CHC0",settings.channelColors==0)) { - settings.channelColors=0; - } - if (ImGui::RadioButton("Channel type##CHC1",settings.channelColors==1)) { - settings.channelColors=1; - } - if (ImGui::RadioButton("Instrument type##CHC2",settings.channelColors==2)) { - settings.channelColors=2; - } - - ImGui::Text("Channel name colors:"); - if (ImGui::RadioButton("Single##CTC0",settings.channelTextColors==0)) { - settings.channelTextColors=0; - } - if (ImGui::RadioButton("Channel type##CTC1",settings.channelTextColors==1)) { - settings.channelTextColors=1; - } - if (ImGui::RadioButton("Instrument type##CTC2",settings.channelTextColors==2)) { - settings.channelTextColors=2; - } - - ImGui::Text("Channel style:"); - if (ImGui::RadioButton("Classic##CHS0",settings.channelStyle==0)) { - settings.channelStyle=0; - } - if (ImGui::RadioButton("Line##CHS1",settings.channelStyle==1)) { - settings.channelStyle=1; - } - if (ImGui::RadioButton("Round##CHS2",settings.channelStyle==2)) { - settings.channelStyle=2; - } - if (ImGui::RadioButton("Split button##CHS3",settings.channelStyle==3)) { - settings.channelStyle=3; - } - if (ImGui::RadioButton("Square border##CH42",settings.channelStyle==4)) { - settings.channelStyle=4; - } - if (ImGui::RadioButton("Round border##CHS5",settings.channelStyle==5)) { - settings.channelStyle=5; - } - - ImGui::Text("Channel volume bar:"); - if (ImGui::RadioButton("None##CHV0",settings.channelVolStyle==0)) { - settings.channelVolStyle=0; - } - if (ImGui::RadioButton("Simple##CHV1",settings.channelVolStyle==1)) { - settings.channelVolStyle=1; - } - if (ImGui::RadioButton("Stereo##CHV2",settings.channelVolStyle==2)) { - settings.channelVolStyle=2; - } - if (ImGui::RadioButton("Real##CHV3",settings.channelVolStyle==3)) { - settings.channelVolStyle=3; - } - if (ImGui::RadioButton("Real (stereo)##CHV4",settings.channelVolStyle==4)) { - settings.channelVolStyle=4; - } - - ImGui::Text("Channel feedback style:"); - - if (ImGui::RadioButton("Off##CHF0",settings.channelFeedbackStyle==0)) { - settings.channelFeedbackStyle=0; - } - if (ImGui::RadioButton("Note##CHF1",settings.channelFeedbackStyle==1)) { - settings.channelFeedbackStyle=1; - } - if (ImGui::RadioButton("Volume##CHF2",settings.channelFeedbackStyle==2)) { - settings.channelFeedbackStyle=2; - } - if (ImGui::RadioButton("Active##CHF3",settings.channelFeedbackStyle==3)) { - settings.channelFeedbackStyle=3; - } - - ImGui::Text("Channel font:"); - - if (ImGui::RadioButton("Regular##CHFont0",settings.channelFont==0)) { - settings.channelFont=0; - } - if (ImGui::RadioButton("Monospace##CHFont1",settings.channelFont==1)) { - settings.channelFont=1; - } - - bool channelTextCenterB=settings.channelTextCenter; - if (ImGui::Checkbox("Center channel name",&channelTextCenterB)) { - settings.channelTextCenter=channelTextCenterB; - } - - ImGui::Separator(); - - bool insEditColorizeB=settings.insEditColorize; - if (ImGui::Checkbox("Colorize instrument editor using instrument type",&insEditColorizeB)) { - settings.insEditColorize=insEditColorizeB; - } - - bool separateFMColorsB=settings.separateFMColors; - if (ImGui::Checkbox("Use separate colors for carriers/modulators in FM editor",&separateFMColorsB)) { - settings.separateFMColors=separateFMColorsB; - } - - bool unifiedDataViewB=settings.unifiedDataView; - if (ImGui::Checkbox("Unified instrument/wavetable/sample list",&unifiedDataViewB)) { - settings.unifiedDataView=unifiedDataViewB; - } - if (settings.unifiedDataView) { - settings.horizontalDataView=0; - } - - ImGui::BeginDisabled(settings.unifiedDataView); - bool horizontalDataViewB=settings.horizontalDataView; - if (ImGui::Checkbox("Horizontal instrument list",&horizontalDataViewB)) { - settings.horizontalDataView=horizontalDataViewB; - } - ImGui::EndDisabled(); - - bool oplStandardWaveNamesB=settings.oplStandardWaveNames; - if (ImGui::Checkbox("Use standard OPL waveform names",&oplStandardWaveNamesB)) { - settings.oplStandardWaveNames=oplStandardWaveNamesB; - } - - bool overflowHighlightB=settings.overflowHighlight; - if (ImGui::Checkbox("Overflow pattern highlights",&overflowHighlightB)) { - settings.overflowHighlight=overflowHighlightB; - } - - bool viewPrevPatternB=settings.viewPrevPattern; - if (ImGui::Checkbox("Display previous/next pattern",&viewPrevPatternB)) { - settings.viewPrevPattern=viewPrevPatternB; - } - - bool flatNotesB=settings.flatNotes; - if (ImGui::Checkbox("Use flats instead of sharps",&flatNotesB)) { - settings.flatNotes=flatNotesB; - } - - bool germanNotationB=settings.germanNotation; - if (ImGui::Checkbox("Use German notation",&germanNotationB)) { - settings.germanNotation=germanNotationB; - } - - bool oneDigitEffectsB=settings.oneDigitEffects; - if (ImGui::Checkbox("Single-digit effects for 00-0F",&oneDigitEffectsB)) { - settings.oneDigitEffects=oneDigitEffectsB; - } - - bool centerPatternB=settings.centerPattern; - if (ImGui::Checkbox("Center pattern view",¢erPatternB)) { - settings.centerPattern=centerPatternB; - } - - bool unsignedDetuneB=settings.unsignedDetune; - if (ImGui::Checkbox("Unsigned FM detune values",&unsignedDetuneB)) { - settings.unsignedDetune=unsignedDetuneB; - } - - // sorry. temporarily disabled until ImGui has a way to add separators in tables arbitrarily. - /*bool sysSeparatorsB=settings.sysSeparators; - if (ImGui::Checkbox("Add separators between systems in Orders",&sysSeparatorsB)) { - settings.sysSeparators=sysSeparatorsB; - }*/ - - bool ordersCursorB=settings.ordersCursor; - if (ImGui::Checkbox("Highlight channel at cursor in Orders",&ordersCursorB)) { - settings.ordersCursor=ordersCursorB; - } - - ImGui::Separator(); - - bool waveLayoutB=settings.waveLayout; - if (ImGui::Checkbox("Use compact wave editor",&waveLayoutB)) { - settings.waveLayout=waveLayoutB; - } - - bool oldMacroVSliderB=settings.oldMacroVSlider; - if (ImGui::Checkbox("Use classic macro editor vertical slider",&oldMacroVSliderB)) { - settings.oldMacroVSlider=oldMacroVSliderB; - } - - bool roundedWindowsB=settings.roundedWindows; - if (ImGui::Checkbox("Rounded window corners",&roundedWindowsB)) { - settings.roundedWindows=roundedWindowsB; - } - - bool roundedButtonsB=settings.roundedButtons; - if (ImGui::Checkbox("Rounded buttons",&roundedButtonsB)) { - settings.roundedButtons=roundedButtonsB; - } - - bool roundedMenusB=settings.roundedMenus; - if (ImGui::Checkbox("Rounded menu corners",&roundedMenusB)) { - settings.roundedMenus=roundedMenusB; - } - - bool frameBordersB=settings.frameBorders; - if (ImGui::Checkbox("Borders around widgets",&frameBordersB)) { - settings.frameBorders=frameBordersB; - } - - ImGui::Separator(); - - ImGui::Text("Oscilloscope settings:"); - - bool oscRoundedCornersB=settings.oscRoundedCorners; - if (ImGui::Checkbox("Rounded corners",&oscRoundedCornersB)) { - settings.oscRoundedCorners=oscRoundedCornersB; - } - - bool oscTakesEntireWindowB=settings.oscTakesEntireWindow; - if (ImGui::Checkbox("Fill entire window",&oscTakesEntireWindowB)) { - settings.oscTakesEntireWindow=oscTakesEntireWindowB; - } - - bool oscEscapesBoundaryB=settings.oscEscapesBoundary; - if (ImGui::Checkbox("Waveform goes out of bounds",&oscEscapesBoundaryB)) { - settings.oscEscapesBoundary=oscEscapesBoundaryB; - } - - bool oscBorderB=settings.oscBorder; - if (ImGui::Checkbox("Border",&oscBorderB)) { - settings.oscBorder=oscBorderB; - } - - ImGui::Separator(); - - ImGui::Text("Pattern view spacing after:"); - - if (CWSliderInt("Note",&settings.noteCellSpacing,0,32)) { - if (settings.noteCellSpacing<0) settings.noteCellSpacing=0; - if (settings.noteCellSpacing>32) settings.noteCellSpacing=32; - } - - if (CWSliderInt("Instrument",&settings.insCellSpacing,0,32)) { - if (settings.insCellSpacing<0) settings.insCellSpacing=0; - if (settings.insCellSpacing>32) settings.insCellSpacing=32; - } - - if (CWSliderInt("Volume",&settings.volCellSpacing,0,32)) { - if (settings.volCellSpacing<0) settings.volCellSpacing=0; - if (settings.volCellSpacing>32) settings.volCellSpacing=32; - } - - if (CWSliderInt("Effect",&settings.effectCellSpacing,0,32)) { - if (settings.effectCellSpacing<0) settings.effectCellSpacing=0; - if (settings.effectCellSpacing>32) settings.effectCellSpacing=32; - } - - if (CWSliderInt("Effect value",&settings.effectValCellSpacing,0,32)) { - if (settings.effectValCellSpacing<0) settings.effectValCellSpacing=0; - if (settings.effectValCellSpacing>32) settings.effectValCellSpacing=32; - } - - ImGui::Separator(); - - if (ImGui::TreeNode("Color scheme")) { - if (ImGui::Button("Import")) { - openFileDialog(GUI_FILE_IMPORT_COLORS); - } - ImGui::SameLine(); - if (ImGui::Button("Export")) { - openFileDialog(GUI_FILE_EXPORT_COLORS); - } - ImGui::SameLine(); - if (ImGui::Button("Reset defaults")) { - showWarning("Are you sure you want to reset the color scheme?",GUI_WARN_RESET_COLORS); - } - if (ImGui::TreeNode("General")) { - ImGui::Text("Color scheme type:"); - if (ImGui::RadioButton("Dark##gcb0",settings.guiColorsBase==0)) { - settings.guiColorsBase=0; - applyUISettings(false); - } - if (ImGui::RadioButton("Light##gcb1",settings.guiColorsBase==1)) { - settings.guiColorsBase=1; - applyUISettings(false); - } - if (ImGui::SliderInt("Frame shading",&settings.guiColorsShading,0,100,"%d%%")) { - if (settings.guiColorsShading<0) settings.guiColorsShading=0; - if (settings.guiColorsShading>100) settings.guiColorsShading=100; - applyUISettings(false); - } - UI_COLOR_CONFIG(GUI_COLOR_BACKGROUND,"Background"); - UI_COLOR_CONFIG(GUI_COLOR_FRAME_BACKGROUND,"Window background"); - UI_COLOR_CONFIG(GUI_COLOR_FRAME_BACKGROUND_CHILD,"Sub-window background"); - UI_COLOR_CONFIG(GUI_COLOR_FRAME_BACKGROUND_POPUP,"Pop-up background"); - UI_COLOR_CONFIG(GUI_COLOR_MODAL_BACKDROP,"Modal backdrop"); - UI_COLOR_CONFIG(GUI_COLOR_HEADER,"Header"); - UI_COLOR_CONFIG(GUI_COLOR_TEXT,"Text"); - UI_COLOR_CONFIG(GUI_COLOR_ACCENT_PRIMARY,"Primary"); - UI_COLOR_CONFIG(GUI_COLOR_ACCENT_SECONDARY,"Secondary"); - UI_COLOR_CONFIG(GUI_COLOR_TITLE_INACTIVE,"Title bar (inactive)"); - UI_COLOR_CONFIG(GUI_COLOR_TITLE_COLLAPSED,"Title bar (collapsed)"); - UI_COLOR_CONFIG(GUI_COLOR_MENU_BAR,"Menu bar"); - UI_COLOR_CONFIG(GUI_COLOR_BORDER,"Border"); - UI_COLOR_CONFIG(GUI_COLOR_BORDER_SHADOW,"Border shadow"); - UI_COLOR_CONFIG(GUI_COLOR_SCROLL,"Scroll bar"); - UI_COLOR_CONFIG(GUI_COLOR_SCROLL_HOVER,"Scroll bar (hovered)"); - UI_COLOR_CONFIG(GUI_COLOR_SCROLL_ACTIVE,"Scroll bar (clicked)"); - UI_COLOR_CONFIG(GUI_COLOR_SCROLL_BACKGROUND,"Scroll bar background"); - UI_COLOR_CONFIG(GUI_COLOR_SEPARATOR,"Separator"); - UI_COLOR_CONFIG(GUI_COLOR_SEPARATOR_HOVER,"Separator (hover)"); - UI_COLOR_CONFIG(GUI_COLOR_SEPARATOR_ACTIVE,"Separator (active)"); - UI_COLOR_CONFIG(GUI_COLOR_DOCKING_PREVIEW,"Docking preview"); - UI_COLOR_CONFIG(GUI_COLOR_DOCKING_EMPTY,"Docking empty"); - UI_COLOR_CONFIG(GUI_COLOR_TABLE_HEADER,"Table header"); - UI_COLOR_CONFIG(GUI_COLOR_TABLE_BORDER_HARD,"Table border (hard)"); - UI_COLOR_CONFIG(GUI_COLOR_TABLE_BORDER_SOFT,"Table border (soft)"); - UI_COLOR_CONFIG(GUI_COLOR_DRAG_DROP_TARGET,"Drag and drop target"); - UI_COLOR_CONFIG(GUI_COLOR_NAV_WIN_HIGHLIGHT,"Window switcher (highlight)"); - UI_COLOR_CONFIG(GUI_COLOR_NAV_WIN_BACKDROP,"Window switcher backdrop"); - UI_COLOR_CONFIG(GUI_COLOR_TOGGLE_ON,"Toggle on"); - UI_COLOR_CONFIG(GUI_COLOR_TOGGLE_OFF,"Toggle off"); - UI_COLOR_CONFIG(GUI_COLOR_EDITING,"Editing"); - UI_COLOR_CONFIG(GUI_COLOR_SONG_LOOP,"Song loop"); - UI_COLOR_CONFIG(GUI_COLOR_PLAYBACK_STAT,"Playback status"); - UI_COLOR_CONFIG(GUI_COLOR_DESTRUCTIVE,"Destructive hint"); - UI_COLOR_CONFIG(GUI_COLOR_WARNING,"Warning hint"); - UI_COLOR_CONFIG(GUI_COLOR_ERROR,"Error hint"); - ImGui::TreePop(); - } - if (ImGui::TreeNode("File Picker (built-in)")) { - UI_COLOR_CONFIG(GUI_COLOR_FILE_DIR,"Directory"); - UI_COLOR_CONFIG(GUI_COLOR_FILE_SONG_NATIVE,"Song (native)"); - UI_COLOR_CONFIG(GUI_COLOR_FILE_SONG_IMPORT,"Song (import)"); - UI_COLOR_CONFIG(GUI_COLOR_FILE_INSTR,"Instrument"); - UI_COLOR_CONFIG(GUI_COLOR_FILE_AUDIO,"Audio"); - UI_COLOR_CONFIG(GUI_COLOR_FILE_WAVE,"Wavetable"); - UI_COLOR_CONFIG(GUI_COLOR_FILE_VGM,"VGM"); - UI_COLOR_CONFIG(GUI_COLOR_FILE_ZSM,"ZSM"); - UI_COLOR_CONFIG(GUI_COLOR_FILE_FONT,"Font"); - UI_COLOR_CONFIG(GUI_COLOR_FILE_OTHER,"Other"); - ImGui::TreePop(); - } - if (ImGui::TreeNode("Oscilloscope")) { - UI_COLOR_CONFIG(GUI_COLOR_OSC_BORDER,"Border"); - UI_COLOR_CONFIG(GUI_COLOR_OSC_BG1,"Background (top-left)"); - UI_COLOR_CONFIG(GUI_COLOR_OSC_BG2,"Background (top-right)"); - UI_COLOR_CONFIG(GUI_COLOR_OSC_BG3,"Background (bottom-left)"); - UI_COLOR_CONFIG(GUI_COLOR_OSC_BG4,"Background (bottom-right)"); - UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE,"Waveform"); - UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_PEAK,"Waveform (clip)"); - UI_COLOR_CONFIG(GUI_COLOR_OSC_REF,"Reference"); - UI_COLOR_CONFIG(GUI_COLOR_OSC_GUIDE,"Guide"); - ImGui::TreePop(); - } - if (ImGui::TreeNode("Volume Meter")) { - UI_COLOR_CONFIG(GUI_COLOR_VOLMETER_LOW,"Low"); - UI_COLOR_CONFIG(GUI_COLOR_VOLMETER_HIGH,"High"); - UI_COLOR_CONFIG(GUI_COLOR_VOLMETER_PEAK,"Clip"); - ImGui::TreePop(); - } - if (ImGui::TreeNode("Orders")) { - UI_COLOR_CONFIG(GUI_COLOR_ORDER_ROW_INDEX,"Order number"); - UI_COLOR_CONFIG(GUI_COLOR_ORDER_ACTIVE,"Playing order background"); - UI_COLOR_CONFIG(GUI_COLOR_ORDER_SELECTED,"Selected order"); - UI_COLOR_CONFIG(GUI_COLOR_ORDER_SIMILAR,"Similar patterns"); - UI_COLOR_CONFIG(GUI_COLOR_ORDER_INACTIVE,"Inactive patterns"); - ImGui::TreePop(); - } - if (ImGui::TreeNode("Envelope View")) { - UI_COLOR_CONFIG(GUI_COLOR_FM_ENVELOPE,"Envelope"); - UI_COLOR_CONFIG(GUI_COLOR_FM_ENVELOPE_SUS_GUIDE,"Sustain guide"); - UI_COLOR_CONFIG(GUI_COLOR_FM_ENVELOPE_RELEASE,"Release"); - - ImGui::TreePop(); - } - if (ImGui::TreeNode("FM Editor")) { - UI_COLOR_CONFIG(GUI_COLOR_FM_ALG_BG,"Algorithm background"); - UI_COLOR_CONFIG(GUI_COLOR_FM_ALG_LINE,"Algorithm lines"); - UI_COLOR_CONFIG(GUI_COLOR_FM_MOD,"Modulator"); - UI_COLOR_CONFIG(GUI_COLOR_FM_CAR,"Carrier"); - - UI_COLOR_CONFIG(GUI_COLOR_FM_SSG,"SSG-EG"); - UI_COLOR_CONFIG(GUI_COLOR_FM_WAVE,"Waveform"); - - ImGui::TextWrapped("(the following colors only apply when \"Use separate colors for carriers/modulators in FM editor\" is on!)"); - - UI_COLOR_CONFIG(GUI_COLOR_FM_PRIMARY_MOD,"Mod. accent (primary)"); - UI_COLOR_CONFIG(GUI_COLOR_FM_SECONDARY_MOD,"Mod. accent (secondary)"); - UI_COLOR_CONFIG(GUI_COLOR_FM_BORDER_MOD,"Mod. border"); - UI_COLOR_CONFIG(GUI_COLOR_FM_BORDER_SHADOW_MOD,"Mod. border shadow"); - - UI_COLOR_CONFIG(GUI_COLOR_FM_PRIMARY_CAR,"Car. accent (primary"); - UI_COLOR_CONFIG(GUI_COLOR_FM_SECONDARY_CAR,"Car. accent (secondary)"); - UI_COLOR_CONFIG(GUI_COLOR_FM_BORDER_CAR,"Car. border"); - UI_COLOR_CONFIG(GUI_COLOR_FM_BORDER_SHADOW_CAR,"Car. border shadow"); - - ImGui::TreePop(); - } - if (ImGui::TreeNode("Macro Editor")) { - UI_COLOR_CONFIG(GUI_COLOR_MACRO_VOLUME,"Volume"); - UI_COLOR_CONFIG(GUI_COLOR_MACRO_PITCH,"Pitch"); - UI_COLOR_CONFIG(GUI_COLOR_MACRO_WAVE,"Wave"); - UI_COLOR_CONFIG(GUI_COLOR_MACRO_OTHER,"Other"); - ImGui::TreePop(); - } - if (ImGui::TreeNode("Instrument Types")) { - UI_COLOR_CONFIG(GUI_COLOR_INSTR_FM,"FM (OPN)"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_STD,"SN76489/Sega PSG"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_T6W28,"T6W28"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_GB,"Game Boy"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_C64,"C64"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_AMIGA,"Amiga/Generic Sample"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_PCE,"PC Engine"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_AY,"AY-3-8910/SSG"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_AY8930,"AY8930"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_TIA,"TIA"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_SAA1099,"SAA1099"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_VIC,"VIC"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_PET,"PET"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_VRC6,"VRC6"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_VRC6_SAW,"VRC6 (saw)"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_OPLL,"FM (OPLL)"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_OPL,"FM (OPL)"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_FDS,"FDS"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_VBOY,"Virtual Boy"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_N163,"Namco 163"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_SCC,"Konami SCC"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_OPZ,"FM (OPZ)"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_POKEY,"POKEY"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_BEEPER,"PC Beeper"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_SWAN,"WonderSwan"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_MIKEY,"Lynx"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_VERA,"VERA"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_X1_010,"X1-010"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_ES5506,"ES5506"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_MULTIPCM,"MultiPCM"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_SNES,"SNES"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_SU,"Sound Unit"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_NAMCO,"Namco WSG"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_OPL_DRUMS,"FM (OPL Drums)"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_OPM,"FM (OPM)"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_NES,"NES"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_MSM6258,"MSM6258"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_MSM6295,"MSM6295"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_ADPCMA,"ADPCM-A"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_ADPCMB,"ADPCM-B"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_SEGAPCM,"Sega PCM"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_QSOUND,"QSound"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_YMZ280B,"YMZ280B"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_RF5C68,"RF5C68"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_MSM5232,"MSM5232"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_K007232,"K007232"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_GA20,"GA20"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_POKEMINI,"Pokémon Mini"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_SM8521,"SM8521"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_PV1000,"PV-1000"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_K053260,"K053260"); - UI_COLOR_CONFIG(GUI_COLOR_INSTR_UNKNOWN,"Other/Unknown"); - ImGui::TreePop(); - } - if (ImGui::TreeNode("Channel")) { - UI_COLOR_CONFIG(GUI_COLOR_CHANNEL_BG,"Single color (background)"); - UI_COLOR_CONFIG(GUI_COLOR_CHANNEL_FG,"Single color (text)"); - UI_COLOR_CONFIG(GUI_COLOR_CHANNEL_FM,"FM"); - UI_COLOR_CONFIG(GUI_COLOR_CHANNEL_PULSE,"Pulse"); - UI_COLOR_CONFIG(GUI_COLOR_CHANNEL_NOISE,"Noise"); - UI_COLOR_CONFIG(GUI_COLOR_CHANNEL_PCM,"PCM"); - UI_COLOR_CONFIG(GUI_COLOR_CHANNEL_WAVE,"Wave"); - UI_COLOR_CONFIG(GUI_COLOR_CHANNEL_OP,"FM operator"); - UI_COLOR_CONFIG(GUI_COLOR_CHANNEL_MUTED,"Muted"); - ImGui::TreePop(); - } - if (ImGui::TreeNode("Pattern")) { - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_PLAY_HEAD,"Playhead"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_CURSOR,"Cursor"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_CURSOR_HOVER,"Cursor (hovered)"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_CURSOR_ACTIVE,"Cursor (clicked)"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_SELECTION,"Selection"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_SELECTION_HOVER,"Selection (hovered)"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_SELECTION_ACTIVE,"Selection (clicked)"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_HI_1,"Highlight 1"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_HI_2,"Highlight 2"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_ROW_INDEX,"Row number"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_ROW_INDEX_HI1,"Row number (highlight 1)"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_ROW_INDEX_HI2,"Row number (highlight 2)"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_ACTIVE,"Note"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_ACTIVE_HI1,"Note (highlight 1)"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_ACTIVE_HI2,"Note (highlight 2)"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_INACTIVE,"Blank"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_INACTIVE_HI1,"Blank (highlight 1)"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_INACTIVE_HI2,"Blank (highlight 2)"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_INS,"Instrument"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_INS_WARN,"Instrument (invalid type)"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_INS_ERROR,"Instrument (out of range)"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_VOLUME_MIN,"Volume (0%)"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_VOLUME_HALF,"Volume (50%)"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_VOLUME_MAX,"Volume (100%)"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_INVALID,"Invalid effect"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_PITCH,"Pitch effect"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_VOLUME,"Volume effect"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_PANNING,"Panning effect"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_SONG,"Song effect"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_TIME,"Time effect"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_SPEED,"Speed effect"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY,"Primary specific effect"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_SYS_SECONDARY,"Secondary specific effect"); - UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_MISC,"Miscellaneous"); - UI_COLOR_CONFIG(GUI_COLOR_EE_VALUE,"External command output"); - ImGui::TreePop(); - } - if (ImGui::TreeNode("Sample Editor")) { - UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_BG,"Background"); - UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_FG,"Waveform"); - UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_TIME_BG,"Time background"); - UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_TIME_FG,"Time text"); - UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_LOOP,"Loop region"); - UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_CENTER,"Center guide"); - UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_GRID,"Grid"); - UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_SEL,"Selection"); - UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_SEL_POINT,"Selection points"); - UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_NEEDLE,"Preview needle"); - UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_NEEDLE_PLAYING,"Playing needles"); - UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_LOOP_POINT,"Loop markers"); - UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_CHIP_DISABLED,"Chip select: disabled"); - UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_CHIP_ENABLED,"Chip select: enabled"); - UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_CHIP_WARNING,"Chip select: enabled (failure)"); - ImGui::TreePop(); - } - if (ImGui::TreeNode("Pattern Manager")) { - UI_COLOR_CONFIG(GUI_COLOR_PAT_MANAGER_NULL,"Unallocated"); - UI_COLOR_CONFIG(GUI_COLOR_PAT_MANAGER_UNUSED,"Unused"); - UI_COLOR_CONFIG(GUI_COLOR_PAT_MANAGER_USED,"Used"); - UI_COLOR_CONFIG(GUI_COLOR_PAT_MANAGER_OVERUSED,"Overused"); - UI_COLOR_CONFIG(GUI_COLOR_PAT_MANAGER_EXTREMELY_OVERUSED,"Really overused"); - UI_COLOR_CONFIG(GUI_COLOR_PAT_MANAGER_COMBO_BREAKER,"Combo Breaker"); - ImGui::TreePop(); - } - if (ImGui::TreeNode("Piano")) { - UI_COLOR_CONFIG(GUI_COLOR_PIANO_BACKGROUND,"Background"); - UI_COLOR_CONFIG(GUI_COLOR_PIANO_KEY_TOP,"Upper key"); - UI_COLOR_CONFIG(GUI_COLOR_PIANO_KEY_TOP_HIT,"Upper key (feedback)"); - UI_COLOR_CONFIG(GUI_COLOR_PIANO_KEY_TOP_ACTIVE,"Upper key (pressed)"); - UI_COLOR_CONFIG(GUI_COLOR_PIANO_KEY_BOTTOM,"Lower key"); - UI_COLOR_CONFIG(GUI_COLOR_PIANO_KEY_BOTTOM_HIT,"Lower key (feedback)"); - UI_COLOR_CONFIG(GUI_COLOR_PIANO_KEY_BOTTOM_ACTIVE,"Lower key (pressed)"); - ImGui::TreePop(); - } - if (ImGui::TreeNode("Clock")) { - UI_COLOR_CONFIG(GUI_COLOR_CLOCK_TEXT,"Clock text"); - UI_COLOR_CONFIG(GUI_COLOR_CLOCK_BEAT_LOW,"Beat (off)"); - UI_COLOR_CONFIG(GUI_COLOR_CLOCK_BEAT_HIGH,"Beat (on)"); - - ImGui::TreePop(); - } - if (ImGui::TreeNode("Patchbay")) { - UI_COLOR_CONFIG(GUI_COLOR_PATCHBAY_PORTSET,"PortSet"); - UI_COLOR_CONFIG(GUI_COLOR_PATCHBAY_PORT,"Port"); - UI_COLOR_CONFIG(GUI_COLOR_PATCHBAY_PORT_HIDDEN,"Port (hidden/unavailable)"); - UI_COLOR_CONFIG(GUI_COLOR_PATCHBAY_CONNECTION,"Connection (selected)"); - UI_COLOR_CONFIG(GUI_COLOR_PATCHBAY_CONNECTION_BG,"Connection (other)"); - - ImGui::TreePop(); - } - if (ImGui::TreeNode("Log Viewer")) { - UI_COLOR_CONFIG(GUI_COLOR_LOGLEVEL_ERROR,"Log level: Error"); - UI_COLOR_CONFIG(GUI_COLOR_LOGLEVEL_WARNING,"Log level: Warning"); - UI_COLOR_CONFIG(GUI_COLOR_LOGLEVEL_INFO,"Log level: Info"); - UI_COLOR_CONFIG(GUI_COLOR_LOGLEVEL_DEBUG,"Log level: Debug"); - UI_COLOR_CONFIG(GUI_COLOR_LOGLEVEL_TRACE,"Log level: Trace/Verbose"); - ImGui::TreePop(); - } - ImGui::TreePop(); - } + ImGui::SameLine(); + if (ImGui::Button("Export")) { + openFileDialog(GUI_FILE_EXPORT_COLORS); } - ImGui::EndChild(); - ImGui::EndTabItem(); - } - if (ImGui::BeginTabItem("Keyboard (OLD)")) { - ImVec2 settingsViewSize=ImGui::GetContentRegionAvail(); - settingsViewSize.y-=ImGui::GetFrameHeight()+ImGui::GetStyle().WindowPadding.y; - if (ImGui::BeginChild("SettingsView",settingsViewSize)) { - if (ImGui::Button("Import")) { - openFileDialog(GUI_FILE_IMPORT_KEYBINDS); - } - ImGui::SameLine(); - if (ImGui::Button("Export")) { - openFileDialog(GUI_FILE_EXPORT_KEYBINDS); - } - ImGui::SameLine(); - if (ImGui::Button("Reset defaults")) { - showWarning("Are you sure you want to reset the keyboard settings?",GUI_WARN_RESET_KEYBINDS); - } - if (ImGui::TreeNode("Global hotkeys")) { - KEYBIND_CONFIG_BEGIN("keysGlobal"); - - UI_KEYBIND_CONFIG(GUI_ACTION_NEW); - UI_KEYBIND_CONFIG(GUI_ACTION_OPEN); - UI_KEYBIND_CONFIG(GUI_ACTION_OPEN_BACKUP); - UI_KEYBIND_CONFIG(GUI_ACTION_SAVE); - UI_KEYBIND_CONFIG(GUI_ACTION_SAVE_AS); - UI_KEYBIND_CONFIG(GUI_ACTION_UNDO); - UI_KEYBIND_CONFIG(GUI_ACTION_REDO); - UI_KEYBIND_CONFIG(GUI_ACTION_PLAY_TOGGLE); - UI_KEYBIND_CONFIG(GUI_ACTION_PLAY); - UI_KEYBIND_CONFIG(GUI_ACTION_STOP); - UI_KEYBIND_CONFIG(GUI_ACTION_PLAY_START); - UI_KEYBIND_CONFIG(GUI_ACTION_PLAY_REPEAT); - UI_KEYBIND_CONFIG(GUI_ACTION_PLAY_CURSOR); - UI_KEYBIND_CONFIG(GUI_ACTION_STEP_ONE); - UI_KEYBIND_CONFIG(GUI_ACTION_OCTAVE_UP); - UI_KEYBIND_CONFIG(GUI_ACTION_OCTAVE_DOWN); - UI_KEYBIND_CONFIG(GUI_ACTION_INS_UP); - UI_KEYBIND_CONFIG(GUI_ACTION_INS_DOWN); - UI_KEYBIND_CONFIG(GUI_ACTION_STEP_UP); - UI_KEYBIND_CONFIG(GUI_ACTION_STEP_DOWN); - UI_KEYBIND_CONFIG(GUI_ACTION_TOGGLE_EDIT); - UI_KEYBIND_CONFIG(GUI_ACTION_METRONOME); - UI_KEYBIND_CONFIG(GUI_ACTION_REPEAT_PATTERN); - UI_KEYBIND_CONFIG(GUI_ACTION_FOLLOW_ORDERS); - UI_KEYBIND_CONFIG(GUI_ACTION_FOLLOW_PATTERN); - UI_KEYBIND_CONFIG(GUI_ACTION_FULLSCREEN); - UI_KEYBIND_CONFIG(GUI_ACTION_PANIC); - - KEYBIND_CONFIG_END; - ImGui::TreePop(); - } - if (ImGui::TreeNode("Window activation")) { - KEYBIND_CONFIG_BEGIN("keysWindow"); - - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_EDIT_CONTROLS); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_ORDERS); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_INS_LIST); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_INS_EDIT); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_SONG_INFO); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_SUBSONGS); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_PATTERN); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_WAVE_LIST); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_WAVE_EDIT); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_SAMPLE_LIST); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_SAMPLE_EDIT); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_ABOUT); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_SETTINGS); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_MIXER); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_DEBUG); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_OSCILLOSCOPE); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_CHAN_OSC); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_EFFECT_LIST); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_VOL_METER); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_STATS); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_COMPAT_FLAGS); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_PIANO); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_NOTES); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_CHANNELS); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_REGISTER_VIEW); - UI_KEYBIND_CONFIG(GUI_ACTION_WINDOW_LOG); - - UI_KEYBIND_CONFIG(GUI_ACTION_COLLAPSE_WINDOW); - UI_KEYBIND_CONFIG(GUI_ACTION_CLOSE_WINDOW); - - KEYBIND_CONFIG_END; - ImGui::TreePop(); - } - if (ImGui::TreeNode("Note input")) { - std::vector sorted; - if (ImGui::BeginTable("keysNoteInput",4)) { - for (std::map::value_type& i: noteKeys) { - std::vector::iterator j; - for (j=sorted.begin(); j!=sorted.end(); j++) { - if (j->val>i.second) { - break; - } - } - sorted.insert(j,MappedInput(i.first,i.second)); - } - - static char id[4096]; - - ImGui::TableNextRow(ImGuiTableRowFlags_Headers); - ImGui::TableNextColumn(); - ImGui::Text("Key"); - ImGui::TableNextColumn(); - ImGui::Text("Type"); - ImGui::TableNextColumn(); - ImGui::Text("Value"); - ImGui::TableNextColumn(); - ImGui::Text("Remove"); - - for (MappedInput& i: sorted) { - ImGui::TableNextRow(); - ImGui::TableNextColumn(); - ImGui::Text("%s",SDL_GetScancodeName((SDL_Scancode)i.scan)); - ImGui::TableNextColumn(); - if (i.val==102) { - snprintf(id,4095,"Macro release##SNType_%d",i.scan); - if (ImGui::Button(id)) { - noteKeys[i.scan]=0; - } - } else if (i.val==101) { - snprintf(id,4095,"Note release##SNType_%d",i.scan); - if (ImGui::Button(id)) { - noteKeys[i.scan]=102; - } - } else if (i.val==100) { - snprintf(id,4095,"Note off##SNType_%d",i.scan); - if (ImGui::Button(id)) { - noteKeys[i.scan]=101; - } - } else { - snprintf(id,4095,"Note##SNType_%d",i.scan); - if (ImGui::Button(id)) { - noteKeys[i.scan]=100; - } - } - ImGui::TableNextColumn(); - if (i.val<100) { - snprintf(id,4095,"##SNValue_%d",i.scan); - if (ImGui::InputInt(id,&i.val,1,1)) { - if (i.val<0) i.val=0; - if (i.val>96) i.val=96; - noteKeys[i.scan]=i.val; - } - } - ImGui::TableNextColumn(); - snprintf(id,4095,ICON_FA_TIMES "##SNRemove_%d",i.scan); - if (ImGui::Button(id)) { - noteKeys.erase(i.scan); - } - } - ImGui::EndTable(); - - if (ImGui::BeginCombo("##SNAddNew","Add...")) { - for (int i=0; i100) settings.guiColorsShading=100; + applyUISettings(false); + } + UI_COLOR_CONFIG(GUI_COLOR_BACKGROUND,"Background"); + UI_COLOR_CONFIG(GUI_COLOR_FRAME_BACKGROUND,"Window background"); + UI_COLOR_CONFIG(GUI_COLOR_FRAME_BACKGROUND_CHILD,"Sub-window background"); + UI_COLOR_CONFIG(GUI_COLOR_FRAME_BACKGROUND_POPUP,"Pop-up background"); + UI_COLOR_CONFIG(GUI_COLOR_MODAL_BACKDROP,"Modal backdrop"); + UI_COLOR_CONFIG(GUI_COLOR_HEADER,"Header"); + UI_COLOR_CONFIG(GUI_COLOR_TEXT,"Text"); + UI_COLOR_CONFIG(GUI_COLOR_ACCENT_PRIMARY,"Primary"); + UI_COLOR_CONFIG(GUI_COLOR_ACCENT_SECONDARY,"Secondary"); + UI_COLOR_CONFIG(GUI_COLOR_TITLE_INACTIVE,"Title bar (inactive)"); + UI_COLOR_CONFIG(GUI_COLOR_TITLE_COLLAPSED,"Title bar (collapsed)"); + UI_COLOR_CONFIG(GUI_COLOR_MENU_BAR,"Menu bar"); + UI_COLOR_CONFIG(GUI_COLOR_BORDER,"Border"); + UI_COLOR_CONFIG(GUI_COLOR_BORDER_SHADOW,"Border shadow"); + UI_COLOR_CONFIG(GUI_COLOR_SCROLL,"Scroll bar"); + UI_COLOR_CONFIG(GUI_COLOR_SCROLL_HOVER,"Scroll bar (hovered)"); + UI_COLOR_CONFIG(GUI_COLOR_SCROLL_ACTIVE,"Scroll bar (clicked)"); + UI_COLOR_CONFIG(GUI_COLOR_SCROLL_BACKGROUND,"Scroll bar background"); + UI_COLOR_CONFIG(GUI_COLOR_SEPARATOR,"Separator"); + UI_COLOR_CONFIG(GUI_COLOR_SEPARATOR_HOVER,"Separator (hover)"); + UI_COLOR_CONFIG(GUI_COLOR_SEPARATOR_ACTIVE,"Separator (active)"); + UI_COLOR_CONFIG(GUI_COLOR_DOCKING_PREVIEW,"Docking preview"); + UI_COLOR_CONFIG(GUI_COLOR_DOCKING_EMPTY,"Docking empty"); + UI_COLOR_CONFIG(GUI_COLOR_TABLE_HEADER,"Table header"); + UI_COLOR_CONFIG(GUI_COLOR_TABLE_BORDER_HARD,"Table border (hard)"); + UI_COLOR_CONFIG(GUI_COLOR_TABLE_BORDER_SOFT,"Table border (soft)"); + UI_COLOR_CONFIG(GUI_COLOR_DRAG_DROP_TARGET,"Drag and drop target"); + UI_COLOR_CONFIG(GUI_COLOR_NAV_WIN_HIGHLIGHT,"Window switcher (highlight)"); + UI_COLOR_CONFIG(GUI_COLOR_NAV_WIN_BACKDROP,"Window switcher backdrop"); + UI_COLOR_CONFIG(GUI_COLOR_TOGGLE_ON,"Toggle on"); + UI_COLOR_CONFIG(GUI_COLOR_TOGGLE_OFF,"Toggle off"); + UI_COLOR_CONFIG(GUI_COLOR_EDITING,"Editing"); + UI_COLOR_CONFIG(GUI_COLOR_SONG_LOOP,"Song loop"); + UI_COLOR_CONFIG(GUI_COLOR_PLAYBACK_STAT,"Playback status"); + UI_COLOR_CONFIG(GUI_COLOR_DESTRUCTIVE,"Destructive hint"); + UI_COLOR_CONFIG(GUI_COLOR_WARNING,"Warning hint"); + UI_COLOR_CONFIG(GUI_COLOR_ERROR,"Error hint"); + ImGui::TreePop(); + } + if (ImGui::TreeNode("File Picker (built-in)")) { + UI_COLOR_CONFIG(GUI_COLOR_FILE_DIR,"Directory"); + UI_COLOR_CONFIG(GUI_COLOR_FILE_SONG_NATIVE,"Song (native)"); + UI_COLOR_CONFIG(GUI_COLOR_FILE_SONG_IMPORT,"Song (import)"); + UI_COLOR_CONFIG(GUI_COLOR_FILE_INSTR,"Instrument"); + UI_COLOR_CONFIG(GUI_COLOR_FILE_AUDIO,"Audio"); + UI_COLOR_CONFIG(GUI_COLOR_FILE_WAVE,"Wavetable"); + UI_COLOR_CONFIG(GUI_COLOR_FILE_VGM,"VGM"); + UI_COLOR_CONFIG(GUI_COLOR_FILE_ZSM,"ZSM"); + UI_COLOR_CONFIG(GUI_COLOR_FILE_FONT,"Font"); + UI_COLOR_CONFIG(GUI_COLOR_FILE_OTHER,"Other"); + ImGui::TreePop(); + } + if (ImGui::TreeNode("Oscilloscope")) { + UI_COLOR_CONFIG(GUI_COLOR_OSC_BORDER,"Border"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_BG1,"Background (top-left)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_BG2,"Background (top-right)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_BG3,"Background (bottom-left)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_BG4,"Background (bottom-right)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE,"Waveform"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_PEAK,"Waveform (clip)"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_REF,"Reference"); + UI_COLOR_CONFIG(GUI_COLOR_OSC_GUIDE,"Guide"); + ImGui::TreePop(); + } + if (ImGui::TreeNode("Volume Meter")) { + UI_COLOR_CONFIG(GUI_COLOR_VOLMETER_LOW,"Low"); + UI_COLOR_CONFIG(GUI_COLOR_VOLMETER_HIGH,"High"); + UI_COLOR_CONFIG(GUI_COLOR_VOLMETER_PEAK,"Clip"); + ImGui::TreePop(); + } + if (ImGui::TreeNode("Orders")) { + UI_COLOR_CONFIG(GUI_COLOR_ORDER_ROW_INDEX,"Order number"); + UI_COLOR_CONFIG(GUI_COLOR_ORDER_ACTIVE,"Playing order background"); + UI_COLOR_CONFIG(GUI_COLOR_ORDER_SELECTED,"Selected order"); + UI_COLOR_CONFIG(GUI_COLOR_ORDER_SIMILAR,"Similar patterns"); + UI_COLOR_CONFIG(GUI_COLOR_ORDER_INACTIVE,"Inactive patterns"); + ImGui::TreePop(); + } + if (ImGui::TreeNode("Envelope View")) { + UI_COLOR_CONFIG(GUI_COLOR_FM_ENVELOPE,"Envelope"); + UI_COLOR_CONFIG(GUI_COLOR_FM_ENVELOPE_SUS_GUIDE,"Sustain guide"); + UI_COLOR_CONFIG(GUI_COLOR_FM_ENVELOPE_RELEASE,"Release"); + + ImGui::TreePop(); + } + if (ImGui::TreeNode("FM Editor")) { + UI_COLOR_CONFIG(GUI_COLOR_FM_ALG_BG,"Algorithm background"); + UI_COLOR_CONFIG(GUI_COLOR_FM_ALG_LINE,"Algorithm lines"); + UI_COLOR_CONFIG(GUI_COLOR_FM_MOD,"Modulator"); + UI_COLOR_CONFIG(GUI_COLOR_FM_CAR,"Carrier"); + + UI_COLOR_CONFIG(GUI_COLOR_FM_SSG,"SSG-EG"); + UI_COLOR_CONFIG(GUI_COLOR_FM_WAVE,"Waveform"); + + ImGui::TextWrapped("(the following colors only apply when \"Use separate colors for carriers/modulators in FM editor\" is on!)"); + + UI_COLOR_CONFIG(GUI_COLOR_FM_PRIMARY_MOD,"Mod. accent (primary)"); + UI_COLOR_CONFIG(GUI_COLOR_FM_SECONDARY_MOD,"Mod. accent (secondary)"); + UI_COLOR_CONFIG(GUI_COLOR_FM_BORDER_MOD,"Mod. border"); + UI_COLOR_CONFIG(GUI_COLOR_FM_BORDER_SHADOW_MOD,"Mod. border shadow"); + + UI_COLOR_CONFIG(GUI_COLOR_FM_PRIMARY_CAR,"Car. accent (primary"); + UI_COLOR_CONFIG(GUI_COLOR_FM_SECONDARY_CAR,"Car. accent (secondary)"); + UI_COLOR_CONFIG(GUI_COLOR_FM_BORDER_CAR,"Car. border"); + UI_COLOR_CONFIG(GUI_COLOR_FM_BORDER_SHADOW_CAR,"Car. border shadow"); + + ImGui::TreePop(); + } + if (ImGui::TreeNode("Macro Editor")) { + UI_COLOR_CONFIG(GUI_COLOR_MACRO_VOLUME,"Volume"); + UI_COLOR_CONFIG(GUI_COLOR_MACRO_PITCH,"Pitch"); + UI_COLOR_CONFIG(GUI_COLOR_MACRO_WAVE,"Wave"); + UI_COLOR_CONFIG(GUI_COLOR_MACRO_OTHER,"Other"); + ImGui::TreePop(); + } + if (ImGui::TreeNode("Instrument Types")) { + UI_COLOR_CONFIG(GUI_COLOR_INSTR_FM,"FM (OPN)"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_STD,"SN76489/Sega PSG"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_T6W28,"T6W28"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_GB,"Game Boy"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_C64,"C64"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_AMIGA,"Amiga/Generic Sample"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_PCE,"PC Engine"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_AY,"AY-3-8910/SSG"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_AY8930,"AY8930"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_TIA,"TIA"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_SAA1099,"SAA1099"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_VIC,"VIC"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_PET,"PET"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_VRC6,"VRC6"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_VRC6_SAW,"VRC6 (saw)"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_OPLL,"FM (OPLL)"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_OPL,"FM (OPL)"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_FDS,"FDS"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_VBOY,"Virtual Boy"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_N163,"Namco 163"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_SCC,"Konami SCC"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_OPZ,"FM (OPZ)"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_POKEY,"POKEY"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_BEEPER,"PC Beeper"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_SWAN,"WonderSwan"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_MIKEY,"Lynx"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_VERA,"VERA"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_X1_010,"X1-010"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_ES5506,"ES5506"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_MULTIPCM,"MultiPCM"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_SNES,"SNES"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_SU,"Sound Unit"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_NAMCO,"Namco WSG"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_OPL_DRUMS,"FM (OPL Drums)"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_OPM,"FM (OPM)"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_NES,"NES"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_MSM6258,"MSM6258"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_MSM6295,"MSM6295"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_ADPCMA,"ADPCM-A"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_ADPCMB,"ADPCM-B"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_SEGAPCM,"Sega PCM"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_QSOUND,"QSound"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_YMZ280B,"YMZ280B"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_RF5C68,"RF5C68"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_MSM5232,"MSM5232"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_K007232,"K007232"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_GA20,"GA20"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_POKEMINI,"Pokémon Mini"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_SM8521,"SM8521"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_PV1000,"PV-1000"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_K053260,"K053260"); + UI_COLOR_CONFIG(GUI_COLOR_INSTR_UNKNOWN,"Other/Unknown"); + ImGui::TreePop(); + } + if (ImGui::TreeNode("Channel")) { + UI_COLOR_CONFIG(GUI_COLOR_CHANNEL_BG,"Single color (background)"); + UI_COLOR_CONFIG(GUI_COLOR_CHANNEL_FG,"Single color (text)"); + UI_COLOR_CONFIG(GUI_COLOR_CHANNEL_FM,"FM"); + UI_COLOR_CONFIG(GUI_COLOR_CHANNEL_PULSE,"Pulse"); + UI_COLOR_CONFIG(GUI_COLOR_CHANNEL_NOISE,"Noise"); + UI_COLOR_CONFIG(GUI_COLOR_CHANNEL_PCM,"PCM"); + UI_COLOR_CONFIG(GUI_COLOR_CHANNEL_WAVE,"Wave"); + UI_COLOR_CONFIG(GUI_COLOR_CHANNEL_OP,"FM operator"); + UI_COLOR_CONFIG(GUI_COLOR_CHANNEL_MUTED,"Muted"); + ImGui::TreePop(); + } + if (ImGui::TreeNode("Pattern")) { + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_PLAY_HEAD,"Playhead"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_CURSOR,"Cursor"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_CURSOR_HOVER,"Cursor (hovered)"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_CURSOR_ACTIVE,"Cursor (clicked)"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_SELECTION,"Selection"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_SELECTION_HOVER,"Selection (hovered)"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_SELECTION_ACTIVE,"Selection (clicked)"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_HI_1,"Highlight 1"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_HI_2,"Highlight 2"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_ROW_INDEX,"Row number"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_ROW_INDEX_HI1,"Row number (highlight 1)"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_ROW_INDEX_HI2,"Row number (highlight 2)"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_ACTIVE,"Note"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_ACTIVE_HI1,"Note (highlight 1)"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_ACTIVE_HI2,"Note (highlight 2)"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_INACTIVE,"Blank"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_INACTIVE_HI1,"Blank (highlight 1)"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_INACTIVE_HI2,"Blank (highlight 2)"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_INS,"Instrument"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_INS_WARN,"Instrument (invalid type)"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_INS_ERROR,"Instrument (out of range)"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_VOLUME_MIN,"Volume (0%)"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_VOLUME_HALF,"Volume (50%)"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_VOLUME_MAX,"Volume (100%)"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_INVALID,"Invalid effect"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_PITCH,"Pitch effect"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_VOLUME,"Volume effect"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_PANNING,"Panning effect"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_SONG,"Song effect"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_TIME,"Time effect"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_SPEED,"Speed effect"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY,"Primary specific effect"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_SYS_SECONDARY,"Secondary specific effect"); + UI_COLOR_CONFIG(GUI_COLOR_PATTERN_EFFECT_MISC,"Miscellaneous"); + UI_COLOR_CONFIG(GUI_COLOR_EE_VALUE,"External command output"); + ImGui::TreePop(); + } + if (ImGui::TreeNode("Sample Editor")) { + UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_BG,"Background"); + UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_FG,"Waveform"); + UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_TIME_BG,"Time background"); + UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_TIME_FG,"Time text"); + UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_LOOP,"Loop region"); + UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_CENTER,"Center guide"); + UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_GRID,"Grid"); + UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_SEL,"Selection"); + UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_SEL_POINT,"Selection points"); + UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_NEEDLE,"Preview needle"); + UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_NEEDLE_PLAYING,"Playing needles"); + UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_LOOP_POINT,"Loop markers"); + UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_CHIP_DISABLED,"Chip select: disabled"); + UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_CHIP_ENABLED,"Chip select: enabled"); + UI_COLOR_CONFIG(GUI_COLOR_SAMPLE_CHIP_WARNING,"Chip select: enabled (failure)"); + ImGui::TreePop(); + } + if (ImGui::TreeNode("Pattern Manager")) { + UI_COLOR_CONFIG(GUI_COLOR_PAT_MANAGER_NULL,"Unallocated"); + UI_COLOR_CONFIG(GUI_COLOR_PAT_MANAGER_UNUSED,"Unused"); + UI_COLOR_CONFIG(GUI_COLOR_PAT_MANAGER_USED,"Used"); + UI_COLOR_CONFIG(GUI_COLOR_PAT_MANAGER_OVERUSED,"Overused"); + UI_COLOR_CONFIG(GUI_COLOR_PAT_MANAGER_EXTREMELY_OVERUSED,"Really overused"); + UI_COLOR_CONFIG(GUI_COLOR_PAT_MANAGER_COMBO_BREAKER,"Combo Breaker"); + ImGui::TreePop(); + } + if (ImGui::TreeNode("Piano")) { + UI_COLOR_CONFIG(GUI_COLOR_PIANO_BACKGROUND,"Background"); + UI_COLOR_CONFIG(GUI_COLOR_PIANO_KEY_TOP,"Upper key"); + UI_COLOR_CONFIG(GUI_COLOR_PIANO_KEY_TOP_HIT,"Upper key (feedback)"); + UI_COLOR_CONFIG(GUI_COLOR_PIANO_KEY_TOP_ACTIVE,"Upper key (pressed)"); + UI_COLOR_CONFIG(GUI_COLOR_PIANO_KEY_BOTTOM,"Lower key"); + UI_COLOR_CONFIG(GUI_COLOR_PIANO_KEY_BOTTOM_HIT,"Lower key (feedback)"); + UI_COLOR_CONFIG(GUI_COLOR_PIANO_KEY_BOTTOM_ACTIVE,"Lower key (pressed)"); + ImGui::TreePop(); + } + if (ImGui::TreeNode("Clock")) { + UI_COLOR_CONFIG(GUI_COLOR_CLOCK_TEXT,"Clock text"); + UI_COLOR_CONFIG(GUI_COLOR_CLOCK_BEAT_LOW,"Beat (off)"); + UI_COLOR_CONFIG(GUI_COLOR_CLOCK_BEAT_HIGH,"Beat (on)"); + + ImGui::TreePop(); + } + if (ImGui::TreeNode("Patchbay")) { + UI_COLOR_CONFIG(GUI_COLOR_PATCHBAY_PORTSET,"PortSet"); + UI_COLOR_CONFIG(GUI_COLOR_PATCHBAY_PORT,"Port"); + UI_COLOR_CONFIG(GUI_COLOR_PATCHBAY_PORT_HIDDEN,"Port (hidden/unavailable)"); + UI_COLOR_CONFIG(GUI_COLOR_PATCHBAY_CONNECTION,"Connection (selected)"); + UI_COLOR_CONFIG(GUI_COLOR_PATCHBAY_CONNECTION_BG,"Connection (other)"); + + ImGui::TreePop(); + } + if (ImGui::TreeNode("Log Viewer")) { + UI_COLOR_CONFIG(GUI_COLOR_LOGLEVEL_ERROR,"Log level: Error"); + UI_COLOR_CONFIG(GUI_COLOR_LOGLEVEL_WARNING,"Log level: Warning"); + UI_COLOR_CONFIG(GUI_COLOR_LOGLEVEL_INFO,"Log level: Info"); + UI_COLOR_CONFIG(GUI_COLOR_LOGLEVEL_DEBUG,"Log level: Debug"); + UI_COLOR_CONFIG(GUI_COLOR_LOGLEVEL_TRACE,"Log level: Trace/Verbose"); + ImGui::TreePop(); + } + END_SECTION; } if (nonLatchNibble) { // ok, so you decided to read the code. @@ -2732,44 +2643,41 @@ void FurnaceGUI::drawSettings() { // "Nice Amiga cover of the song!" - enables hidden systems (YMU759/SoundUnit/Dummy) // "42 63" - enables all instrument types // "????" - enables stuff - if (ImGui::BeginTabItem("Cheat Codes (OLD)")) { - ImVec2 settingsViewSize=ImGui::GetContentRegionAvail(); - settingsViewSize.y-=ImGui::GetFrameHeight()+ImGui::GetStyle().WindowPadding.y; - if (ImGui::BeginChild("SettingsView",settingsViewSize)) { - ImGui::Text("Enter code:"); - ImGui::InputText("##CheatCode",&mmlString[31]); - if (ImGui::Button("Submit")) { - unsigned int checker=0x11111111; - unsigned int checker1=0; - int index=0; - mmlString[30]="invalid code"; + CONFIG_SECTION("Cheat Codes") { + // SUBSECTION ENTER CODE: + CONFIG_SUBSECTION("Enter code:"); + ImGui::InputText("##CheatCode",&mmlString[31]); + if (ImGui::Button("Submit")) { + unsigned int checker=0x11111111; + unsigned int checker1=0; + int index=0; + mmlString[30]="invalid code"; - for (char& i: mmlString[31]) { - checker^=((unsigned int)i)<>1|(((checker)^(checker>>2)^(checker>>3)^(checker>>5))&1)<<31); - checker1<<=1; - index=(index+1)&31; - } - if (checker==0x90888b65 && checker1==0x1482) { - mmlString[30]="toggled alternate UI"; - toggleMobileUI(!mobileUI); - } - if (checker==0x5a42a113 && checker1==0xe4ef451e) { - mmlString[30]=":smile: :star_struck: :sunglasses: :ok_hand:"; - settings.hiddenSystems=!settings.hiddenSystems; - } - if (checker==0xe888896b && checker1==0xbde) { - mmlString[30]="enabled all instrument types"; - settings.displayAllInsTypes=!settings.displayAllInsTypes; - } - - mmlString[31]=""; + for (char& i: mmlString[31]) { + checker^=((unsigned int)i)<>1|(((checker)^(checker>>2)^(checker>>3)^(checker>>5))&1)<<31); + checker1<<=1; + index=(index+1)&31; } - ImGui::Text("%s",mmlString[30].c_str()); + if (checker==0x90888b65 && checker1==0x1482) { + mmlString[30]="toggled alternate UI"; + toggleMobileUI(!mobileUI); + } + if (checker==0x5a42a113 && checker1==0xe4ef451e) { + mmlString[30]=":smile: :star_struck: :sunglasses: :ok_hand:"; + settings.hiddenSystems=!settings.hiddenSystems; + } + if (checker==0xe888896b && checker1==0xbde) { + mmlString[30]="enabled all instrument types"; + settings.displayAllInsTypes=!settings.displayAllInsTypes; + } + + mmlString[31]=""; } - ImGui::EndChild(); - ImGui::EndTabItem(); + ImGui::Text("%s",mmlString[30].c_str()); + + END_SECTION; } } ImGui::EndTabBar(); From e9af48cf8b27daac28b21310cd1c1f81d3c802a9 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 30 Jul 2023 04:34:24 -0500 Subject: [PATCH 44/87] GUI: update credits --- src/gui/about.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/about.cpp b/src/gui/about.cpp index a79ce6e34..b849c6bbe 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -84,7 +84,7 @@ const char* aboutLine[]={ "djtuBIG-MaliceX", "dumbut", "Eknous-P", - "ElectricKeet", + "Electric Keet", "EpicTyphlosion", "FΛDE", "Forte", @@ -138,6 +138,7 @@ const char* aboutLine[]={ "ZoomTen (Zumi)", "", "-- additional feedback/fixes --", + "Electric Keet", "fd", "GENATARi", "host12prog", From 9420bbe0583422e6b5d2ad53cf1ca5ec26f1e5c0 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 30 Jul 2023 14:43:25 -0500 Subject: [PATCH 45/87] GUI: mark modified when swapping channels --- src/gui/channels.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/channels.cpp b/src/gui/channels.cpp index 48d5ed8cb..dd19d652d 100644 --- a/src/gui/channels.cpp +++ b/src/gui/channels.cpp @@ -69,6 +69,7 @@ void FurnaceGUI::drawChannels() { if (dragItem->IsDataType("FUR_CHAN")) { if (chanToMove!=i && chanToMove>=0) { e->swapChannelsP(chanToMove,i); + MARK_MODIFIED; } chanToMove=-1; } From 4c13fe08d28e6cf1fe2862f894d090fbf56b1a9f Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 30 Jul 2023 14:53:26 -0500 Subject: [PATCH 46/87] YM2612: prioritize urgentWrite() on hard reset --- src/engine/platform/fmsharedbase.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/engine/platform/fmsharedbase.h b/src/engine/platform/fmsharedbase.h index c0fb7dd2f..4200d7570 100644 --- a/src/engine/platform/fmsharedbase.h +++ b/src/engine/platform/fmsharedbase.h @@ -109,7 +109,8 @@ class DivPlatformFMBase: public DivDispatch { if (!skipRegisterWrites && !flushFirst) { if (writes.empty()) { writes.push_back(QueuedWrite(a,v)); - } else if (writes.size()>16 || writes.front().addrOrVal) { + } else if ((writes.size()>16 && writes.front().addr!=0xf0) || writes.front().addrOrVal) { + // $f0 is used by OPN hard reset writes.push_back(QueuedWrite(a,v)); } else { writes.push_front(QueuedWrite(a,v)); From 24e7d4b9ce821d0c4faf5fc6e5f64e7b1055feba Mon Sep 17 00:00:00 2001 From: Electric Keet Date: Sun, 30 Jul 2023 11:07:09 -0700 Subject: [PATCH 47/87] Updating settings docs to match new arrangement. --- doc/2-interface/settings.md | 558 +++++++++++++++++++++--------------- 1 file changed, 328 insertions(+), 230 deletions(-) diff --git a/doc/2-interface/settings.md b/doc/2-interface/settings.md index d6ed79c60..32c85242b 100644 --- a/doc/2-interface/settings.md +++ b/doc/2-interface/settings.md @@ -4,12 +4,38 @@ settings are saved when clicking the **OK** button at the bottom of the dialog. -# General +## General -- **Workspace layout** - - **Import**: reads a .ini layout file. - - **Export**: writes current layout to a .ini file. - - **Reset**: resets layout to default. +### Program + +- **Render backend** + - changing this may help with performace issues. +- **Late render clear** +- **Power-saving mode** + - saves power by lowering the frame rate to 2fps when idle. + - may cause issues under Mesa drivers! +- **Disable threaded input (restart after changing!)** + - threaded input processes key presses for note preview on a separate thread (on supported platforms), which reduces latency. + - however, crashes have been reported when threaded input is on. enable this option if that is the case. +- **Enable event delay** + - may cause issues with high-polling-rate mice when previewing notes. + +### File + +- **Use system file picker**: use native OS file dialog instead of Furnace's. +- **Number of recent files** +- **Compress when saving** + - use zlib to compress saved songs. +- **Save unused patterns** +- **Use new pattern format when saving** +- **Don't apply compatibility flags when loading .dmf** +- **Audio export loop/fade out time:** + - **Set to these values on start-up:** + - **Loops**: number of additional times to play through `0Bxx` song loop. + - **Fade out (seconds)**: length of fade out after final loop. + - **Remember last values** + +### Chip - **Initial system**: the system of chips loaded on starting Furnace. - **Current system**: sets current chips as default. @@ -18,172 +44,131 @@ settings are saved when clicking the **OK** button at the bottom of the dialog. - **Reset to defaults**: sets default to "Sega Genesis/Mega Drive". - **Name**: name for the default system. may be set to any text. - system configuration: same as in the [chip manager](../8-advanced/chip-manager.md) and [mixer](../8-advanced/mixer.md). +- **When creating new song**: + - **Display system preset selector** + - **Start with initial system** +- **Restart song when changing chip properties** + +### Start-up - **Play intro on start-up:** - **No**: skips intro entirely. - **Short**: shows silent title screen briefly. - **Full (short when loading song)**: shows animated musical intro unless started with a song (command line, double-clicking a .fur file, etc.) - **Full (always)**: always shows animated musical intro. -- **When creating new song**: - - **Display system preset selector** - - **Start with initial system** +- **Disable fade-in during start-up** +- **About screen party time** + - _warning:_ may cause epileptic seizures. + +### Behavior -- **Double-click time (seconds)**: maximum time between mouse clicks to recognize them as a double-click. -- **Toggle channel solo on:** select which interactions with a channel header will toggle solo for that channel. -- **Push value when overwriting instead of clearing it**: in the order list and pattern editors, typing into an already-filled value will shift digits instead of starting fresh. - - if off: moving the cursor onto the value `A5` and typing a "B" results in `0B`. - - if on: with the cursor on the value `A5` and typing a "B" results in `5B`. -- **Move cursor up on backspace-delete** -- **Move cursor by edit step on delete** -- **Change current instrument when changing instrument column (absorb)** -- **Delete effect value when deleting effect** -- **Change order when scrolling outside of pattern bounds**: - - if off, the pattern edit cursor will stay locked within the current order. - - if on, moving the cursor past the edge of the previous or next order will move to that order. -- **Move cursor by edit step on insert (push)** -- **Move cursor to end of clipboard content when pasting** -- **Don't scroll when moving cursor** -- **Double click selects entire column** -- **Allow docking editors** -- **Don't raise pattern editor on click** -- **Focus pattern editor when selecting instrument** -- **Restart song when changing chip properties** -- **Use system file picker**: use native OS file dialog instead of Furnace's. -- **Only allow window movement when clicking on title bar** -- **Enable event delay** - - may cause issues with high-polling-rate mice when previewing notes. -- **Power-saving mode** - - saves power by lowering the frame rate to 2fps when idle. - - may cause issues under Mesa drivers! -- **Disable threaded input (restart after changing!)** - - threaded input processes key presses for note preview on a separate thread (on supported platforms), which reduces latency. - - however, crashes have been reported when threaded input is on. enable this option if that is the case. -- **Remember window position** - - remembers the window's last position on start-up. - **New instruments are blank** -- **Save unused patterns** -- **Compress when saving** - - use zlib to compress saved songs. -- **Cursor follows current order when moving it** - - applies when playback is stopped. -- **Audio export loop/fade out time:** - - **Set to these values on start-up:** - - **Loops**: number of additional times to play through `0Bxx` song loop. - - **Fade out (seconds)**: length of fade out after final loop. - - **Remember last values** -- **Note preview behavior:** - - **Never** - - **When cursor is in Note column** - - **When cursor is in Note column or not in edit mode** - - **Always** -- **Wrap pattern cursor horizontally:** - - **No** - - **Yes** - - **Yes, and move to next/prev row** -- **Wrap pattern cursor vertically:** - - **No** - - **Yes** - - **Yes, and move to next/prev pattern** -- **Cursor movement keys behavior:** - - **Move by one** - - **Move by Edit Step** -- **Effect input cursor behavior:** - - **Move down** - - **Move to effect value (otherwise move down)** - - **Move to effect value/next effect and wrap around** -- **Allow dragging selection:** - - **No** - - **Yes** - - **Yes (while holding Ctrl only)** -# Audio/MIDI +## Audio + +### Output - **Backend**: select SDL or JACK for audio output. - only appears on Linux, or MacOS compiled with JACK support +- **Driver** - **Device**: audio device for playback. - **Sample rate** - **Outputs**: select number of audio outputs created, up to 16. - only appears when Backend is JACK. - **Channels**: number of output channels to use. - **Buffer size**: size of buffer in both samples and milliseconds. -- **Quality**: selects quality of resampling. low quality reduces CPU load. -- **Metronome volume** - **Low-latency mode (experimental!)**: reduces latency by running the engine faster than the tick rate. useful for live playback/jam mode. - _warning:_ experimental! may produce glitches. only enable if your buffer size is small (10ms or less). - **Force mono audio** -- **Software clipping**: clips output to nominal range (-1.0 to 1.0) before passing it to the audio device. - - this avoids activating Windows' built-in limiter. - **want:** displays requested audio configuration. - **got:** displays actual audio configuration returned by audio backend. -- **MIDI input** -- **MIDI output** -- **MIDI input settings** - - **Note input** - - **Velocity input** - - **Map MIDI channels to direct channels** - - **Map Yamaha FM voice data to instruments** - - **Program change is instrument selection** - - **Value input style**: +### Mixing + +- **Quality**: selects quality of resampling. low quality reduces CPU load. +- **Software clipping**: clips output to nominal range (-1.0 to 1.0) before passing it to the audio device. + - this avoids activating Windows' built-in limiter. + +### Metronome + +- **Metronome volume** + + + +## MIDI + +### MIDI input + +- **MIDI input**: input device. +- **Note input** +- **Velocity input** +- **Map MIDI channels to direct channels** +- **Map Yamaha FM voice data to instruments** +- **Program change is instrument selection** +- **Value input style**: + - **Disabled/custom** + - **Two octaves (0 is C-4, F is D#5)** + - **Raw (note number is value)** + - **Two octaves alternate (lower keys are 0-9, upper keys are A-F)** + - **Use dual control change (one for each nibble)** + - **CC of upper nibble** + - **CC of lower nibble** + - **Use 14-bit control change** + - **MSB CC** + - **LSB CC** + - **Use single control change** + - **Control** +- **Per-column control change** + - **Instrument**\ + **Volume**\ + **Effect `x` type**\ + **Effect `x` value** - **Disabled/custom** - - **Two octaves (0 is C-4, F is D#5)** - - **Raw (note number is value)** - - **Two octaves alternate (lower keys are 0-9, upper keys are A-F)** - **Use dual control change (one for each nibble)** - **CC of upper nibble** - **CC of lower nibble** - **Use 14-bit control change** - **MSB CC** - **LSB CC** - - **Use single control change** + - **Use single control change (imprecise)** - **Control** - - **Per-column control change** - - **Instrument**\ - **Volume**\ - **Effect `x` type**\ - **Effect `x` value** - - **Disabled/custom** - - **Use dual control change (one for each nibble)** - - **CC of upper nibble** - - **CC of lower nibble** - - **Use 14-bit control change** - - **MSB CC** - - **LSB CC** - - **Use single control change (imprecise)** - - **Control** - - **Volume curve** - - **Actions:** - - **`+`** button: adds a new action. - - window-with-arrow button: new action with learning! press a button or move a slider/knob/something on your device. - - each action has the following: - - **Type** - - **Channel** - - **Note/Control** - - **Velocity/Value** - - **Action** - - **Learn** - - **Remove** +- **Volume curve** +- **Actions:** + - **`+`** button: adds a new action. + - window-with-arrow button: new action with learning! press a button or move a slider/knob/something on your device. + - each action has the following: + - **Type** + - **Channel** + - **Note/Control** + - **Velocity/Value** + - **Action** + - **Learn** + - **Remove** -- **MIDI output settings** - - **Output mode:** - - **Off (use for TX81Z)** - - **Melodic** - - **Send Program Change** - - **Send MIDI clock** - - **Send MIDI timecode** - - **Timecode frame rate:** - - **Closest to Tick Rate** - - **Film (24fps)** - - **PAL (25fps)** - - **NTSC drop (29.97fps)** - - **NTSC non-drop (30fps)** +### MIDI output -# Emulation +- **MIDI output**: output device. +- **Output mode:** + - **Off (use for TX81Z)** + - **Melodic** +- **Send Program Change** +- **Send MIDI clock** +- **Send MIDI timecode** + - **Timecode frame rate:** + - **Closest to Tick Rate** + - **Film (24fps)** + - **PAL (25fps)** + - **NTSC drop (29.97fps)** + - **NTSC non-drop (30fps)** +## Emulation + +### Cores + - **Arcade/YM2151 core**\ **Genesis/YM2612 core**\ **SN76489 core**\ @@ -202,16 +187,122 @@ settings are saved when clicking the **OK** button at the bottom of the dialog. -# Appearance +## Keyboard + +### Keyboard + +- **Import** +- **Export** +- **Reset defaults** +- several categories of keybinds... + - click on a keybind then enter a key or key combination to change it + - right-click to clear the keybind + + + +## Interface + +### Layout + +- **Workspace layout** + - **Import**: reads a .ini layout file. + - **Export**: writes current layout to a .ini file. + - **Reset**: resets layout to default. +- **Allow docking editors** +- **Remember window position** + - remembers the window's last position on start-up. +- **Only allow window movement when clicking on title bar** +- **Play/edit controls layout:** + - **Classic** + - **Compact** + - **Compact (vertical)** + - **Split** +- **Position of buttons in Orders:** + - **Top** + - **Left** + - **Right** + +### Mouse + +- **Double-click time (seconds)**: maximum time between mouse clicks to recognize them as a double-click. +- **Don't raise pattern editor on click** +- **Focus pattern editor when selecting instrument** +- **Note preview behavior:** + - **Never** + - **When cursor is in Note column** + - **When cursor is in Note column or not in edit mode** + - **Always** +- **Allow dragging selection:** + - **No** + - **Yes** + - **Yes (while holding Ctrl only)** +- **Toggle channel solo on:** select which interactions with a channel header will toggle solo for that channel. + - Right-click or double click + - Right-click + - Double-click +- **Double click selects entire column** + +### Cursor behavior + +- **Insert pushes entire channel row** +- **Pull delete affects entire channel row** +- **Push value when overwriting instead of clearing it**: in the order list and pattern editors, typing into an already-filled value will shift digits instead of starting fresh. + - if off: moving the cursor onto the value `A5` and typing a "B" results in `0B`. + - if on: with the cursor on the value `A5` and typing a "B" results in `5B`. +- **Effect input behavior:** + - **Move down** + - **Move to effect value (otherwise move down)** + - **Move to effect value/next effect and wrap around** +- **Delete effect value when deleting effect** +- **Change current instrument when changing instrument column (absorb)** + + +### Cursor movement + +- **Wrap horizontally:** + - **No** + - **Yes** + - **Yes, and move to next/prev row** +- **Wrap vertically:** + - **No** + - **Yes** + - **Yes, and move to next/prev pattern** + - **Yes, and move to next/prev pattern (wrap around)** +- **Cursor movement keys behavior:** + - **Move by one** + - **Move by Edit Step** +- **Move cursor by edit step on delete** +- **Move cursor by edit step on insert (push)** +- **Move cursor up on backspace-delete** +- **Move cursor to end of clipboard content when pasting** + +### Scrolling + +- **Change order when scrolling outside of pattern bounds**: + - **No**: the pattern edit cursor will stay locked within the current order. + - **Yes**: moving the cursor past the edge of the previous or next order will move to that order, but not past the start or end of a song. + - **Yes, and wrap around song**: as above, but will wrap from song end to start. +- **Cursor follows current order when moving it** + - applies when playback is stopped. +- **Don't scroll when moving cursor** +- **Move cursor with scroll wheel** + + + +## Appearance + +### Scaling -- **Render driver** - **Automatic UI scaling factor**: automatically match the OS's UI scaling. - **UI scaling factor**: only if "Automatic UI scaling factor" is off. +- **Icon size** + +### Text + - **Main font**: if "Custom...", a file path selector will appear beneath. - **Size** - **Pattern font**: if "Custom...", a file path selector will appear beneath. - **Size** -- **Icon size** - **Display Japanese characters**\ **Display Chinese (Simplified) characters**\ **Display Chinese (Traditional) characters**\ @@ -219,25 +310,7 @@ settings are saved when clicking the **OK** button at the bottom of the dialog. - only toggle these options if you have enough graphics memory. - these are a temporary solution until dynamic font atlas is implemented in Dear ImGui. -- **Number of recent files** - -- **Pattern view labels:** -- **Note off (3-char)**: default is `OFF` -- **Note release (3-char)**: default is `===`. -- **Macro release (3-char)**: default is `REL`. -- **Empty field (3-char)**: default is `...`. -- **Empty field (2-char)**: default is `..`. - -- **Orders row number format:** - - **Decimal** - - **Hexadecimal** -- **Pattern row number format:** - - **Decimal** - - **Hexadecimal** -- **FM parameter names:** - - **Friendly** - - **Technical** - - **Technical (alternate)** +### Program - **Title bar:** - **Furnace** @@ -251,43 +324,40 @@ settings are saved when clicking the **OK** button at the bottom of the dialog. - **File path** - **Cursor details or file path** - **Nothing** -- **Play/edit controls layout:** - - **Classic** - - **Compact** - - **Compact (vertical)** - - **Split** -- **Position of buttons in Orders:** - - **Top** - - **Left** - - **Right** -- **FM parameter editor layout:** - - **Modern** - - **Compact (2x2, classic)** - - **Compact (1x4)** - - **Compact (4x1)** - - **Alternate (2x2)** - - **Alternate (1x4)** - - **Alternate (4x1)** -- **Position of Sustain in FM editor:** - - **Between Decay and Sustain Rate** - - **After Release Rate** -- **Macro editor layout:** - - **Unified** - - **Mobile** - - **Grid** - - **Single (with list)** - - **Single (combo box)** -- **Namco 163 chip name** +### Orders + +- **Highlight channel at cursor in Orders** +- **Orders row number format:** + - **Decimal** + - **Hexadecimal** + +### Pattern + +- **Center pattern view**: centers pattern horizontally in view. +- **Overflow pattern highlights** +- **Display previous/next pattern** +- **Pattern row number format:** + - **Decimal** + - **Hexadecimal** +- **Pattern view labels:** + - **Note off (3-char)**: default is `OFF` + - **Note release (3-char)**: default is `===`. + - **Macro release (3-char)**: default is `REL`. + - **Empty field (3-char)**: default is `...`. + - **Empty field (2-char)**: default is `..`. +- **Pattern view spacing after:** number of pixels of space between columns. + - **Note** + - **Instrument** + - **Volume** + - **Effect** + - **Effect value** +- **Single-digit effects for 00-0F** +- **Use flats instead of sharps** +- **Use German notation**: display `B` notes as `H`, and `A#` notes as `B`. + +### Channel -- **Channel colors:** - - **Single** - - **Channel type** - - **Instrument type** -- **Channel name colors:** - - **Single** - - **Channel type** - - **Instrument type** - **Channel style:** - **Classic** - **Line** @@ -310,60 +380,88 @@ settings are saved when clicking the **OK** button at the bottom of the dialog. - **Regular** - **Monospace** - **Center channel name** +- **Channel colors:** + - **Single** + - **Channel type** + - **Instrument type** +- **Channel name colors:** + - **Single** + - **Channel type** + - **Instrument type** + +### Assets -- **Colorize instrument editor using instrument type** -- **Use separate colors for carriers/modulators in FM editor** - **Unified instrument/wavetable/sample list** - **Horizontal instrument list** -- **Use standard OPL waveform names** -- **Overflow pattern highlights** -- **Display previous/next pattern** -- **Use German notation**: display `B` notes as `H`, and `A#` notes as `B`. -- **Single-digit effects for 00-0F** -- **Center pattern view**: centers pattern horizontally in view. -- **Unsigned FM detune values** -- **Highlight channel at cursor in Orders** -- **About screen party time** - - _warning:_ may cause epileptic seizures. +- **Colorize instrument editor using instrument type** + +### Macro Editor + +- **Macro editor layout:** + - **Unified** + - **Mobile** + - **Grid** + - **Single (with list)** + - **Single (combo box)** +- **Use classic macro editor vertical slider** + +### Wave Editor - **Use compact wave editor** -- **Use classic macro editor vertical slider** + +### FM Editor + +- **FM parameter names:** + - **Friendly** + - **Technical** + - **Technical (alternate)** +- **Use standard OPL waveform names** +- **FM parameter editor layout:** + - **Modern** + - **Compact (2x2, classic)** + - **Compact (1x4)** + - **Compact (4x1)** + - **Alternate (2x2)** + - **Alternate (1x4)** + - **Alternate (4x1)** +- **Position of Sustain in FM editor:** + - **Between Decay and Sustain Rate** + - **After Release Rate** +- **Use separate colors for carriers/modulators in FM editor** +- **Unsigned FM detune values** + +### Statistics + +- **Chip memory usage unit:** + - **Bytes** + - **Kilobytes** + +### Oscilloscope + +- **Rounded corners** +- **Border** +- **Fill entire window** +- **Waveform goes out of bounds** + +### Windows + - **Rounded window corners** - **Rounded buttons** - **Rounded menu corners** - **Borders around widgets** -- **Disable fade-in during start-up** - -- **Oscilloscope settings:** - - **Rounded corners** - - **Fill entire window** - - **Waveform goes out of bounds** - - **Border** - -- **Pattern view spacing after:** - - **Note** - - **Instrument** - - **Volume** - - **Effect** - - **Effect value** -- **Color scheme** - - **Import** - - **Export** - - **Reset defaults** - - **General** - - **Color scheme type:** - - **Dark** - - **Light** - - **Frame shading** - - several more categories... -# Keyboard +## Color + +### Color scheme - **Import** - **Export** - **Reset defaults** -- several categories of keybinds... - - click on a keybind then enter a key or key combination to change it - - right-click to clear the keybind +- **General** + - **Color scheme type:** + - **Dark** + - **Light** + - **Frame shading**: applies a gradient effect to buttons and input boxes. +- several more categories... From 20ea5827cf3068590882ff1bf1dff481059d2370 Mon Sep 17 00:00:00 2001 From: Eknous-P Date: Sun, 30 Jul 2023 15:10:45 +0400 Subject: [PATCH 48/87] chanOsc note name --- src/gui/chanOsc.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/gui/chanOsc.cpp b/src/gui/chanOsc.cpp index 803a5665b..4b575b52b 100644 --- a/src/gui/chanOsc.cpp +++ b/src/gui/chanOsc.cpp @@ -304,6 +304,7 @@ void FurnaceGUI::drawChanOsc() { "- %C: channel short name\n" "- %d: channel number (starting from 0)\n" "- %D: channel number (starting from 1)\n" + "- %n: channel note\n" "- %i: instrument name\n" "- %I: instrument number (decimal)\n" "- %x: instrument number (hex)\n" @@ -539,6 +540,12 @@ void FurnaceGUI::drawChanOsc() { text+=fmt::sprintf("%.2X",chanState->volume>>8); break; } + case 'n': { + DivChannelState* chanState=e->getChanState(ch); + if (chanState==NULL || !(chanState->keyOn)) break; + text+=fmt::sprintf("%s",noteName(short (chanState->note),0)); + break; + } case '%': text+='%'; break; From 71b76e3e88426ea18bb69231f57645e9c4803284 Mon Sep 17 00:00:00 2001 From: cam900 Date: Mon, 31 Jul 2023 20:06:07 +0900 Subject: [PATCH 49/87] Fix K053260 sample offset --- .../vgsound_emu/src/k053260/k053260.cpp | 2 +- src/engine/platform/k053260.cpp | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/extern/vgsound_emu-modified/vgsound_emu/src/k053260/k053260.cpp b/extern/vgsound_emu-modified/vgsound_emu/src/k053260/k053260.cpp index 59d8af8f7..cd6fe8e89 100644 --- a/extern/vgsound_emu-modified/vgsound_emu/src/k053260/k053260.cpp +++ b/extern/vgsound_emu-modified/vgsound_emu/src/k053260/k053260.cpp @@ -226,7 +226,7 @@ void k053260_core::voice_t::write(u8 address, u8 data) m_start = (m_start & ~0x00ff00) | (u32(data) << 8); break; case 6: // start address bit 16-20 - m_start = (m_start & ~0x1f0000) | (u32(bitfield(data, 16, 5)) << 16); + m_start = (m_start & ~0x1f0000) | (u32(bitfield(data, 0, 5)) << 16); break; case 7: // volume m_volume = bitfield(data, 0, 7); diff --git a/src/engine/platform/k053260.cpp b/src/engine/platform/k053260.cpp index 7ba1cc2ca..5791d2426 100644 --- a/src/engine/platform/k053260.cpp +++ b/src/engine/platform/k053260.cpp @@ -145,15 +145,15 @@ void DivPlatformK053260::tick(bool sysTick) { off=8363.0/s->centerRate; } } - DivSample* s=parent->getSample(chan[i].sample); + DivSample* s=parent->getSample(sample); chan[i].freq=0x1000-(int)(off*parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,true,0,chan[i].pitch2,chipClock,CHIP_DIVIDER)); if (chan[i].freq>4095) chan[i].freq=4095; if (chan[i].freq<0) chan[i].freq=0; if (chan[i].keyOn) { unsigned int start=0; unsigned int length=0; - if (chan[i].sample>=0 && chan[i].samplesong.sampleLen) { - start=sampleOffK053260[chan[i].sample]; + if (sample>=0 && samplesong.sampleLen) { + start=sampleOffK053260[sample]; length=s->length8; if (chan[i].reverse) { start+=length; @@ -163,8 +163,7 @@ void DivPlatformK053260::tick(bool sysTick) { if (chan[i].audPos>0) { if (chan[i].reverse) { start=start-MIN(chan[i].audPos,s->length8); - } - else { + } else { start=start+MIN(chan[i].audPos,s->length8); } length=MAX(1,length-chan[i].audPos); From ff51f97606e1748724d9be4e2b0a450153165aa9 Mon Sep 17 00:00:00 2001 From: Electric Keet Date: Mon, 31 Jul 2023 10:58:19 -0700 Subject: [PATCH 50/87] Document new chanOsc parameter. --- doc/8-advanced/chanosc.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/8-advanced/chanosc.md b/doc/8-advanced/chanosc.md index 4e3962ced..8bcb09125 100644 --- a/doc/8-advanced/chanosc.md +++ b/doc/8-advanced/chanosc.md @@ -19,6 +19,7 @@ right-clicking within the view will change it to the configuration view shown ab - `%C`: channel short name - `%d`: channel number (starting from 0) - `%D`: channel number (starting from 1) + - `%n`: channel note - `%i`: instrument name - `%I`: instrument number (decimal) - `%x`: instrument number (hex) From ed56fc274f17371eec7e6f7893be1e6b16c47574 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 1 Aug 2023 04:25:21 -0500 Subject: [PATCH 51/87] update the_best-1990.fur --- demos/nes/the_best-1990.fur | Bin 10600 -> 16531 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/demos/nes/the_best-1990.fur b/demos/nes/the_best-1990.fur index c5b62f15f39de90d3e421a3dd053e8966b04db45..ca599260b083cf39b53c8411d71a2bbc561f6dea 100644 GIT binary patch literal 16531 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 C4XN+| From 0c606103e3339f38f05f17566be1193c802c8db1 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 1 Aug 2023 13:30:57 -0500 Subject: [PATCH 52/87] GUI: fix pushNibble in orders issue #1309 --- src/gui/gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 4986cdfb4..b2021869d 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -1438,8 +1438,8 @@ void FurnaceGUI::keyDown(SDL_Event& ev) { e->curOrders->ord[orderCursor][curOrder]=((e->curOrders->ord[orderCursor][curOrder]<<4)|num); }); MARK_MODIFIED; + curNibble=!curNibble; if (orderEditMode==2 || orderEditMode==3) { - curNibble=!curNibble; if (!curNibble) { if (orderEditMode==2) { orderCursor++; From f1b560cce993f06a6a2b81d275c624aed917cb37 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 1 Aug 2023 16:00:13 -0500 Subject: [PATCH 53/87] PC speaker: fix cut freq issue #1307 --- src/engine/platform/pcspkr.cpp | 18 +++++++++++++----- src/engine/platform/pcspkr.h | 3 +++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/engine/platform/pcspkr.cpp b/src/engine/platform/pcspkr.cpp index a275c6350..d6dcc02c8 100644 --- a/src/engine/platform/pcspkr.cpp +++ b/src/engine/platform/pcspkr.cpp @@ -190,9 +190,6 @@ const char** DivPlatformPCSpeaker::getRegisterSheet() { return regCheatSheetPCSpeaker; } -const float cut=0.05; -const float reso=0.06; - void DivPlatformPCSpeaker::acquire_unfilt(short** buf, size_t len) { int out=0; for (size_t i=0; i((freq+16)>>1) && !isMuted[0])?1:0; - low+=0.04*band; - band+=0.04*(next-low-band); + low+=cut*band; + band+=cut*(next-low-band); float out=(low+band)*0.75; if (out>1.0) out=1.0; if (out<-1.0) out=-1.0; @@ -612,6 +609,17 @@ void DivPlatformPCSpeaker::setFlags(const DivConfig& flags) { rate=chipClock/PCSPKR_DIVIDER; speakerType=flags.getInt("speakerType",0)&3; oscBuf->rate=rate; + + switch (speakerType) { + case 1: + cut=2.0*sin(M_PI*1900.0/rate); + reso=0.0; + break; + default: + cut=2.0*sin(M_PI*2375.0/rate); + reso=0.06; + break; + } } void DivPlatformPCSpeaker::notifyInsDeletion(void* ins) { diff --git a/src/engine/platform/pcspkr.h b/src/engine/platform/pcspkr.h index 0437a90c4..d9315b5ec 100644 --- a/src/engine/platform/pcspkr.h +++ b/src/engine/platform/pcspkr.h @@ -57,6 +57,9 @@ class DivPlatformPCSpeaker: public DivDispatch { float low, band; float low2, high2, band2; float low3, band3; + float cut; + float reso; + unsigned short freq, lastFreq; unsigned char regPool[2]; From 85d90b78ea1f5e78b764d92bbd85de47cfaa9040 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 1 Aug 2023 20:13:34 -0500 Subject: [PATCH 54/87] Furnace CAN TOO!!!!!!!!!!!!!!!!!!!!!!111111 --- demos/gameboy/dtect.fur | Bin 0 -> 4275 bytes demos/gameboy/ice_3_advert.fur | Bin 0 -> 2112 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 demos/gameboy/dtect.fur create mode 100644 demos/gameboy/ice_3_advert.fur diff --git a/demos/gameboy/dtect.fur b/demos/gameboy/dtect.fur new file mode 100644 index 0000000000000000000000000000000000000000..17c5f5bc45618de2ab9fc64b822141f77fe48a1b GIT binary patch literal 4275 zcmdT`%WoS+82{G0cHC|H;#m|P!$Uj-wWT5fDni6boDk7EQPMO*aA32$vA3~zoZWSu z76CCd5*#XV;U!TJ2aep}3_{`r2X07kF^7sj03>dN-#4>sJ1rF)K!TBfyEET>-^};; z&8&~jcB0U6ebJI$r|BR2gop%?wfWlY!n*~G3I&6xJ+)2aWF6i|7|;!Xl__55J^2^y zI%fYFv6uL6LM!1$D7&F}(3R)>NUWU~Nzn9sCyHeEA^7^kH05%f5;D|N_kKa%?inMh z0WSle0zU#1MWQpn`@omL%08moZKC&pZ-5W?6II8Fo(IkXPaPl{JBYdfW#A+b09!!y z5YcUii9Q0vSWC z1%78caUvYi43ebj3(s%CO4>n)gTux%X3SM%a0{3_gW1$myyRx z)%B=*`gnKq@e9|g4Kq@bQN8?h`zemgaT6wmi2cxuMLqI;(4ZbOKb&S$$WCPM2|oyR zEgKSqQ0(E7p*~1U*B1@h=3=8f%#MMjZ#x5eXc{p+6hE;8^qNhaUnIb`YqG0$a3kLf zl33{^Oh;ywJuN-BCr*gd^CxGjm8GSHRr^#YcDA-4Td6%;TUf1?{Vg$5S}0B1vj{N8 zL`6)k)TW;i3$tRey0Cb%nld~L_(o-O(RE_cay-Pue8ADLXIGYLmFcSJHUhVy=9v#3 zZWVjDxuS!FdKBv%;QmqW$8Ln6M4UJgTyW}65F$@FyxUK!6KvoD;vX(%?h@tHUHuNd zqo#?n)07S~I}GnhMTWBYZr7mic5{FUSU?^q0AoNA*az6aeqbCp02~Ak0YrV+_hH|M zeINFH*!N-IhkYORec1P5--mr4_I=p*Vc&;6+h)!bu4?oJuGQ~>pMlEE{1V@MN*&iI zUw-+*SdrzpS+yLKJkCB<^R?yU4`A*Sq^4HMQx~kFQT6CM)9UgOh;%FHJZHM2OK$}3##Kv`TDlCU_0kVw5$#EV;?RlwKi8kk^zR?& zTjWITtF&`!^@j)APYkpVkdxq0Zh-EtbN(tbcIp5%v|2e+y#zH9{6J$HZp;XL?GTavlY*d#amxs9MnA(%=re9i!GCTTTxVt& zzOxGW<`TZggl{zATTLJx-45IV+zIghiXKuok7)XFkdR>k8%63di zJ%H!6u7n79GL*^Qp zE}0&gKAG!e)_D&zP@8S2U0Z5%E-h-WfE#4Xp(5s?2M3w$U+rw8XQ6YV$A_PfM9uUKdwnr+X>%q0q^~jF@fAXjwQIYW3K?UDB zdINnhT137}brJc-#FdSpeB-j|0xtqD7%ClllFzJfd~6kamen&pyI9;EvVkvTz0lXZ zkjV>eULm(}r zYGOFb#WVf^{s;a8idRqjS8%Q0H@n*)Au--OIO%t1-rM(i`{vDV`$yNxC40$HMK8Bj zaQY94NI~()WJf0w5>_%Ph@K7ANRZi`z?I016vv)5r~WX`V*Vwci`EP(JGbtXeHt0= zpK^0fS>0Ol;82TI<-3KPW0%X`#%+}SbC?W+TSG!$!_{l_?-TS5x{RicL!Y4^(6U8z z3~eNczCa-%^a!o+T6KJ7mpng@$4-V(D>`bq>=g$(I^1Pd_0~efE~#|UU9k~eSydaZpAQ*qv8o?&N4+UH zcEwS?Qz)pSGk}_EPjq3tPyS&m;g${kY8=o(RQ;HZhYoqw$c#Cd*CUtE#8FewQPY4V zWI`5{fZCuW)DCq(ozOX`3px*7fQSO{0r&uX06qX8fDgb2-~;dh_yBwWJ^&wp55O}U z7n4l8F{gE=1~ZoR%=8X|XdIJ8_3?v_p?fcKZGUtPaVbY}z8UF-PO+ zZc372Q4@&--WOps$A-G-dx|6-r;Nu$_fjKSX8TUCi*}`QiUny1uqLw zNG~2I+RP?>CDBWix&mE<&O@D0JA~b&bf&vE;!ORmOeW=RABiq;A_H|tiSW*cP+w0B zJ#Rq?s+8=q1MDGV$)?5>5XP=SS0S$DqznUbXo(gW+RhK*3kC0utrI&=cCO07;;X9aX z&^9&Tuft#0={6A?r{#34ZHQy4w1>xW><8`Nq9)g)zeru^yx5cTqOSEyker1*3p*6a zIoNZsSqr#tiw5S<{u_1<>;l+1p$iz~ZgAIob}f3e-?L-U*uJb;`?6s*FgH&5KlZ#s yoJQZq4VDXrT#)h4Jh6ZuW_UOB Date: Tue, 1 Aug 2023 20:22:44 -0500 Subject: [PATCH 55/87] GUI: fix note trigger chan osc mode when channel not visible in pattern --- src/gui/gui.cpp | 5 +++++ src/gui/pattern.cpp | 2 -- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index b2021869d..aa85a877b 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4521,6 +4521,11 @@ bool FurnaceGUI::loop() { MEASURE(effectList,drawEffectList()); } + for (int i=0; igetTotalChannelCount(); i++) { + keyHit1[i]-=0.2f; + if (keyHit1[i]<0.0f) keyHit1[i]=0.0f; + } + activateTutorial(GUI_TUTORIAL_OVERVIEW); if (inspectorOpen) ImGui::ShowMetricsWindow(&inspectorOpen); diff --git a/src/gui/pattern.cpp b/src/gui/pattern.cpp index 590676fc7..c21372466 100644 --- a/src/gui/pattern.cpp +++ b/src/gui/pattern.cpp @@ -829,8 +829,6 @@ void FurnaceGUI::drawPattern() { ImGui::GetColorU32(chanHeadBase) ); } - keyHit1[i]-=0.2f; - if (keyHit1[i]<0.0f) keyHit1[i]=0.0f; } } From cf80eca19ffa9c0a90595d758973d0ff5bfe1bd8 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 2 Aug 2023 01:27:29 -0500 Subject: [PATCH 56/87] FIX build --- src/engine/platform/pcspkr.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/engine/platform/pcspkr.cpp b/src/engine/platform/pcspkr.cpp index d6dcc02c8..4ead1f11f 100644 --- a/src/engine/platform/pcspkr.cpp +++ b/src/engine/platform/pcspkr.cpp @@ -20,6 +20,8 @@ #include "pcspkr.h" #include "../engine.h" #include "../../ta-log.h" + +#define _USE_MATH_DEFINES #include #ifdef __linux__ From 537f90c3f1d7aa3999d94c97a6751d56d4e32d81 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 2 Aug 2023 14:58:10 -0500 Subject: [PATCH 57/87] fix again --- src/engine/platform/pcspkr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/pcspkr.cpp b/src/engine/platform/pcspkr.cpp index 4ead1f11f..593c41b8a 100644 --- a/src/engine/platform/pcspkr.cpp +++ b/src/engine/platform/pcspkr.cpp @@ -17,11 +17,11 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#define _USE_MATH_DEFINES #include "pcspkr.h" #include "../engine.h" #include "../../ta-log.h" -#define _USE_MATH_DEFINES #include #ifdef __linux__ From 11836ad0796358c315ff182bd4eddab4fd1765be Mon Sep 17 00:00:00 2001 From: Electric Keet Date: Wed, 2 Aug 2023 10:39:46 -0700 Subject: [PATCH 58/87] Doc `0Dxx` better, add tutorial link. ...because I can never seem to do one thing at a time? --- doc/1-intro/README.md | 8 +++++++- doc/3-pattern/effects.md | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/doc/1-intro/README.md b/doc/1-intro/README.md index 8e9289fc6..e5430504b 100644 --- a/doc/1-intro/README.md +++ b/doc/1-intro/README.md @@ -20,4 +20,10 @@ it also has a flexible windowing system which you may move around and organize. see [2-interface](../2-interface/README.md) and [3-pattern](../3-pattern/README.md) for more information. -once familiar with the tracker, look to [9-guides](../9-guides/README.md) for useful techniques. \ No newline at end of file +once familiar with the tracker, look to [9-guides](../9-guides/README.md) for useful techniques. + + + +# links + +[Furnace Tutorials](https://youtube.com/playlist?list=PLCELB6AsTZUnwv0PC5AAGHjvg47F44YQ1): video tutorials created by Spinning Square Waves. \ No newline at end of file diff --git a/doc/3-pattern/effects.md b/doc/3-pattern/effects.md index 91e311473..5b1e6397a 100644 --- a/doc/3-pattern/effects.md +++ b/doc/3-pattern/effects.md @@ -71,8 +71,8 @@ not all chips support these effects. - `0Bxx`: **Jump to order.** `x` is the order to play after the current row. - this marks the end of a loop with order `x` as the loop start. -- `0Dxx`: **Jump to next pattern.** skips the current row and remainder of current order. - - this can be used to shorten the current order. +- `0Dxx`: **Jump to next pattern.** skips the current row and remainder of current order. `x` is the row at which to start playing the next pattern. + - this can be used to shorten the current order as though it had a different pattern length. - `FFxx`: **Stop song.** stops playback and ends the song. `x` is ignored. ## note From 0f4f1a1cf5c5f2a1edbfadc4c62c79066ace7161 Mon Sep 17 00:00:00 2001 From: Electric Keet Date: Wed, 2 Aug 2023 13:48:07 -0700 Subject: [PATCH 59/87] Big font configuration options! --- src/gui/gui.cpp | 14 ++++++++ src/gui/gui.h | 6 +++- src/gui/settings.cpp | 85 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+), 1 deletion(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index aa85a877b..8ec8dba63 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -1835,6 +1835,16 @@ void FurnaceGUI::openFileDialog(FurnaceGUIFileDialogs type) { dpiScale ); break; + case GUI_FILE_LOAD_BIG_FONT: + if (!dirExists(workingDirFont)) workingDirFont=getHomeDir(); + hasOpened=fileDialog->openLoad( + "Select Font", + {"compatible files", "*.ttf *.otf *.ttc"}, + "compatible files{.ttf,.otf,.ttc}", + workingDirFont, + dpiScale + ); + break; case GUI_FILE_LOAD_PAT_FONT: if (!dirExists(workingDirFont)) workingDirFont=getHomeDir(); hasOpened=fileDialog->openLoad( @@ -4622,6 +4632,7 @@ bool FurnaceGUI::loop() { workingDirROMExport=fileDialog->getPath()+DIR_SEPARATOR_STR; break; case GUI_FILE_LOAD_MAIN_FONT: + case GUI_FILE_LOAD_BIG_FONT: case GUI_FILE_LOAD_PAT_FONT: workingDirFont=fileDialog->getPath()+DIR_SEPARATOR_STR; break; @@ -5083,6 +5094,9 @@ bool FurnaceGUI::loop() { case GUI_FILE_LOAD_MAIN_FONT: settings.mainFontPath=copyOfName; break; + case GUI_FILE_LOAD_BIG_FONT: + settings.bigFontPath=copyOfName; + break; case GUI_FILE_LOAD_PAT_FONT: settings.patFontPath=copyOfName; break; diff --git a/src/gui/gui.h b/src/gui/gui.h index ee158f6af..c2aa280c4 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -423,6 +423,7 @@ enum FurnaceGUIFileDialogs { GUI_FILE_EXPORT_CMDSTREAM_BINARY, GUI_FILE_EXPORT_ROM, GUI_FILE_LOAD_MAIN_FONT, + GUI_FILE_LOAD_BIG_FONT, GUI_FILE_LOAD_PAT_FONT, GUI_FILE_IMPORT_COLORS, GUI_FILE_IMPORT_KEYBINDS, @@ -1387,7 +1388,7 @@ class FurnaceGUI { char emptyLabel2[32]; struct Settings { - int mainFontSize, patFontSize, iconSize; + int mainFontSize, bigFontSize, patFontSize, iconSize; int audioEngine; int audioQuality; int audioChans; @@ -1404,6 +1405,7 @@ class FurnaceGUI { String tg100Path; String mu5Path; int mainFont; + int bigFont; int patFont; int audioRate; int audioBufSize; @@ -1526,6 +1528,7 @@ class FurnaceGUI { int noDMFCompat; unsigned int maxUndoSteps; String mainFontPath; + String bigFontPath; String patFontPath; String audioDevice; String midiInDevice; @@ -1681,6 +1684,7 @@ class FurnaceGUI { noDMFCompat(0), maxUndoSteps(100), mainFontPath(""), + bigFontPath(""), patFontPath(""), audioDevice(""), midiInDevice(""), diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 2d92a4c87..be83d6198 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -58,6 +58,16 @@ const char* mainFonts[]={ "" }; +const char* bigFonts[]={ + "IBM Plex Sans", + "Liberation Sans", + "Exo", + "Proggy Clean", + "GNU Unifont", + "", + "" +}; + const char* patFonts[]={ "IBM Plex Mono", "Mononoki", @@ -1857,6 +1867,20 @@ void FurnaceGUI::drawSettings() { if (settings.mainFontSize<3) settings.mainFontSize=3; if (settings.mainFontSize>96) settings.mainFontSize=96; } + ImGui::Text("Big font"); + ImGui::SameLine(); + ImGui::Combo("##BigFont",&settings.bigFont,bigFonts,7); + if (settings.bigFont==6) { + ImGui::InputText("##BigFontPath",&settings.bigFontPath); + ImGui::SameLine(); + if (ImGui::Button(ICON_FA_FOLDER "##BigFontLoad")) { + openFileDialog(GUI_FILE_LOAD_BIG_FONT); + } + } + if (ImGui::InputInt("Size##BigFontSize",&settings.bigFontSize)) { + if (settings.bigFontSize<3) settings.bigFontSize=3; + if (settings.bigFontSize>96) settings.bigFontSize=96; + } ImGui::Text("Pattern font"); ImGui::SameLine(); ImGui::Combo("##PatFont",&settings.patFont,patFonts,7); @@ -2712,6 +2736,7 @@ void FurnaceGUI::drawSettings() { void FurnaceGUI::syncSettings() { settings.mainFontSize=e->getConfInt("mainFontSize",18); + settings.bigFontSize=e->getConfInt("bigFontSize",36); settings.patFontSize=e->getConfInt("patFontSize",18); settings.iconSize=e->getConfInt("iconSize",16); settings.audioEngine=(e->getConfString("audioEngine","SDL")=="SDL")?1:0; @@ -2739,6 +2764,7 @@ void FurnaceGUI::syncSettings() { settings.mainFont=e->getConfInt("mainFont",0); settings.patFont=e->getConfInt("patFont",0); settings.mainFontPath=e->getConfString("mainFontPath",""); + settings.bigFontPath=e->getConfString("bigFontPath",""); settings.patFontPath=e->getConfString("patFontPath",""); settings.patRowsBase=e->getConfInt("patRowsBase",0); settings.orderRowsBase=e->getConfInt("orderRowsBase",1); @@ -2866,6 +2892,7 @@ void FurnaceGUI::syncSettings() { settings.noDMFCompat=e->getConfInt("noDMFCompat",0); clampSetting(settings.mainFontSize,2,96); + clampSetting(settings.bigFontSize,2,96); clampSetting(settings.patFontSize,2,96); clampSetting(settings.iconSize,2,48); clampSetting(settings.audioEngine,0,1); @@ -3067,6 +3094,7 @@ void FurnaceGUI::commitSettings() { ); e->setConf("mainFontSize",settings.mainFontSize); + e->setConf("bigFontSize",settings.bigFontSize); e->setConf("patFontSize",settings.patFontSize); e->setConf("iconSize",settings.iconSize); e->setConf("audioEngine",String(audioBackends[settings.audioEngine])); @@ -3092,8 +3120,10 @@ void FurnaceGUI::commitSettings() { e->setConf("tg100Path",settings.tg100Path); e->setConf("mu5Path",settings.mu5Path); e->setConf("mainFont",settings.mainFont); + e->setConf("bigFont",settings.mainFont); e->setConf("patFont",settings.patFont); e->setConf("mainFontPath",settings.mainFontPath); + e->setConf("bigFontPath",settings.bigFontPath); e->setConf("patFontPath",settings.patFontPath); e->setConf("patRowsBase",settings.patRowsBase); e->setConf("orderRowsBase",settings.orderRowsBase); @@ -3650,6 +3680,11 @@ void FurnaceGUI::popWarningColor() { // TODO! #define SYSTEM_FONT_PATH_3 "C:\\Windows\\Fonts\\tahoma.ttf" // TODO! +#define SYSTEM_BIG_FONT_PATH_1 "C:\\Windows\\Fonts\\segoeui.ttf" +#define SYSTEM_BIG_FONT_PATH_2 "C:\\Windows\\Fonts\\tahoma.ttf" +// TODO! +#define SYSTEM_BIG_FONT_PATH_3 "C:\\Windows\\Fonts\\tahoma.ttf" +// TODO! #define SYSTEM_PAT_FONT_PATH_1 "C:\\Windows\\Fonts\\consola.ttf" #define SYSTEM_PAT_FONT_PATH_2 "C:\\Windows\\Fonts\\cour.ttf" // GOOD LUCK WITH THIS ONE - UNTESTED @@ -3658,6 +3693,9 @@ void FurnaceGUI::popWarningColor() { #define SYSTEM_FONT_PATH_1 "/System/Library/Fonts/SFAANS.ttf" #define SYSTEM_FONT_PATH_2 "/System/Library/Fonts/Helvetica.ttc" #define SYSTEM_FONT_PATH_3 "/System/Library/Fonts/Helvetica.dfont" +#define SYSTEM_BIG_FONT_PATH_1 "/System/Library/Fonts/SFAANS.ttf" +#define SYSTEM_BIG_FONT_PATH_2 "/System/Library/Fonts/Helvetica.ttc" +#define SYSTEM_BIG_FONT_PATH_3 "/System/Library/Fonts/Helvetica.dfont" #define SYSTEM_PAT_FONT_PATH_1 "/System/Library/Fonts/SFNSMono.ttf" #define SYSTEM_PAT_FONT_PATH_2 "/System/Library/Fonts/Courier New.ttf" #define SYSTEM_PAT_FONT_PATH_3 "/System/Library/Fonts/Courier New.ttf" @@ -3666,6 +3704,9 @@ void FurnaceGUI::popWarningColor() { #define SYSTEM_FONT_PATH_2 "/system/fonts/DroidSans.ttf" #define SYSTEM_FONT_PATH_3 "/system/fonts/DroidSans.ttf" // ??? +#define SYSTEM_BIG_FONT_PATH_1 "/system/fonts/Roboto-Regular.ttf" +#define SYSTEM_BIG_FONT_PATH_2 "/system/fonts/DroidSans.ttf" +#define SYSTEM_BIG_FONT_PATH_3 "/system/fonts/DroidSans.ttf" #define SYSTEM_PAT_FONT_PATH_1 "/system/fonts/RobotoMono-Regular.ttf" #define SYSTEM_PAT_FONT_PATH_2 "/system/fonts/DroidSansMono.ttf" #define SYSTEM_PAT_FONT_PATH_3 "/system/fonts/CutiveMono.ttf" @@ -3673,6 +3714,9 @@ void FurnaceGUI::popWarningColor() { #define SYSTEM_FONT_PATH_1 "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf" #define SYSTEM_FONT_PATH_2 "/usr/share/fonts/TTF/DejaVuSans.ttf" #define SYSTEM_FONT_PATH_3 "/usr/share/fonts/ubuntu/Ubuntu-R.ttf" +#define SYSTEM_BIG_FONT_PATH_1 "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf" +#define SYSTEM_BIG_FONT_PATH_2 "/usr/share/fonts/TTF/DejaVuSans.ttf" +#define SYSTEM_BIG_FONT_PATH_3 "/usr/share/fonts/ubuntu/Ubuntu-R.ttf" #define SYSTEM_PAT_FONT_PATH_1 "/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf" #define SYSTEM_PAT_FONT_PATH_2 "/usr/share/fonts/TTF/DejaVuSansMono.ttf" #define SYSTEM_PAT_FONT_PATH_3 "/usr/share/fonts/ubuntu/UbuntuMono-R.ttf" @@ -3913,12 +3957,17 @@ void FurnaceGUI::applyUISettings(bool updateFonts) { } if (settings.mainFont<0 || settings.mainFont>6) settings.mainFont=0; + if (settings.bigFont<0 || settings.bigFont>6) settings.bigFont=0; if (settings.patFont<0 || settings.patFont>6) settings.patFont=0; if (settings.mainFont==6 && settings.mainFontPath.empty()) { logW("UI font path is empty! reverting to default font"); settings.mainFont=0; } + if (settings.bigFont==6 && settings.bigFontPath.empty()) { + logW("UI font path is empty! reverting to default font"); + settings.bigFont=0; + } if (settings.patFont==6 && settings.patFontPath.empty()) { logW("pattern font path is empty! reverting to default font"); settings.patFont=0; @@ -4004,9 +4053,45 @@ void FurnaceGUI::applyUISettings(bool updateFonts) { // 0x39B = Λ static const ImWchar bigFontRange[]={0x20,0xFF,0x39b,0x39b,0}; +/* if ((bigFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(font_plexSans_compressed_data,font_plexSans_compressed_size,MAX(1,40*dpiScale),NULL,bigFontRange))==NULL) { logE("could not load big UI font!"); } +*/ + if (settings.mainFontSize==settings.bigFontSize && settings.bigFont<5 && builtinFontM[settings.bigFont]==builtinFont[settings.mainFont]) { + logD("using main font for big font."); + bigFont=mainFont; + } else { + if (settings.bigFont==6) { // custom font + if ((bigFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(settings.bigFontPath.c_str(),MAX(1,e->getConfInt("bigFontSize",36)*dpiScale),NULL,upTo800))==NULL) { + logW("could not load big font! reverting to default font"); + settings.bigFont=0; + if ((bigFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.bigFont],builtinFontMLen[settings.bigFont],MAX(1,e->getConfInt("bigFontSize",36)*dpiScale),NULL,bigFontRange))==NULL) { + logE("could not load big font! falling back to IBM Plex Sans."); + bigFont=ImGui::GetIO().Fonts->AddFontDefault(); + } + } + } else if (settings.bigFont==5) { // system font + if ((bigFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_BIG_FONT_PATH_1,MAX(1,e->getConfInt("bigFontSize",36)*dpiScale),NULL,upTo800))==NULL) { + if ((bigFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_BIG_FONT_PATH_2,MAX(1,e->getConfInt("bigFontSize",36)*dpiScale),NULL,upTo800))==NULL) { + if ((bigFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_BIG_FONT_PATH_3,MAX(1,e->getConfInt("bigFontSize",36)*dpiScale),NULL,upTo800))==NULL) { + logW("could not load big font! reverting to default font"); + settings.bigFont=0; + if ((bigFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.bigFont],builtinFontMLen[settings.bigFont],MAX(1,e->getConfInt("bigFontSize",36)*dpiScale),NULL,upTo800))==NULL) { + logE("could not load big font! falling back to IBM Plex Sans."); + bigFont=ImGui::GetIO().Fonts->AddFontDefault(); + } + } + } + } + } else { + if ((bigFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.bigFont],builtinFontMLen[settings.bigFont],MAX(1,e->getConfInt("bigFontSize",36)*dpiScale),NULL,upTo800))==NULL) { + logE("could not load big font!"); + bigFont=ImGui::GetIO().Fonts->AddFontDefault(); + } + } + } + mainFont->FallbackChar='?'; mainFont->EllipsisChar='.'; From bf9f37e8d9fb2a193e4227ceaba578fd3d348b84 Mon Sep 17 00:00:00 2001 From: Electric Keet Date: Wed, 2 Aug 2023 14:05:36 -0700 Subject: [PATCH 60/87] Fixed up about screen. Inter-line spacing didn't scale with font size. Oops! --- src/gui/about.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/about.cpp b/src/gui/about.cpp index b849c6bbe..24d96f6b8 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -285,7 +285,7 @@ void FurnaceGUI::drawAbout() { for (size_t i=0; icanvasH) continue; dl->AddText(bigFont,bigFont->FontSize, ImVec2(posX+dpiScale,posY+dpiScale), From 14d1e83cd6d48d9ff603a6c9e639c31971e9b19d Mon Sep 17 00:00:00 2001 From: Electric Keet Date: Wed, 2 Aug 2023 14:22:21 -0700 Subject: [PATCH 61/87] Oh, and it'd be good to load the big font setting. Can't believe I missed this! --- src/gui/settings.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index be83d6198..2274345bf 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -2762,6 +2762,7 @@ void FurnaceGUI::syncSettings() { settings.tg100Path=e->getConfString("tg100Path",""); settings.mu5Path=e->getConfString("mu5Path",""); settings.mainFont=e->getConfInt("mainFont",0); + settings.bigFont=e->getConfInt("bigFont",0); settings.patFont=e->getConfInt("patFont",0); settings.mainFontPath=e->getConfString("mainFontPath",""); settings.bigFontPath=e->getConfString("bigFontPath",""); From ebf8ebf7c0e93cc06cc0390b867d39a0ac3e0fbb Mon Sep 17 00:00:00 2001 From: Electric Keet Date: Wed, 2 Aug 2023 20:49:01 -0700 Subject: [PATCH 62/87] Restoring old bigFont, making new headFont instead. Now we'll see the original font for the credits and the clock. --- src/gui/about.cpp | 2 +- src/gui/gui.cpp | 8 +-- src/gui/gui.h | 11 ++-- src/gui/settings.cpp | 116 +++++++++++++++++++++---------------------- 4 files changed, 69 insertions(+), 68 deletions(-) diff --git a/src/gui/about.cpp b/src/gui/about.cpp index 24d96f6b8..b849c6bbe 100644 --- a/src/gui/about.cpp +++ b/src/gui/about.cpp @@ -285,7 +285,7 @@ void FurnaceGUI::drawAbout() { for (size_t i=0; icanvasH) continue; dl->AddText(bigFont,bigFont->FontSize, ImVec2(posX+dpiScale,posY+dpiScale), diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 8ec8dba63..6f48c9c62 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -1835,7 +1835,7 @@ void FurnaceGUI::openFileDialog(FurnaceGUIFileDialogs type) { dpiScale ); break; - case GUI_FILE_LOAD_BIG_FONT: + case GUI_FILE_LOAD_HEAD_FONT: if (!dirExists(workingDirFont)) workingDirFont=getHomeDir(); hasOpened=fileDialog->openLoad( "Select Font", @@ -4632,7 +4632,7 @@ bool FurnaceGUI::loop() { workingDirROMExport=fileDialog->getPath()+DIR_SEPARATOR_STR; break; case GUI_FILE_LOAD_MAIN_FONT: - case GUI_FILE_LOAD_BIG_FONT: + case GUI_FILE_LOAD_HEAD_FONT: case GUI_FILE_LOAD_PAT_FONT: workingDirFont=fileDialog->getPath()+DIR_SEPARATOR_STR; break; @@ -5094,8 +5094,8 @@ bool FurnaceGUI::loop() { case GUI_FILE_LOAD_MAIN_FONT: settings.mainFontPath=copyOfName; break; - case GUI_FILE_LOAD_BIG_FONT: - settings.bigFontPath=copyOfName; + case GUI_FILE_LOAD_HEAD_FONT: + settings.headFontPath=copyOfName; break; case GUI_FILE_LOAD_PAT_FONT: settings.patFontPath=copyOfName; diff --git a/src/gui/gui.h b/src/gui/gui.h index c2aa280c4..8fa81c1bf 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -423,7 +423,7 @@ enum FurnaceGUIFileDialogs { GUI_FILE_EXPORT_CMDSTREAM_BINARY, GUI_FILE_EXPORT_ROM, GUI_FILE_LOAD_MAIN_FONT, - GUI_FILE_LOAD_BIG_FONT, + GUI_FILE_LOAD_HEAD_FONT, GUI_FILE_LOAD_PAT_FONT, GUI_FILE_IMPORT_COLORS, GUI_FILE_IMPORT_KEYBINDS, @@ -1370,6 +1370,7 @@ class FurnaceGUI { ImFont* iconFont; ImFont* patFont; ImFont* bigFont; + ImFont* headFont; ImWchar* fontRange; ImVec4 uiColors[GUI_COLOR_MAX]; ImVec4 volColors[128]; @@ -1388,7 +1389,7 @@ class FurnaceGUI { char emptyLabel2[32]; struct Settings { - int mainFontSize, bigFontSize, patFontSize, iconSize; + int mainFontSize, headFontSize, patFontSize, iconSize; int audioEngine; int audioQuality; int audioChans; @@ -1405,7 +1406,7 @@ class FurnaceGUI { String tg100Path; String mu5Path; int mainFont; - int bigFont; + int headFont; int patFont; int audioRate; int audioBufSize; @@ -1528,7 +1529,7 @@ class FurnaceGUI { int noDMFCompat; unsigned int maxUndoSteps; String mainFontPath; - String bigFontPath; + String headFontPath; String patFontPath; String audioDevice; String midiInDevice; @@ -1684,7 +1685,7 @@ class FurnaceGUI { noDMFCompat(0), maxUndoSteps(100), mainFontPath(""), - bigFontPath(""), + headFontPath(""), patFontPath(""), audioDevice(""), midiInDevice(""), diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 2274345bf..4980d7e58 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -58,7 +58,7 @@ const char* mainFonts[]={ "" }; -const char* bigFonts[]={ +const char* headFonts[]={ "IBM Plex Sans", "Liberation Sans", "Exo", @@ -252,7 +252,7 @@ const char* specificControls[18]={ } else { \ _subInit=true; \ } \ - ImGui::PushFont(bigFont); \ + ImGui::PushFont(headFont); \ ImGui::TextUnformatted(what); \ ImGui::PopFont(); @@ -1867,19 +1867,19 @@ void FurnaceGUI::drawSettings() { if (settings.mainFontSize<3) settings.mainFontSize=3; if (settings.mainFontSize>96) settings.mainFontSize=96; } - ImGui::Text("Big font"); + ImGui::Text("Head font"); ImGui::SameLine(); - ImGui::Combo("##BigFont",&settings.bigFont,bigFonts,7); - if (settings.bigFont==6) { - ImGui::InputText("##BigFontPath",&settings.bigFontPath); + ImGui::Combo("##HeadFont",&settings.headFont,headFonts,7); + if (settings.headFont==6) { + ImGui::InputText("##HeadFontPath",&settings.headFontPath); ImGui::SameLine(); - if (ImGui::Button(ICON_FA_FOLDER "##BigFontLoad")) { - openFileDialog(GUI_FILE_LOAD_BIG_FONT); + if (ImGui::Button(ICON_FA_FOLDER "##HeadFontLoad")) { + openFileDialog(GUI_FILE_LOAD_HEAD_FONT); } } - if (ImGui::InputInt("Size##BigFontSize",&settings.bigFontSize)) { - if (settings.bigFontSize<3) settings.bigFontSize=3; - if (settings.bigFontSize>96) settings.bigFontSize=96; + if (ImGui::InputInt("Size##HeadFontSize",&settings.headFontSize)) { + if (settings.headFontSize<3) settings.headFontSize=3; + if (settings.headFontSize>96) settings.headFontSize=96; } ImGui::Text("Pattern font"); ImGui::SameLine(); @@ -2736,7 +2736,7 @@ void FurnaceGUI::drawSettings() { void FurnaceGUI::syncSettings() { settings.mainFontSize=e->getConfInt("mainFontSize",18); - settings.bigFontSize=e->getConfInt("bigFontSize",36); + settings.headFontSize=e->getConfInt("headFontSize",36); settings.patFontSize=e->getConfInt("patFontSize",18); settings.iconSize=e->getConfInt("iconSize",16); settings.audioEngine=(e->getConfString("audioEngine","SDL")=="SDL")?1:0; @@ -2762,10 +2762,10 @@ void FurnaceGUI::syncSettings() { settings.tg100Path=e->getConfString("tg100Path",""); settings.mu5Path=e->getConfString("mu5Path",""); settings.mainFont=e->getConfInt("mainFont",0); - settings.bigFont=e->getConfInt("bigFont",0); + settings.headFont=e->getConfInt("headFont",0); settings.patFont=e->getConfInt("patFont",0); settings.mainFontPath=e->getConfString("mainFontPath",""); - settings.bigFontPath=e->getConfString("bigFontPath",""); + settings.headFontPath=e->getConfString("headFontPath",""); settings.patFontPath=e->getConfString("patFontPath",""); settings.patRowsBase=e->getConfInt("patRowsBase",0); settings.orderRowsBase=e->getConfInt("orderRowsBase",1); @@ -2893,7 +2893,7 @@ void FurnaceGUI::syncSettings() { settings.noDMFCompat=e->getConfInt("noDMFCompat",0); clampSetting(settings.mainFontSize,2,96); - clampSetting(settings.bigFontSize,2,96); + clampSetting(settings.headFontSize,2,96); clampSetting(settings.patFontSize,2,96); clampSetting(settings.iconSize,2,48); clampSetting(settings.audioEngine,0,1); @@ -3095,7 +3095,7 @@ void FurnaceGUI::commitSettings() { ); e->setConf("mainFontSize",settings.mainFontSize); - e->setConf("bigFontSize",settings.bigFontSize); + e->setConf("headFontSize",settings.headFontSize); e->setConf("patFontSize",settings.patFontSize); e->setConf("iconSize",settings.iconSize); e->setConf("audioEngine",String(audioBackends[settings.audioEngine])); @@ -3121,10 +3121,10 @@ void FurnaceGUI::commitSettings() { e->setConf("tg100Path",settings.tg100Path); e->setConf("mu5Path",settings.mu5Path); e->setConf("mainFont",settings.mainFont); - e->setConf("bigFont",settings.mainFont); + e->setConf("headFont",settings.mainFont); e->setConf("patFont",settings.patFont); e->setConf("mainFontPath",settings.mainFontPath); - e->setConf("bigFontPath",settings.bigFontPath); + e->setConf("headFontPath",settings.headFontPath); e->setConf("patFontPath",settings.patFontPath); e->setConf("patRowsBase",settings.patRowsBase); e->setConf("orderRowsBase",settings.orderRowsBase); @@ -3297,7 +3297,7 @@ void FurnaceGUI::commitSettings() { ImGui::GetIO().Fonts->Clear(); mainFont=ImGui::GetIO().Fonts->AddFontDefault(); patFont=mainFont; - bigFont=mainFont; + headFont=mainFont; if (rend) rend->destroyFontsTexture(); if (!ImGui::GetIO().Fonts->Build()) { logE("error again while building font atlas!"); @@ -3681,10 +3681,10 @@ void FurnaceGUI::popWarningColor() { // TODO! #define SYSTEM_FONT_PATH_3 "C:\\Windows\\Fonts\\tahoma.ttf" // TODO! -#define SYSTEM_BIG_FONT_PATH_1 "C:\\Windows\\Fonts\\segoeui.ttf" -#define SYSTEM_BIG_FONT_PATH_2 "C:\\Windows\\Fonts\\tahoma.ttf" +#define SYSTEM_HEAD_FONT_PATH_1 "C:\\Windows\\Fonts\\segoeui.ttf" +#define SYSTEM_HEAD_FONT_PATH_2 "C:\\Windows\\Fonts\\tahoma.ttf" // TODO! -#define SYSTEM_BIG_FONT_PATH_3 "C:\\Windows\\Fonts\\tahoma.ttf" +#define SYSTEM_HEAD_FONT_PATH_3 "C:\\Windows\\Fonts\\tahoma.ttf" // TODO! #define SYSTEM_PAT_FONT_PATH_1 "C:\\Windows\\Fonts\\consola.ttf" #define SYSTEM_PAT_FONT_PATH_2 "C:\\Windows\\Fonts\\cour.ttf" @@ -3694,9 +3694,9 @@ void FurnaceGUI::popWarningColor() { #define SYSTEM_FONT_PATH_1 "/System/Library/Fonts/SFAANS.ttf" #define SYSTEM_FONT_PATH_2 "/System/Library/Fonts/Helvetica.ttc" #define SYSTEM_FONT_PATH_3 "/System/Library/Fonts/Helvetica.dfont" -#define SYSTEM_BIG_FONT_PATH_1 "/System/Library/Fonts/SFAANS.ttf" -#define SYSTEM_BIG_FONT_PATH_2 "/System/Library/Fonts/Helvetica.ttc" -#define SYSTEM_BIG_FONT_PATH_3 "/System/Library/Fonts/Helvetica.dfont" +#define SYSTEM_HEAD_FONT_PATH_1 "/System/Library/Fonts/SFAANS.ttf" +#define SYSTEM_HEAD_FONT_PATH_2 "/System/Library/Fonts/Helvetica.ttc" +#define SYSTEM_HEAD_FONT_PATH_3 "/System/Library/Fonts/Helvetica.dfont" #define SYSTEM_PAT_FONT_PATH_1 "/System/Library/Fonts/SFNSMono.ttf" #define SYSTEM_PAT_FONT_PATH_2 "/System/Library/Fonts/Courier New.ttf" #define SYSTEM_PAT_FONT_PATH_3 "/System/Library/Fonts/Courier New.ttf" @@ -3705,9 +3705,9 @@ void FurnaceGUI::popWarningColor() { #define SYSTEM_FONT_PATH_2 "/system/fonts/DroidSans.ttf" #define SYSTEM_FONT_PATH_3 "/system/fonts/DroidSans.ttf" // ??? -#define SYSTEM_BIG_FONT_PATH_1 "/system/fonts/Roboto-Regular.ttf" -#define SYSTEM_BIG_FONT_PATH_2 "/system/fonts/DroidSans.ttf" -#define SYSTEM_BIG_FONT_PATH_3 "/system/fonts/DroidSans.ttf" +#define SYSTEM_HEAD_FONT_PATH_1 "/system/fonts/Roboto-Regular.ttf" +#define SYSTEM_HEAD_FONT_PATH_2 "/system/fonts/DroidSans.ttf" +#define SYSTEM_HEAD_FONT_PATH_3 "/system/fonts/DroidSans.ttf" #define SYSTEM_PAT_FONT_PATH_1 "/system/fonts/RobotoMono-Regular.ttf" #define SYSTEM_PAT_FONT_PATH_2 "/system/fonts/DroidSansMono.ttf" #define SYSTEM_PAT_FONT_PATH_3 "/system/fonts/CutiveMono.ttf" @@ -3715,9 +3715,9 @@ void FurnaceGUI::popWarningColor() { #define SYSTEM_FONT_PATH_1 "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf" #define SYSTEM_FONT_PATH_2 "/usr/share/fonts/TTF/DejaVuSans.ttf" #define SYSTEM_FONT_PATH_3 "/usr/share/fonts/ubuntu/Ubuntu-R.ttf" -#define SYSTEM_BIG_FONT_PATH_1 "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf" -#define SYSTEM_BIG_FONT_PATH_2 "/usr/share/fonts/TTF/DejaVuSans.ttf" -#define SYSTEM_BIG_FONT_PATH_3 "/usr/share/fonts/ubuntu/Ubuntu-R.ttf" +#define SYSTEM_HEAD_FONT_PATH_1 "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf" +#define SYSTEM_HEAD_FONT_PATH_2 "/usr/share/fonts/TTF/DejaVuSans.ttf" +#define SYSTEM_HEAD_FONT_PATH_3 "/usr/share/fonts/ubuntu/Ubuntu-R.ttf" #define SYSTEM_PAT_FONT_PATH_1 "/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf" #define SYSTEM_PAT_FONT_PATH_2 "/usr/share/fonts/TTF/DejaVuSansMono.ttf" #define SYSTEM_PAT_FONT_PATH_3 "/usr/share/fonts/ubuntu/UbuntuMono-R.ttf" @@ -3958,16 +3958,16 @@ void FurnaceGUI::applyUISettings(bool updateFonts) { } if (settings.mainFont<0 || settings.mainFont>6) settings.mainFont=0; - if (settings.bigFont<0 || settings.bigFont>6) settings.bigFont=0; + if (settings.headFont<0 || settings.headFont>6) settings.headFont=0; if (settings.patFont<0 || settings.patFont>6) settings.patFont=0; if (settings.mainFont==6 && settings.mainFontPath.empty()) { logW("UI font path is empty! reverting to default font"); settings.mainFont=0; } - if (settings.bigFont==6 && settings.bigFontPath.empty()) { + if (settings.headFont==6 && settings.headFontPath.empty()) { logW("UI font path is empty! reverting to default font"); - settings.bigFont=0; + settings.headFont=0; } if (settings.patFont==6 && settings.patFontPath.empty()) { logW("pattern font path is empty! reverting to default font"); @@ -4054,41 +4054,41 @@ void FurnaceGUI::applyUISettings(bool updateFonts) { // 0x39B = Λ static const ImWchar bigFontRange[]={0x20,0xFF,0x39b,0x39b,0}; -/* + if ((bigFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(font_plexSans_compressed_data,font_plexSans_compressed_size,MAX(1,40*dpiScale),NULL,bigFontRange))==NULL) { logE("could not load big UI font!"); } -*/ - if (settings.mainFontSize==settings.bigFontSize && settings.bigFont<5 && builtinFontM[settings.bigFont]==builtinFont[settings.mainFont]) { - logD("using main font for big font."); - bigFont=mainFont; + + if (settings.mainFontSize==settings.headFontSize && settings.headFont<5 && builtinFontM[settings.headFont]==builtinFont[settings.mainFont]) { + logD("using main font for header font."); + headFont=mainFont; } else { - if (settings.bigFont==6) { // custom font - if ((bigFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(settings.bigFontPath.c_str(),MAX(1,e->getConfInt("bigFontSize",36)*dpiScale),NULL,upTo800))==NULL) { - logW("could not load big font! reverting to default font"); - settings.bigFont=0; - if ((bigFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.bigFont],builtinFontMLen[settings.bigFont],MAX(1,e->getConfInt("bigFontSize",36)*dpiScale),NULL,bigFontRange))==NULL) { - logE("could not load big font! falling back to IBM Plex Sans."); - bigFont=ImGui::GetIO().Fonts->AddFontDefault(); + if (settings.headFont==6) { // custom font + if ((headFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(settings.headFontPath.c_str(),MAX(1,e->getConfInt("headFontSize",36)*dpiScale),NULL,upTo800))==NULL) { + logW("could not load header font! reverting to default font"); + settings.headFont=0; + if ((headFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.headFont],builtinFontMLen[settings.headFont],MAX(1,e->getConfInt("headFontSize",36)*dpiScale),NULL,upTo800))==NULL) { + logE("could not load header font! falling back to IBM Plex Sans."); + headFont=ImGui::GetIO().Fonts->AddFontDefault(); } } - } else if (settings.bigFont==5) { // system font - if ((bigFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_BIG_FONT_PATH_1,MAX(1,e->getConfInt("bigFontSize",36)*dpiScale),NULL,upTo800))==NULL) { - if ((bigFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_BIG_FONT_PATH_2,MAX(1,e->getConfInt("bigFontSize",36)*dpiScale),NULL,upTo800))==NULL) { - if ((bigFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_BIG_FONT_PATH_3,MAX(1,e->getConfInt("bigFontSize",36)*dpiScale),NULL,upTo800))==NULL) { - logW("could not load big font! reverting to default font"); - settings.bigFont=0; - if ((bigFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.bigFont],builtinFontMLen[settings.bigFont],MAX(1,e->getConfInt("bigFontSize",36)*dpiScale),NULL,upTo800))==NULL) { - logE("could not load big font! falling back to IBM Plex Sans."); - bigFont=ImGui::GetIO().Fonts->AddFontDefault(); + } else if (settings.headFont==5) { // system font + if ((headFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_HEAD_FONT_PATH_1,MAX(1,e->getConfInt("headFontSize",36)*dpiScale),NULL,upTo800))==NULL) { + if ((headFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_HEAD_FONT_PATH_2,MAX(1,e->getConfInt("headFontSize",36)*dpiScale),NULL,upTo800))==NULL) { + if ((headFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_HEAD_FONT_PATH_3,MAX(1,e->getConfInt("headFontSize",36)*dpiScale),NULL,upTo800))==NULL) { + logW("could not load header font! reverting to default font"); + settings.headFont=0; + if ((headFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.headFont],builtinFontMLen[settings.headFont],MAX(1,e->getConfInt("headFontSize",36)*dpiScale),NULL,upTo800))==NULL) { + logE("could not load header font! falling back to IBM Plex Sans."); + headFont=ImGui::GetIO().Fonts->AddFontDefault(); } } } } } else { - if ((bigFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.bigFont],builtinFontMLen[settings.bigFont],MAX(1,e->getConfInt("bigFontSize",36)*dpiScale),NULL,upTo800))==NULL) { - logE("could not load big font!"); - bigFont=ImGui::GetIO().Fonts->AddFontDefault(); + if ((headFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.headFont],builtinFontMLen[settings.headFont],MAX(1,e->getConfInt("headFontSize",36)*dpiScale),NULL,upTo800))==NULL) { + logE("could not load header font!"); + headFont=ImGui::GetIO().Fonts->AddFontDefault(); } } } From 7d8c1b6efc20134a3db6d7b41b25e67b01f79698 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 3 Aug 2023 00:32:50 -0500 Subject: [PATCH 63/87] NES: fix DPCM samples having wrong size --- src/engine/sample.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/engine/sample.cpp b/src/engine/sample.cpp index 437b8bbcc..17cd235c1 100644 --- a/src/engine/sample.cpp +++ b/src/engine/sample.cpp @@ -480,6 +480,7 @@ bool DivSample::saveRaw(const char* path) { // 16-bit memory is padded to 512, to make things easier for ADPCM-A/B. bool DivSample::initInternal(DivSampleDepth d, int count) { + logV("initInternal(%d,%d)",(int)d,count); switch (d) { case DIV_SAMPLE_DEPTH_1BIT: // 1-bit if (data1!=NULL) delete[] data1; @@ -489,7 +490,7 @@ bool DivSample::initInternal(DivSampleDepth d, int count) { break; case DIV_SAMPLE_DEPTH_1BIT_DPCM: // DPCM if (dataDPCM!=NULL) delete[] dataDPCM; - lengthDPCM=1+((((count+7)/8)+15)&(~15)); + lengthDPCM=1+((((count-1)/8)+15)&(~15)); dataDPCM=new unsigned char[lengthDPCM]; memset(dataDPCM,0xaa,lengthDPCM); break; @@ -748,7 +749,11 @@ void DivSample::convert(DivSampleDepth newDepth) { setSampleCount((samples+7)&(~7)); break; case DIV_SAMPLE_DEPTH_1BIT_DPCM: - setSampleCount((1+((((samples+7)/8)+15)&(~15)))<<3); + if (samples) { + setSampleCount((1+((((samples-1)/8)+15)&(~15)))<<3); + } else { + setSampleCount(8); + } break; case DIV_SAMPLE_DEPTH_YMZ_ADPCM: setSampleCount(((lengthZ+3)&(~0x03))*2); @@ -1168,7 +1173,7 @@ void DivSample::render(unsigned int formatMask) { if (!initInternal(DIV_SAMPLE_DEPTH_1BIT_DPCM,samples)) return; int accum=63; int next=63; - for (unsigned int i=0; i>3)>9; if (next>accum) { dataDPCM[i>>3]|=1<<(i&7); From 747b5d19bd4c2bec73067a9235b19e66bab96850 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 3 Aug 2023 00:40:53 -0500 Subject: [PATCH 64/87] NES: whoops! issue #1313 --- src/engine/platform/nes.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index 2ea68f756..657a084e0 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -332,7 +332,7 @@ void DivPlatformNES::tick(bool sysTick) { if (chan[4].keyOn) { if (dpcmMode && !skipRegisterWrites && dacSample>=0 && dacSamplesong.sampleLen) { unsigned int dpcmAddr=sampleOffDPCM[dacSample]; - unsigned int dpcmLen=(parent->getSample(dacSample)->lengthDPCM+15)>>4; + unsigned int dpcmLen=parent->getSample(dacSample)->lengthDPCM>>4; if (dpcmLen>255) dpcmLen=255; goingToLoop=parent->getSample(dacSample)->isLoopable(); // write DPCM From 23daabf5b98ae85333b8fb0f23033f47777886c5 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 3 Aug 2023 00:45:03 -0500 Subject: [PATCH 65/87] Game Boy: remove debug message --- src/engine/platform/gb.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/engine/platform/gb.cpp b/src/engine/platform/gb.cpp index cec83e6df..7e2086db0 100644 --- a/src/engine/platform/gb.cpp +++ b/src/engine/platform/gb.cpp @@ -81,7 +81,6 @@ void DivPlatformGB::acquire(short** buf, size_t len) { } void DivPlatformGB::updateWave() { - logV("WAVE UPDATE"); rWrite(0x1a,0); for (int i=0; i<16; i++) { int nibble1=ws.output[((i<<1)+antiClickWavePos)&31]; From 06d3e8a4b30b8f778125579eb1290cbd09ffd87a Mon Sep 17 00:00:00 2001 From: Electric Keet Date: Wed, 2 Aug 2023 22:59:45 -0700 Subject: [PATCH 66/87] Initializing variables, font size change. --- src/gui/gui.cpp | 4 ++++ src/gui/gui.h | 3 ++- src/gui/settings.cpp | 16 ++++++++-------- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 6f48c9c62..61cddac39 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -3869,6 +3869,7 @@ bool FurnaceGUI::loop() { mainFont=ImGui::GetIO().Fonts->AddFontDefault(); patFont=mainFont; bigFont=mainFont; + headFont=mainFont; if (rend) rend->destroyFontsTexture(); if (!ImGui::GetIO().Fonts->Build()) { logE("error again while building font atlas!"); @@ -6025,6 +6026,7 @@ bool FurnaceGUI::loop() { mainFont=ImGui::GetIO().Fonts->AddFontDefault(); patFont=mainFont; bigFont=mainFont; + headFont=mainFont; if (rend) rend->destroyFontsTexture(); if (!ImGui::GetIO().Fonts->Build()) { logE("error again while building font atlas!"); @@ -6480,6 +6482,7 @@ bool FurnaceGUI::init() { mainFont=ImGui::GetIO().Fonts->AddFontDefault(); patFont=mainFont; bigFont=mainFont; + headFont=headFont; if (rend) rend->destroyFontsTexture(); if (!ImGui::GetIO().Fonts->Build()) { logE("error again while building font atlas!"); @@ -6826,6 +6829,7 @@ FurnaceGUI::FurnaceGUI(): iconFont(NULL), patFont(NULL), bigFont(NULL), + headFont(NULL), fontRange(NULL), prevInsData(NULL), curIns(0), diff --git a/src/gui/gui.h b/src/gui/gui.h index 8fa81c1bf..b4deadf27 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1389,7 +1389,7 @@ class FurnaceGUI { char emptyLabel2[32]; struct Settings { - int mainFontSize, headFontSize, patFontSize, iconSize; + int mainFontSize, patFontSize, headFontSize, iconSize; int audioEngine; int audioQuality; int audioChans; @@ -1548,6 +1548,7 @@ class FurnaceGUI { Settings(): mainFontSize(18), patFontSize(18), + headFontSize(27), iconSize(16), audioEngine(DIV_AUDIO_SDL), audioQuality(0), diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 4980d7e58..b1fc3e2b0 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -2736,7 +2736,7 @@ void FurnaceGUI::drawSettings() { void FurnaceGUI::syncSettings() { settings.mainFontSize=e->getConfInt("mainFontSize",18); - settings.headFontSize=e->getConfInt("headFontSize",36); + settings.headFontSize=e->getConfInt("headFontSize",27); settings.patFontSize=e->getConfInt("patFontSize",18); settings.iconSize=e->getConfInt("iconSize",16); settings.audioEngine=(e->getConfString("audioEngine","SDL")=="SDL")?1:0; @@ -4064,21 +4064,21 @@ void FurnaceGUI::applyUISettings(bool updateFonts) { headFont=mainFont; } else { if (settings.headFont==6) { // custom font - if ((headFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(settings.headFontPath.c_str(),MAX(1,e->getConfInt("headFontSize",36)*dpiScale),NULL,upTo800))==NULL) { + if ((headFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(settings.headFontPath.c_str(),MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { logW("could not load header font! reverting to default font"); settings.headFont=0; - if ((headFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.headFont],builtinFontMLen[settings.headFont],MAX(1,e->getConfInt("headFontSize",36)*dpiScale),NULL,upTo800))==NULL) { + if ((headFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.headFont],builtinFontMLen[settings.headFont],MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { logE("could not load header font! falling back to IBM Plex Sans."); headFont=ImGui::GetIO().Fonts->AddFontDefault(); } } } else if (settings.headFont==5) { // system font - if ((headFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_HEAD_FONT_PATH_1,MAX(1,e->getConfInt("headFontSize",36)*dpiScale),NULL,upTo800))==NULL) { - if ((headFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_HEAD_FONT_PATH_2,MAX(1,e->getConfInt("headFontSize",36)*dpiScale),NULL,upTo800))==NULL) { - if ((headFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_HEAD_FONT_PATH_3,MAX(1,e->getConfInt("headFontSize",36)*dpiScale),NULL,upTo800))==NULL) { + if ((headFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_HEAD_FONT_PATH_1,MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { + if ((headFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_HEAD_FONT_PATH_2,MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { + if ((headFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_HEAD_FONT_PATH_3,MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { logW("could not load header font! reverting to default font"); settings.headFont=0; - if ((headFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.headFont],builtinFontMLen[settings.headFont],MAX(1,e->getConfInt("headFontSize",36)*dpiScale),NULL,upTo800))==NULL) { + if ((headFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.headFont],builtinFontMLen[settings.headFont],MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { logE("could not load header font! falling back to IBM Plex Sans."); headFont=ImGui::GetIO().Fonts->AddFontDefault(); } @@ -4086,7 +4086,7 @@ void FurnaceGUI::applyUISettings(bool updateFonts) { } } } else { - if ((headFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.headFont],builtinFontMLen[settings.headFont],MAX(1,e->getConfInt("headFontSize",36)*dpiScale),NULL,upTo800))==NULL) { + if ((headFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.headFont],builtinFontMLen[settings.headFont],MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { logE("could not load header font!"); headFont=ImGui::GetIO().Fonts->AddFontDefault(); } From 3837fe59fb5038544efcfe2679140c3201da1676 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 3 Aug 2023 01:10:25 -0500 Subject: [PATCH 67/87] SN: fix key off --- src/engine/platform/sms.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/engine/platform/sms.cpp b/src/engine/platform/sms.cpp index 640f364ea..76aa62fcb 100644 --- a/src/engine/platform/sms.cpp +++ b/src/engine/platform/sms.cpp @@ -296,6 +296,10 @@ void DivPlatformSMS::tick(bool sysTick) { rWrite(0,0x90|(i<<5)|(isMuted[i]?15:(15-(chan[i].outVol&15)))); chan[i].writeVol=false; } + if (chan[i].keyOff) { + rWrite(0,0x9f|i<<5); + chan[i].keyOff=false; + } } } @@ -309,6 +313,7 @@ int DivPlatformSMS::dispatch(DivCommand c) { chan[c.chan].actualNote=c.value; } chan[c.chan].active=true; + chan[c.chan].keyOff=false; //if (!parent->song.brokenOutVol2) { chan[c.chan].writeVol=true; chan[c.chan].outVol=chan[c.chan].vol; @@ -321,7 +326,7 @@ int DivPlatformSMS::dispatch(DivCommand c) { break; case DIV_CMD_NOTE_OFF: chan[c.chan].active=false; - rWrite(0,0x9f|c.chan<<5); + chan[c.chan].keyOff=true; chan[c.chan].macroInit(NULL); break; case DIV_CMD_NOTE_OFF_ENV: From 3ca687553f2c0f0937d2421b62d112f83b29fc75 Mon Sep 17 00:00:00 2001 From: Electric Keet Date: Wed, 2 Aug 2023 23:20:59 -0700 Subject: [PATCH 68/87] At least it's fixed now. --- src/gui/gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 61cddac39..58fb3e7d5 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -6482,7 +6482,7 @@ bool FurnaceGUI::init() { mainFont=ImGui::GetIO().Fonts->AddFontDefault(); patFont=mainFont; bigFont=mainFont; - headFont=headFont; + headFont=mainFont; if (rend) rend->destroyFontsTexture(); if (!ImGui::GetIO().Fonts->Build()) { logE("error again while building font atlas!"); From c58eec5753ef6a09761573f1053f1d1b579819cf Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 3 Aug 2023 03:54:06 -0500 Subject: [PATCH 69/87] do not reset the timer (and remove intro monitor) --- src/engine/playback.cpp | 4 ++-- src/gui/gui.cpp | 14 -------------- src/gui/gui.h | 2 +- 3 files changed, 3 insertions(+), 17 deletions(-) diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index aabce5c6a..544d59250 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -1967,8 +1967,8 @@ void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsi if (cycles<=0) { // we have to tick if (nextTick()) { - totalTicks=0; - totalSeconds=0; + /*totalTicks=0; + totalSeconds=0;*/ lastLoopPos=size-(runLeftG>>MASTER_CLOCK_PREC); logD("last loop pos: %d for a size of %d and runLeftG of %d",lastLoopPos,size,runLeftG); totalLoops++; diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index aa85a877b..e7221f941 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4476,17 +4476,6 @@ bool FurnaceGUI::loop() { } MEASURE(songInfo,drawSongInfo()); MEASURE(orders,drawOrders()); - if (introMonOpen) { - int totalTicks=e->getTotalTicks(); - int totalSeconds=e->getTotalSeconds(); - double newMonitorPos=totalSeconds+((double)totalTicks/1000000.0); - - if (fabs(newMonitorPos-monitorPos)>0.08) monitorPos=newMonitorPos; - - drawIntro(monitorPos,true); - - if (e->isPlaying()) monitorPos+=ImGui::GetIO().DeltaTime; - } MEASURE(sampleList,drawSampleList()); MEASURE(sampleEdit,drawSampleEdit()); MEASURE(waveList,drawWaveList()); @@ -6079,7 +6068,6 @@ bool FurnaceGUI::init() { clockOpen=e->getConfBool("clockOpen",false); speedOpen=e->getConfBool("speedOpen",true); groovesOpen=e->getConfBool("groovesOpen",false); - introMonOpen=e->getConfBool("introMonOpen",false); regViewOpen=e->getConfBool("regViewOpen",false); logOpen=e->getConfBool("logOpen",false); effectListOpen=e->getConfBool("effectListOpen",true); @@ -6597,7 +6585,6 @@ void FurnaceGUI::commitState() { e->setConf("clockOpen",clockOpen); e->setConf("speedOpen",speedOpen); e->setConf("groovesOpen",groovesOpen); - e->setConf("introMonOpen",introMonOpen); e->setConf("regViewOpen",regViewOpen); e->setConf("logOpen",logOpen); e->setConf("effectListOpen",effectListOpen); @@ -6881,7 +6868,6 @@ FurnaceGUI::FurnaceGUI(): clockOpen(false), speedOpen(true), groovesOpen(false), - introMonOpen(false), basicMode(true), shortIntro(false), insListDir(false), diff --git a/src/gui/gui.h b/src/gui/gui.h index ee158f6af..f35b0b692 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1727,7 +1727,7 @@ class FurnaceGUI { bool mixerOpen, debugOpen, inspectorOpen, oscOpen, volMeterOpen, statsOpen, compatFlagsOpen; bool pianoOpen, notesOpen, channelsOpen, regViewOpen, logOpen, effectListOpen, chanOscOpen; bool subSongsOpen, findOpen, spoilerOpen, patManagerOpen, sysManagerOpen, clockOpen, speedOpen; - bool groovesOpen, introMonOpen; + bool groovesOpen; bool basicMode, shortIntro; bool insListDir, waveListDir, sampleListDir; From 69c4c58cc5580402d3613f7cfdee50a3e848a32d Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 3 Aug 2023 04:11:36 -0500 Subject: [PATCH 70/87] ARREGLAR --- src/gui/intro.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/gui/intro.cpp b/src/gui/intro.cpp index bace14396..0fc1c9600 100644 --- a/src/gui/intro.cpp +++ b/src/gui/intro.cpp @@ -104,10 +104,7 @@ void FurnaceGUI::endIntroTune() { void FurnaceGUI::drawIntro(double introTime, bool monitor) { if (monitor) { - if (introTime<0.0) introTime=0.0; - if (introTime>11.0) introTime=11.0; - if (!introMonOpen) return; - if (introPos<(shortIntro?1.0:11.0)) return; + return; } if (introPos<(shortIntro?1.0:11.0) || monitor) { if (!monitor) { @@ -117,7 +114,7 @@ void FurnaceGUI::drawIntro(double introTime, bool monitor) { ImGui::SetNextWindowSize(ImVec2(canvasW,canvasH)); if (introPos<0.1) ImGui::SetNextWindowFocus(); } - if (ImGui::Begin(monitor?"IntroMon X":"Intro",monitor?(&introMonOpen):NULL,monitor?globalWinFlags:(ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoDocking|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoBackground))) { + if (ImGui::Begin(monitor?"IntroMon X":"Intro",NULL,monitor?globalWinFlags:(ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoDocking|ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoBackground))) { if (monitor) { if (ImGui::Button("Preview")) { introPos=0; From cafc6f391de555bdcfd4212659ac59853e86c538 Mon Sep 17 00:00:00 2001 From: Eknous <61464512+Eknous-P@users.noreply.github.com> Date: Thu, 3 Aug 2023 14:25:26 +0400 Subject: [PATCH 71/87] chanOsc automatic columns + fix chanOsc channel note text (#1305) * chanOsc note name * chanOsc auto cols * lowercase c for consistency * fix chan note text * change int to short * simplify * visible chan count for calculation * cleanup * cleanup 2 (not removing the comma yet) * remove extra spaces * add id --- src/gui/chanOsc.cpp | 35 ++++++++++++++++++++++++++++++++++- src/gui/gui.cpp | 3 +++ src/gui/gui.h | 2 +- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/gui/chanOsc.cpp b/src/gui/chanOsc.cpp index 4b575b52b..8ace8a5b2 100644 --- a/src/gui/chanOsc.cpp +++ b/src/gui/chanOsc.cpp @@ -41,6 +41,13 @@ const char* chanOscRefs[]={ "Note Trigger" }; +const char* autoColsTypes[]={ + "Off", + "Mode 1", + "Mode 2", + "Mode 3" +}; + float FurnaceGUI::computeGradPos(int type, int chan) { switch (type) { case GUI_OSCREF_NONE: @@ -146,6 +153,19 @@ void FurnaceGUI::drawChanOsc() { centerSettingReset=true; } + ImGui::TableNextColumn(); + ImGui::Text("Automatic columns"); + ImGui::SameLine(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + const char* previewColType = autoColsTypes[chanOscAutoColsType&3]; + if (ImGui::BeginCombo("##AutoCols",previewColType)) { + for (int j=0; j<4; j++) { + const bool isSelected=(chanOscAutoColsType==j); + if (ImGui::Selectable(autoColsTypes[j],isSelected)) chanOscAutoColsType=j; + if (isSelected) ImGui::SetItemDefaultFocus(); + } + ImGui::EndCombo(); + } ImGui::EndTable(); } @@ -346,6 +366,16 @@ void FurnaceGUI::drawChanOsc() { oscChans.push_back(i); } } + + switch (chanOscAutoColsType) { + case 1: chanOscCols=sqrt(oscChans.size()); break; + case 2: chanOscCols=sqrt(oscChans.size()+1); break; + case 3: chanOscCols=sqrt(oscChans.size())+1; break; + default: break; + } + if (chanOscCols<1) chanOscCols=1; + if (chanOscCols>64) chanOscCols=64; + int rows=(oscBufs.size()+(chanOscCols-1))/chanOscCols; for (size_t i=0; igetChanState(ch); if (chanState==NULL || !(chanState->keyOn)) break; - text+=fmt::sprintf("%s",noteName(short (chanState->note),0)); + short tempNote=chanState->note; //all of this conversion is necessary because notes 100-102 are special chars + short noteMod=tempNote%12+12; //also note 0 is a BUG, hence +12 on the note and -1 on the octave + short oct=tempNote/12-1; + text+=fmt::sprintf("%s",noteName(noteMod,oct)); break; } case '%': diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index e7221f941..1d1b21207 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -6126,6 +6126,7 @@ bool FurnaceGUI::init() { pianoInputPadMode=e->getConfInt("pianoInputPadMode",pianoInputPadMode); chanOscCols=e->getConfInt("chanOscCols",3); + chanOscAutoColsType=e->getConfInt("chanOscAutoColsType",0); chanOscColorX=e->getConfInt("chanOscColorX",GUI_OSCREF_CENTER); chanOscColorY=e->getConfInt("chanOscColorY",GUI_OSCREF_CENTER); chanOscTextX=e->getConfFloat("chanOscTextX",0.0f); @@ -6643,6 +6644,7 @@ void FurnaceGUI::commitState() { // commit per-chan osc state e->setConf("chanOscCols",chanOscCols); + e->setConf("chanOscAutoColsType",chanOscAutoColsType); e->setConf("chanOscColorX",chanOscColorX); e->setConf("chanOscColorY",chanOscColorY); e->setConf("chanOscTextX",chanOscTextX); @@ -7086,6 +7088,7 @@ FurnaceGUI::FurnaceGUI(): oscWindowSize(20.0f), oscZoomSlider(false), chanOscCols(3), + chanOscAutoColsType(0), chanOscColorX(GUI_OSCREF_CENTER), chanOscColorY(GUI_OSCREF_CENTER), chanOscWindowSize(20.0f), diff --git a/src/gui/gui.h b/src/gui/gui.h index f35b0b692..f6eb1d58c 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1970,7 +1970,7 @@ class FurnaceGUI { bool oscZoomSlider; // per-channel oscilloscope - int chanOscCols, chanOscColorX, chanOscColorY; + int chanOscCols, chanOscAutoColsType, chanOscColorX, chanOscColorY; float chanOscWindowSize, chanOscTextX, chanOscTextY, chanOscAmplify; bool chanOscWaveCorr, chanOscOptions, updateChanOscGradTex, chanOscUseGrad, chanOscNormalize; String chanOscTextFormat; From 629d73f421cbe0232fd725a72dd90f34af214ae8 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 3 Aug 2023 05:27:20 -0500 Subject: [PATCH 72/87] address review comments --- src/gui/settings.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index b1fc3e2b0..e8ec87699 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -3297,6 +3297,7 @@ void FurnaceGUI::commitSettings() { ImGui::GetIO().Fonts->Clear(); mainFont=ImGui::GetIO().Fonts->AddFontDefault(); patFont=mainFont; + bigFont=mainFont; headFont=mainFont; if (rend) rend->destroyFontsTexture(); if (!ImGui::GetIO().Fonts->Build()) { From fcba244c847849cda6e3bbd8d9e98c9cc7acf772 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 3 Aug 2023 05:31:55 -0500 Subject: [PATCH 73/87] fix --- src/gui/settings.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index e8ec87699..5faa3f2be 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -1867,7 +1867,7 @@ void FurnaceGUI::drawSettings() { if (settings.mainFontSize<3) settings.mainFontSize=3; if (settings.mainFontSize>96) settings.mainFontSize=96; } - ImGui::Text("Head font"); + ImGui::Text("Header font"); ImGui::SameLine(); ImGui::Combo("##HeadFont",&settings.headFont,headFonts,7); if (settings.headFont==6) { @@ -4060,7 +4060,7 @@ void FurnaceGUI::applyUISettings(bool updateFonts) { logE("could not load big UI font!"); } - if (settings.mainFontSize==settings.headFontSize && settings.headFont<5 && builtinFontM[settings.headFont]==builtinFont[settings.mainFont]) { + if (settings.mainFontSize==settings.headFontSize && settings.headFont<5 && builtinFont[settings.headFont]==builtinFont[settings.mainFont]) { logD("using main font for header font."); headFont=mainFont; } else { From eb9bd913e2499ba2157c3c060f0bf73c10535435 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 3 Aug 2023 05:34:49 -0500 Subject: [PATCH 74/87] and one more fix --- src/gui/settings.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 5faa3f2be..7f582f6c8 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -4068,7 +4068,7 @@ void FurnaceGUI::applyUISettings(bool updateFonts) { if ((headFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(settings.headFontPath.c_str(),MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { logW("could not load header font! reverting to default font"); settings.headFont=0; - if ((headFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.headFont],builtinFontMLen[settings.headFont],MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { + if ((headFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFont[settings.headFont],builtinFontLen[settings.headFont],MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { logE("could not load header font! falling back to IBM Plex Sans."); headFont=ImGui::GetIO().Fonts->AddFontDefault(); } @@ -4079,7 +4079,7 @@ void FurnaceGUI::applyUISettings(bool updateFonts) { if ((headFont=ImGui::GetIO().Fonts->AddFontFromFileTTF(SYSTEM_HEAD_FONT_PATH_3,MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { logW("could not load header font! reverting to default font"); settings.headFont=0; - if ((headFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.headFont],builtinFontMLen[settings.headFont],MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { + if ((headFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFont[settings.headFont],builtinFontLen[settings.headFont],MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { logE("could not load header font! falling back to IBM Plex Sans."); headFont=ImGui::GetIO().Fonts->AddFontDefault(); } @@ -4087,7 +4087,7 @@ void FurnaceGUI::applyUISettings(bool updateFonts) { } } } else { - if ((headFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFontM[settings.headFont],builtinFontMLen[settings.headFont],MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { + if ((headFont=ImGui::GetIO().Fonts->AddFontFromMemoryCompressedTTF(builtinFont[settings.headFont],builtinFontLen[settings.headFont],MAX(1,e->getConfInt("headFontSize",27)*dpiScale),NULL,upTo800))==NULL) { logE("could not load header font!"); headFont=ImGui::GetIO().Fonts->AddFontDefault(); } From cf1f741769f9ff10e66d6f52fc47de97a0146244 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 3 Aug 2023 14:55:30 -0500 Subject: [PATCH 75/87] GUI: fix SNES chip config out of bounds issue #1319 --- src/gui/gui.cpp | 2 +- src/gui/gui.h | 2 +- src/gui/sysConf.cpp | 10 ++++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index d37e04418..a262b9da2 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4160,7 +4160,7 @@ bool FurnaceGUI::loop() { exitDisabledTimer=1; for (int i=0; isong.systemLen; i++) { if (ImGui::TreeNode(fmt::sprintf("%d. %s##_SYSP%d",i+1,getSystemName(e->song.system[i]),i).c_str())) { - drawSysConf(i,e->song.system[i],e->song.systemFlags[i],true); + drawSysConf(i,e->song.system[i],e->song.systemFlags[i],true,true); ImGui::TreePop(); } } diff --git a/src/gui/gui.h b/src/gui/gui.h index 308e799da..101247dc0 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -2083,7 +2083,7 @@ class FurnaceGUI { void drawAlgorithm(unsigned char alg, FurnaceGUIFMAlgs algType, const ImVec2& size); void drawFMEnv(unsigned char tl, unsigned char ar, unsigned char dr, unsigned char d2r, unsigned char rr, unsigned char sl, unsigned char sus, unsigned char egt, unsigned char algOrGlobalSus, float maxTl, float maxArDr, float maxRr, const ImVec2& size, unsigned short instType); void drawGBEnv(unsigned char vol, unsigned char len, unsigned char sLen, bool dir, const ImVec2& size); - bool drawSysConf(int chan, DivSystem type, DivConfig& flags, bool modifyOnChange); + bool drawSysConf(int chan, DivSystem type, DivConfig& flags, bool modifyOnChange, bool fromMenu=false); void kvsConfig(DivInstrument* ins); void drawFMPreview(const ImVec2& size); void renderFMPreview(const DivInstrumentFM& params, int pos=0); diff --git a/src/gui/sysConf.cpp b/src/gui/sysConf.cpp index 0a746e61f..283fad98d 100644 --- a/src/gui/sysConf.cpp +++ b/src/gui/sysConf.cpp @@ -22,7 +22,7 @@ #include "misc/cpp/imgui_stdlib.h" #include -bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool modifyOnChange) { +bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool modifyOnChange, bool fromMenu) { bool altered=false; bool restart=settings.restartOnFlagChange && modifyOnChange; bool supportsCustomRate=true; @@ -1564,7 +1564,13 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo } altered=true; } - if (i<7) ImGui::SameLine(); + if (i<7) { + if (fromMenu) { + ImGui::SameLine(); + } else { + sameLineMaybe(); + } + } } if (CWSliderInt("Delay##EchoDelay",&echoDelay,0,15)) { From 358118f1f996a49d7477b079b51421b69ba3a04f Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 3 Aug 2023 21:32:57 -0500 Subject: [PATCH 76/87] sorry respect my formatting style --- src/gui/chanOsc.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/gui/chanOsc.cpp b/src/gui/chanOsc.cpp index 8ace8a5b2..e4e9e85fb 100644 --- a/src/gui/chanOsc.cpp +++ b/src/gui/chanOsc.cpp @@ -157,7 +157,7 @@ void FurnaceGUI::drawChanOsc() { ImGui::Text("Automatic columns"); ImGui::SameLine(); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - const char* previewColType = autoColsTypes[chanOscAutoColsType&3]; + const char* previewColType=autoColsTypes[chanOscAutoColsType&3]; if (ImGui::BeginCombo("##AutoCols",previewColType)) { for (int j=0; j<4; j++) { const bool isSelected=(chanOscAutoColsType==j); @@ -367,11 +367,20 @@ void FurnaceGUI::drawChanOsc() { } } + // 0: none + // 1: sqrt(chans) + // 2: sqrt(chans+1) + // 3: sqrt(chans)+1 switch (chanOscAutoColsType) { - case 1: chanOscCols=sqrt(oscChans.size()); break; - case 2: chanOscCols=sqrt(oscChans.size()+1); break; - case 3: chanOscCols=sqrt(oscChans.size())+1; break; - default: break; + case 1: + chanOscCols=sqrt(oscChans.size()); + break; + case 2: + chanOscCols=sqrt(oscChans.size()+1); + break; + case 3: + chanOscCols=sqrt(oscChans.size())+1; + break; } if (chanOscCols<1) chanOscCols=1; if (chanOscCols>64) chanOscCols=64; From 2211f9cb712b4f1781e0f0a03996735e8967a4a3 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 4 Aug 2023 03:01:18 -0500 Subject: [PATCH 77/87] fix sys list in doc --- doc/7-systems/README.md | 728 ++-------------------------------------- 1 file changed, 20 insertions(+), 708 deletions(-) diff --git a/doc/7-systems/README.md b/doc/7-systems/README.md index a3a619816..e768ec094 100644 --- a/doc/7-systems/README.md +++ b/doc/7-systems/README.md @@ -65,11 +65,11 @@ this is the full list of chips that Furnace supports. - [2A03](nes.md) - [Amiga](amiga.md) -- [AY-3-8910, AY-3-8914, YM2149(F), 5B](ay8910.md) -- [AY8930](ay8930.md) -- [MOS 6581, MOS 8580](c64.md) -- [ES5506](es5506.md) -- [SCC](scc.md) +- [AY-3-8910/8914/YM2149(F)/Sunsoft 5B](ay8910.md) +- [Microship AY8930](ay8930.md) +- [MOS 6581/8580 (SID)](c64.md) +- [Ensoniq ES5506](es5506.md) +- [Konami SCC](scc.md) - [FDS](fds.md) - [Game Boy](game-boy.md) - [Generic PCM DAC](dac.md) @@ -82,8 +82,8 @@ this is the full list of chips that Furnace supports. - [MSM5232](msm5232.md) - [MSM6258](msm6258.md) - [MSM6295](msm6295.md) -- [N163](n163.md) -- [Namco WSG, C15, C30](namco.md) +- [Namco 163](n163.md) +- [Namco WSG/C15/C30](namco.md) - [HuC6280](pce.md) - [PC Speaker](pcspkr.md) - [PET](pet.md) @@ -91,12 +91,11 @@ this is the full list of chips that Furnace supports. - [POKEY](pokey.md) - [PV-1000](pv1000.md) - [QSound](qsound.md) -- [RF5C68, RF5C164](ricoh.md) +- [RF5C68/RF5C164](ricoh.md) - [SAA1099](saa1099.md) -- [SCC](scc.md) - [SegaPCM](segapcm.md) - [SM8521](sm8521.md) -- [SN76489 / Sega PSG](sms.md) +- [SN76489/Sega PSG](sms.md) - [SNES](snes.md) - [tildearrow Sound Unit](soundunit.md) - [T6W28](t6w28.md) @@ -108,703 +107,16 @@ this is the full list of chips that Furnace supports. - [VRC6](vrc6.md) - [WonderSwan](wonderswan.md) - [X1-010](x1-010.md) -- [(OPL) VRC7, Y8950, YM3526, YM3812, YMF262](opl.md) -- [(OPLL) YM2413](opll.md) -- [(OPZ) YM2414](opz.md) -- [(OPM) YM2151](ym2152.md) -- [(OPN) YM2203](ym2203.md) -- [(OPNA) YM2608](ym2608.md) -- [(OPNB) YM2610](ym2610.md) -- [(OPNB) YM2610B](ym2610b.md) -- [(OPN2) YM2612, YM3438](ym2612.md) +- [VRC7, Y8950, YM3526, YM3812 and YMF262 (OPL)](opl.md) +- [YM2413 (OPLL)](opll.md) +- [YM2414 (OPZ)](opz.md) +- [YM2151 (OPM)](ym2152.md) +- [YM2203 (OPN)](ym2203.md) +- [YM2608 (OPNA)](ym2608.md) +- [YM2610 (OPNB)](ym2610.md) +- [YM2610B (OPNB2)](ym2610b.md) +- [YM2612/YM3438 (OPN2)](ym2612.md) - [YMZ280B](ymz280b.md) -- [ZXS Beeper](zxbeep.md) +- [ZX Spectrum Beeper](zxbeep.md) -Furnace also reads .dmf files with the [Yamaha YMU759](ymu759.md) system, but... - - - +Furnace also reads .dmf files with the [Yamaha YMU759](ymu759.md) system, but... \ No newline at end of file From 2060f8e9eba7ddec0d020931a948ea7262d0679c Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 4 Aug 2023 03:33:45 -0500 Subject: [PATCH 78/87] OPN: fix ExtCh alg/fb/fms/ams/lfo macros --- src/engine/platform/genesisext.cpp | 33 +++++++++++++++++++++++++++++ src/engine/platform/ym2203ext.cpp | 21 ++++++++++++++++++ src/engine/platform/ym2608ext.cpp | 34 ++++++++++++++++++++++++++++++ src/engine/platform/ym2610bext.cpp | 33 +++++++++++++++++++++++++++++ src/engine/platform/ym2610ext.cpp | 33 +++++++++++++++++++++++++++++ 5 files changed, 154 insertions(+) diff --git a/src/engine/platform/genesisext.cpp b/src/engine/platform/genesisext.cpp index 7e9278daa..56ae1ceaf 100644 --- a/src/engine/platform/genesisext.cpp +++ b/src/engine/platform/genesisext.cpp @@ -512,6 +512,39 @@ void DivPlatformGenesisExt::tick(bool sysTick) { opChan[i].freqChanged=true; } + // channel macros + if (opChan[i].std.alg.had) { + chan[extChanOffs].state.alg=opChan[i].std.alg.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + if (!parent->song.algMacroBehavior) for (int j=0; j<4; j++) { + unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[j]; + DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[j]; + if (isOpMuted[j] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[j].outVol&0x7f,127)); + } + } + } + if (i==0 || fbAllOps) { + if (opChan[i].std.fb.had) { + chan[extChanOffs].state.fb=opChan[i].std.fb.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + } + } + if (opChan[i].std.fms.had) { + chan[extChanOffs].state.fms=opChan[i].std.fms.val; + rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + } + if (opChan[i].std.ams.had) { + chan[extChanOffs].state.ams=opChan[i].std.ams.val; + rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + } + if (opChan[i].std.ex3.had) { + lfoValue=(opChan[i].std.ex3.val>7)?0:(8|(opChan[i].std.ex3.val&7)); + rWrite(0x22,lfoValue); + } + // param macros unsigned short baseAddr=chanOffs[2]|opOffs[orderedOps[i]]; DivInstrumentFM::Operator& op=chan[2].state.op[orderedOps[i]]; diff --git a/src/engine/platform/ym2203ext.cpp b/src/engine/platform/ym2203ext.cpp index 8842b3cc8..8bad13d48 100644 --- a/src/engine/platform/ym2203ext.cpp +++ b/src/engine/platform/ym2203ext.cpp @@ -444,6 +444,27 @@ void DivPlatformYM2203Ext::tick(bool sysTick) { opChan[i].freqChanged=true; } + // channel macros + if (opChan[i].std.alg.had) { + chan[extChanOffs].state.alg=opChan[i].std.alg.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + if (!parent->song.algMacroBehavior) for (int j=0; j<4; j++) { + unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[j]; + DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[j]; + if (isOpMuted[j] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[j].outVol&0x7f,127)); + } + } + } + if (i==0 || fbAllOps) { + if (opChan[i].std.fb.had) { + chan[extChanOffs].state.fb=opChan[i].std.fb.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + } + } + // param macros unsigned short baseAddr=chanOffs[2]|opOffs[orderedOps[i]]; DivInstrumentFM::Operator& op=chan[2].state.op[orderedOps[i]]; diff --git a/src/engine/platform/ym2608ext.cpp b/src/engine/platform/ym2608ext.cpp index a9fd60f10..0801f0885 100644 --- a/src/engine/platform/ym2608ext.cpp +++ b/src/engine/platform/ym2608ext.cpp @@ -467,6 +467,40 @@ void DivPlatformYM2608Ext::tick(bool sysTick) { opChan[i].freqChanged=true; } + // channel macros + if (opChan[i].std.alg.had) { + chan[extChanOffs].state.alg=opChan[i].std.alg.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + if (!parent->song.algMacroBehavior) for (int j=0; j<4; j++) { + unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[j]; + DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[j]; + if (isOpMuted[j] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[j].outVol&0x7f,127)); + } + } + } + if (i==0 || fbAllOps) { + if (opChan[i].std.fb.had) { + chan[extChanOffs].state.fb=opChan[i].std.fb.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + } + } + if (opChan[i].std.fms.had) { + chan[extChanOffs].state.fms=opChan[i].std.fms.val; + rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + } + if (opChan[i].std.ams.had) { + chan[extChanOffs].state.ams=opChan[i].std.ams.val; + rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + } + if (opChan[i].std.ex3.had) { + lfoValue=(opChan[i].std.ex3.val>7)?0:(8|(opChan[i].std.ex3.val&7)); + rWrite(0x22,lfoValue); + } + + // param macros unsigned short baseAddr=chanOffs[2]|opOffs[orderedOps[i]]; DivInstrumentFM::Operator& op=chan[2].state.op[orderedOps[i]]; diff --git a/src/engine/platform/ym2610bext.cpp b/src/engine/platform/ym2610bext.cpp index 79239c559..99727b734 100644 --- a/src/engine/platform/ym2610bext.cpp +++ b/src/engine/platform/ym2610bext.cpp @@ -463,6 +463,39 @@ void DivPlatformYM2610BExt::tick(bool sysTick) { opChan[i].freqChanged=true; } + // channel macros + if (opChan[i].std.alg.had) { + chan[extChanOffs].state.alg=opChan[i].std.alg.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + if (!parent->song.algMacroBehavior) for (int j=0; j<4; j++) { + unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[j]; + DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[j]; + if (isOpMuted[j] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[j].outVol&0x7f,127)); + } + } + } + if (i==0 || fbAllOps) { + if (opChan[i].std.fb.had) { + chan[extChanOffs].state.fb=opChan[i].std.fb.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + } + } + if (opChan[i].std.fms.had) { + chan[extChanOffs].state.fms=opChan[i].std.fms.val; + rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + } + if (opChan[i].std.ams.had) { + chan[extChanOffs].state.ams=opChan[i].std.ams.val; + rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + } + if (opChan[i].std.ex3.had) { + lfoValue=(opChan[i].std.ex3.val>7)?0:(8|(opChan[i].std.ex3.val&7)); + rWrite(0x22,lfoValue); + } + // param macros unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[orderedOps[i]]; DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[orderedOps[i]]; diff --git a/src/engine/platform/ym2610ext.cpp b/src/engine/platform/ym2610ext.cpp index a85e9cadd..c35599fdd 100644 --- a/src/engine/platform/ym2610ext.cpp +++ b/src/engine/platform/ym2610ext.cpp @@ -463,6 +463,39 @@ void DivPlatformYM2610Ext::tick(bool sysTick) { opChan[i].freqChanged=true; } + // channel macros + if (opChan[i].std.alg.had) { + chan[extChanOffs].state.alg=opChan[i].std.alg.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + if (!parent->song.algMacroBehavior) for (int j=0; j<4; j++) { + unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[j]; + DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[j]; + if (isOpMuted[j] || !op.enable) { + rWrite(baseAddr+0x40,127); + } else { + rWrite(baseAddr+0x40,127-VOL_SCALE_LOG_BROKEN(127-op.tl,opChan[j].outVol&0x7f,127)); + } + } + } + if (i==0 || fbAllOps) { + if (opChan[i].std.fb.had) { + chan[extChanOffs].state.fb=opChan[i].std.fb.val; + rWrite(chanOffs[extChanOffs]+ADDR_FB_ALG,(chan[extChanOffs].state.alg&7)|(chan[extChanOffs].state.fb<<3)); + } + } + if (opChan[i].std.fms.had) { + chan[extChanOffs].state.fms=opChan[i].std.fms.val; + rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + } + if (opChan[i].std.ams.had) { + chan[extChanOffs].state.ams=opChan[i].std.ams.val; + rWrite(chanOffs[extChanOffs]+ADDR_LRAF,(IS_EXTCH_MUTED?0:(opChan[i].pan<<6))|(chan[extChanOffs].state.fms&7)|((chan[extChanOffs].state.ams&3)<<4)); + } + if (opChan[i].std.ex3.had) { + lfoValue=(opChan[i].std.ex3.val>7)?0:(8|(opChan[i].std.ex3.val&7)); + rWrite(0x22,lfoValue); + } + // param macros unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[orderedOps[i]]; DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[orderedOps[i]]; From d0330291cedcc61ae97c363d9ef100f245b73c15 Mon Sep 17 00:00:00 2001 From: freq-mod <32672779+freq-mod@users.noreply.github.com> Date: Fri, 4 Aug 2023 14:31:44 +0200 Subject: [PATCH 79/87] pitch res of k053260 --- doc/7-systems/k056320.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/7-systems/k056320.md b/doc/7-systems/k056320.md index bf6595823..f4fe9e535 100644 --- a/doc/7-systems/k056320.md +++ b/doc/7-systems/k056320.md @@ -1,6 +1,6 @@ # Konami 056320 -the 056320 is a sample-based chip that featured in a number of Konami arcade games, notably _Sunset Riders_ and _Teenage Mutant Ninja Turtles: Turtles in Time_. it has four channels of audio and stereo output, and can access up to 2MB of samples in 8-bit PCM or 4-bit ADPCM formats. +the 056320 is a sample-based chip that featured in a number of Konami arcade games, notably _Sunset Riders_ and _Teenage Mutant Ninja Turtles: Turtles in Time_. it has four channels of audio, 12-bit pitch resolution and stereo output, and can access up to 2MB of samples in 8-bit PCM or 4-bit ADPCM formats. From d9ba33abbf74b31ce07ec77f35c212523b4bd48f Mon Sep 17 00:00:00 2001 From: freq-mod <32672779+freq-mod@users.noreply.github.com> Date: Fri, 4 Aug 2023 14:41:17 +0200 Subject: [PATCH 80/87] Create ga20.md --- doc/7-systems/ga20.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 doc/7-systems/ga20.md diff --git a/doc/7-systems/ga20.md b/doc/7-systems/ga20.md new file mode 100644 index 000000000..875564870 --- /dev/null +++ b/doc/7-systems/ga20.md @@ -0,0 +1,8 @@ +# Irem GA20 + +ga20 is a 4 channel PCM sound source used by Irem in their arcades in late 1980s and eraly 1990s, often paired with [Yamaha YM2151](ym2151.md). Soundchip itself is rather unremarkable, having 8-bit volume and pitch control, no stereo panning + + +# effects + +none From 297334e882b4dd1967c64cdb67b0d191f6c5a0de Mon Sep 17 00:00:00 2001 From: freq-mod <32672779+freq-mod@users.noreply.github.com> Date: Fri, 4 Aug 2023 14:42:04 +0200 Subject: [PATCH 81/87] Update README.md add ga20 link --- doc/7-systems/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/7-systems/README.md b/doc/7-systems/README.md index e768ec094..53be263ea 100644 --- a/doc/7-systems/README.md +++ b/doc/7-systems/README.md @@ -73,7 +73,7 @@ this is the full list of chips that Furnace supports. - [FDS](fds.md) - [Game Boy](game-boy.md) - [Generic PCM DAC](dac.md) -- Irem GA20 +- [Irem GA20](ga20.md) - [Bubble System WSG](bubblesystem.md) - [K007232](k007232.md) - [K053260](k056320.md) @@ -119,4 +119,4 @@ this is the full list of chips that Furnace supports. - [YMZ280B](ymz280b.md) - [ZX Spectrum Beeper](zxbeep.md) -Furnace also reads .dmf files with the [Yamaha YMU759](ymu759.md) system, but... \ No newline at end of file +Furnace also reads .dmf files with the [Yamaha YMU759](ymu759.md) system, but... From 77e708dc57856d361709ce99cab343a3f1087bbb Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 4 Aug 2023 17:35:39 -0500 Subject: [PATCH 82/87] YM2612: better DAC write scheduling issue #1300 --- src/engine/platform/fmsharedbase.h | 15 +++--- src/engine/platform/genesis.cpp | 83 +++++++++++++++++------------- src/engine/platform/genesis.h | 5 +- src/gui/debug.cpp | 4 -- 4 files changed, 58 insertions(+), 49 deletions(-) diff --git a/src/engine/platform/fmsharedbase.h b/src/engine/platform/fmsharedbase.h index 4200d7570..9be217b94 100644 --- a/src/engine/platform/fmsharedbase.h +++ b/src/engine/platform/fmsharedbase.h @@ -105,16 +105,17 @@ class DivPlatformFMBase: public DivDispatch { } } } + // only used by OPN2 for DAC writes inline void urgentWrite(unsigned short a, unsigned char v) { if (!skipRegisterWrites && !flushFirst) { - if (writes.empty()) { - writes.push_back(QueuedWrite(a,v)); - } else if ((writes.size()>16 && writes.front().addr!=0xf0) || writes.front().addrOrVal) { - // $f0 is used by OPN hard reset - writes.push_back(QueuedWrite(a,v)); - } else { - writes.push_front(QueuedWrite(a,v)); + if (!writes.empty()) { + // check for hard reset + if (writes.front().addr==0xf0) { + // replace hard reset with DAC write + writes.pop_front(); + } } + writes.push_front(QueuedWrite(a,v)); if (dumpWrites) { addWrite(a,v); } diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index 20e87d618..29b25f29e 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -96,32 +96,22 @@ void DivPlatformGenesis::processDAC(int iRate) { //sample>>=1; if (sample<-128) sample=-128; if (sample>127) sample=127; - urgentWrite(0x2a,(unsigned char)sample+0x80); + dacWrite=(unsigned char)(sample+0x80); } } else { - if (!chan[5].dacReady) { - chan[5].dacDelay+=32000; - if (chan[5].dacDelay>=iRate) { - chan[5].dacDelay-=iRate; - chan[5].dacReady=true; - } - } if (chan[5].dacMode && chan[5].dacSample!=-1) { chan[5].dacPeriod+=chan[5].dacRate; if (chan[5].dacPeriod>=iRate) { DivSample* s=parent->getSample(chan[5].dacSample); if (s->samples>0 && chan[5].dacPossamples) { if (!isMuted[5]) { - if (chan[5].dacReady && writes.size()<16) { - int sample; - if (parent->song.noOPN2Vol) { - sample=s->data8[chan[5].dacDirection?(s->samples-chan[5].dacPos-1):chan[5].dacPos]; - } else { - sample=(s->data8[chan[5].dacDirection?(s->samples-chan[5].dacPos-1):chan[5].dacPos]*dacVolTable[chan[5].outVol])>>7; - } - urgentWrite(0x2a,(unsigned char)sample+0x80); - chan[5].dacReady=false; + int sample; + if (parent->song.noOPN2Vol) { + sample=s->data8[chan[5].dacDirection?(s->samples-chan[5].dacPos-1):chan[5].dacPos]; + } else { + sample=(s->data8[chan[5].dacDirection?(s->samples-chan[5].dacPos-1):chan[5].dacPos]*dacVolTable[chan[5].outVol])>>7; } + dacWrite=(unsigned char)(sample+0x80); } chan[5].dacPos++; if (!chan[5].dacDirection && (s->isLoopable() && chan[5].dacPos>=(unsigned int)s->loopEnd)) { @@ -151,24 +141,34 @@ void DivPlatformGenesis::acquire_nuked(short** buf, size_t len) { os[0]=0; os[1]=0; for (int i=0; i<6; i++) { if (!writes.empty()) { - if (--delay<0) { - delay=0; - QueuedWrite& w=writes.front(); - if (w.addrOrVal) { - //logV("%.3x = %.2x",w.addr,w.val); - OPN2_Write(&fm,0x1+((w.addr>>8)<<1),w.val); - lastBusy=0; - regPool[w.addr&0x1ff]=w.val; - writes.pop_front(); - } else { - lastBusy++; - if (fm.write_busy==0) { - OPN2_Write(&fm,0x0+((w.addr>>8)<<1),w.addr); - w.addrOrVal=true; + QueuedWrite& w=writes.front(); + if (w.addrOrVal) { + //logV("%.3x = %.2x",w.addr,w.val); + OPN2_Write(&fm,0x1+((w.addr>>8)<<1),w.val); + regPool[w.addr&0x1ff]=w.val; + writes.pop_front(); + + if (dacWrite>=0) { + if (!canWriteDAC) { + canWriteDAC=true; + } else { + urgentWrite(0x2a,dacWrite); + dacWrite=-1; + canWriteDAC=writes.empty(); } } + } else { + if (fm.write_busy==0) { + OPN2_Write(&fm,0x0+((w.addr>>8)<<1),w.addr); + w.addrOrVal=true; + } } } else { + canWriteDAC=true; + if (dacWrite>=0) { + urgentWrite(0x2a,dacWrite); + dacWrite=-1; + } flushFirst=false; } @@ -227,8 +227,22 @@ void DivPlatformGenesis::acquire_ymfm(short** buf, size_t len) { fm_ymfm->write(0x1+((w.addr>>8)<<1),w.val); regPool[w.addr&0x1ff]=w.val; writes.pop_front(); - lastBusy=1; + + if (dacWrite>=0) { + if (!canWriteDAC) { + canWriteDAC=true; + } else { + urgentWrite(0x2a,dacWrite); + dacWrite=-1; + canWriteDAC=writes.empty(); + } + } } else { + canWriteDAC=true; + if (dacWrite>=0) { + urgentWrite(0x2a,dacWrite); + dacWrite=-1; + } flushFirst=false; } @@ -1314,11 +1328,12 @@ void DivPlatformGenesis::reset() { pendingWrites[i]=-1; } - lastBusy=60; lfoValue=8; softPCMTimer=0; extMode=false; flushFirst=false; + dacWrite=-1; + canWriteDAC=true; if (softPCM) { chan[5].dacMode=true; @@ -1330,8 +1345,6 @@ void DivPlatformGenesis::reset() { // LFO immWrite(0x22,lfoValue); - - delay=0; } int DivPlatformGenesis::getOutputCount() { diff --git a/src/engine/platform/genesis.h b/src/engine/platform/genesis.h index c9de0493f..d618c6892 100644 --- a/src/engine/platform/genesis.h +++ b/src/engine/platform/genesis.h @@ -55,7 +55,6 @@ class DivPlatformGenesis: public DivPlatformOPN { unsigned int dacPos; int dacSample; int dacDelay; - bool dacReady; bool dacDirection; bool setPos; unsigned char sampleBank; @@ -69,7 +68,6 @@ class DivPlatformGenesis: public DivPlatformOPN { dacPos(0), dacSample(-1), dacDelay(0), - dacReady(true), dacDirection(false), setPos(false), sampleBank(0), @@ -86,8 +84,9 @@ class DivPlatformGenesis: public DivPlatformOPN { int softPCMTimer; - bool extMode, softPCM, noExtMacros, useYMFM; + bool extMode, softPCM, noExtMacros, useYMFM, canWriteDAC; unsigned char chipType; + short dacWrite; unsigned char dacVolTable[128]; diff --git a/src/gui/debug.cpp b/src/gui/debug.cpp index bd6bdb81f..d2b2f44ab 100644 --- a/src/gui/debug.cpp +++ b/src/gui/debug.cpp @@ -62,7 +62,6 @@ #define FM_CHIP_DEBUG \ COMMON_CHIP_DEBUG; \ - ImGui::Text("- lastBusy: %d",ch->lastBusy); \ ImGui::Text("- delay: %d",ch->delay); #define FM_OPN_CHIP_DEBUG \ @@ -167,7 +166,6 @@ ImGui::TextColored(ch->hardReset?colorOn:colorOff,">> hardReset"); \ ImGui::TextColored(ch->opMaskChanged?colorOn:colorOff,">> opMaskChanged"); \ ImGui::TextColored(ch->dacMode?colorOn:colorOff,">> DACMode"); \ - ImGui::TextColored(ch->dacReady?colorOn:colorOff,">> DACReady"); \ ImGui::TextColored(ch->dacDirection?colorOn:colorOff,">> DACDirection"); #define GENESIS_OPCHAN_DEBUG \ @@ -381,7 +379,6 @@ void putDispatchChip(void* data, int type) { ImGui::Text("- pcmR: %d",ch->pcmR); ImGui::Text("- pcmCycles: %d",ch->pcmCycles); ImGui::Text("- sampleBank: %d",ch->sampleBank); - ImGui::Text("- lastBusy: %d",ch->lastBusy); COMMON_CHIP_DEBUG_BOOL; break; } @@ -389,7 +386,6 @@ void putDispatchChip(void* data, int type) { DivPlatformAY8910* ch=(DivPlatformAY8910*)data; ImGui::Text("> AY-3-8910"); COMMON_CHIP_DEBUG; - ImGui::Text("- lastBusy: %d",ch->lastBusy); ImGui::Text("- sampleBank: %d",ch->sampleBank); ImGui::Text("- stereoSep: %d",ch->stereoSep); ImGui::Text("- delay: %d",ch->delay); From 4d476c0588da57e95a1b7fb484b44d5fa3124b71 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 4 Aug 2023 17:48:34 -0500 Subject: [PATCH 83/87] YM2612: fix direct stream --- src/engine/platform/genesis.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index 29b25f29e..9a8bafc94 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -302,6 +302,11 @@ void DivPlatformGenesis::fillStream(std::vector& stream, int sR for (size_t i=0; i=0) { + urgentWrite(0x2a,dacWrite); + dacWrite=-1; + } + while (!writes.empty()) { QueuedWrite& w=writes.front(); stream.push_back(DivDelayedWrite(i,w.addr,w.val)); From b5161a8fe61e9aba92726b0cf02fecff6b8a46e3 Mon Sep 17 00:00:00 2001 From: Electric Keet Date: Fri, 4 Aug 2023 09:11:53 -0700 Subject: [PATCH 84/87] Documentation stuff! New page for the effect list, updates to chanOsc, and links to instrument types from every "system" page. --- doc/2-interface/README.md | 1 + doc/2-interface/effect-list.md | 10 +++++ doc/2-interface/effect-list.png | Bin 0 -> 160618 bytes doc/7-systems/amiga.md | 1 + doc/7-systems/ay8910.md | 5 ++- doc/7-systems/ay8930.md | 4 ++ doc/7-systems/bubblesystem.md | 4 ++ doc/7-systems/c64.md | 4 ++ doc/7-systems/dac.md | 4 ++ doc/7-systems/es5506.md | 4 ++ doc/7-systems/fds.md | 4 ++ doc/7-systems/game-boy.md | 4 ++ doc/7-systems/genesis.md | 61 ++++++++++++++++++++++++++++ doc/7-systems/k007232.md | 4 ++ doc/7-systems/k056320.md | 4 ++ doc/7-systems/lynx.md | 4 ++ doc/7-systems/mmc5.md | 4 ++ doc/7-systems/msm5232.md | 4 ++ doc/7-systems/msm6258.md | 4 ++ doc/7-systems/msm6295.md | 9 +++- doc/7-systems/n163.md | 4 ++ doc/7-systems/namco.md | 4 ++ doc/7-systems/nes.md | 5 ++- doc/7-systems/opl.md | 4 ++ doc/7-systems/opll.md | 4 ++ doc/7-systems/opz.md | 4 ++ doc/7-systems/pce.md | 4 ++ doc/7-systems/pcspkr.md | 4 ++ doc/7-systems/pet.md | 4 ++ doc/7-systems/pokemini.md | 4 ++ doc/7-systems/pokey.md | 4 ++ doc/7-systems/pv1000.md | 4 ++ doc/7-systems/qsound.md | 4 ++ doc/7-systems/ricoh.md | 3 ++ doc/7-systems/saa1099.md | 4 ++ doc/7-systems/scc.md | 4 ++ doc/7-systems/segapcm.md | 4 ++ doc/7-systems/sm8521.md | 6 ++- doc/7-systems/sms.md | 8 +++- doc/7-systems/snes.md | 4 +- doc/7-systems/soundunit.md | 4 ++ doc/7-systems/t6w28.md | 4 ++ doc/7-systems/ted.md | 4 ++ doc/7-systems/tia.md | 6 ++- doc/7-systems/vera.md | 4 ++ doc/7-systems/vic20.md | 4 ++ doc/7-systems/virtual-boy.md | 4 ++ doc/7-systems/vrc6.md | 4 ++ doc/7-systems/wonderswan.md | 4 ++ doc/7-systems/x1-010.md | 4 ++ doc/7-systems/ym2151.md | 4 ++ doc/7-systems/ym2203.md | 6 ++- doc/7-systems/ym2608.md | 6 ++- doc/7-systems/ym2610.md | 5 ++- doc/7-systems/ym2610b.md | 6 ++- doc/7-systems/ym2612.md | 8 ++-- doc/7-systems/ymu759.md | 4 ++ doc/7-systems/ymz280b.md | 4 ++ doc/7-systems/zxbeep.md | 4 ++ doc/8-advanced/chanosc-gradient.png | Bin 165108 -> 168370 bytes doc/8-advanced/chanosc.md | 5 +++ doc/8-advanced/chanosc.png | Bin 121264 -> 124620 bytes 62 files changed, 302 insertions(+), 17 deletions(-) create mode 100644 doc/2-interface/effect-list.md create mode 100644 doc/2-interface/effect-list.png create mode 100644 doc/7-systems/genesis.md diff --git a/doc/2-interface/README.md b/doc/2-interface/README.md index cb1588dde..465d0f872 100644 --- a/doc/2-interface/README.md +++ b/doc/2-interface/README.md @@ -13,6 +13,7 @@ primary topics: - [play/edit controls](play-edit-controls.md) - [instrument/wavetable/sample list](asset-list.md) - [song information](song-info.md) +- [effect list](effect-list.md) - [pattern view](../3-pattern/README.md) - [instrument editor](../4-instrument/README.md) - [wavetable editor](../5-wave/README.md) diff --git a/doc/2-interface/effect-list.md b/doc/2-interface/effect-list.md new file mode 100644 index 000000000..1f76f5051 --- /dev/null +++ b/doc/2-interface/effect-list.md @@ -0,0 +1,10 @@ +# effect list + +![effect list window](effect-list.png) + +this window provides a list of the effects that are available. + +for more details about these effects, see [the effects page](../3-pattern/effects.md). + +- **Chip at cursor**: the currently selected chip. the list only shows available effects for this chip. +- menu button: opens a small list of effect categories. toggle each to change whether they're shown in the list. diff --git a/doc/2-interface/effect-list.png b/doc/2-interface/effect-list.png new file mode 100644 index 0000000000000000000000000000000000000000..dd5d0cc8b2185cd115bfa6864c39b3efccfd6776 GIT binary patch literal 160618 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

I42QEu8!OXD7arsPXx$w*8d!16U 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

f(?S%tsG&k=rwhG4;o9G%K=^l0@T`?jtV|3Af+- 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%0DJfSXFv{*DLl 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 From 20dc44b800dba5892971d62098a9d2ca0337cac7 Mon Sep 17 00:00:00 2001 From: Electric Keet Date: Fri, 4 Aug 2023 09:38:05 -0700 Subject: [PATCH 85/87] Teensy formatting change. None of these should be list items. It was a bad idea. --- doc/7-systems/amiga.md | 3 ++- doc/7-systems/ay8910.md | 3 ++- doc/7-systems/ay8930.md | 2 +- doc/7-systems/bubblesystem.md | 2 +- doc/7-systems/c64.md | 2 +- doc/7-systems/dac.md | 2 +- doc/7-systems/es5506.md | 2 +- doc/7-systems/fds.md | 2 +- doc/7-systems/game-boy.md | 3 ++- doc/7-systems/k007232.md | 2 +- doc/7-systems/k056320.md | 2 +- doc/7-systems/lynx.md | 2 +- doc/7-systems/mmc5.md | 2 +- doc/7-systems/msm5232.md | 2 +- doc/7-systems/msm6258.md | 2 +- doc/7-systems/msm6295.md | 3 ++- doc/7-systems/n163.md | 2 +- doc/7-systems/namco.md | 2 +- doc/7-systems/nes.md | 3 ++- doc/7-systems/opl.md | 2 +- doc/7-systems/opll.md | 2 +- doc/7-systems/opz.md | 2 +- doc/7-systems/pce.md | 2 +- doc/7-systems/pcspkr.md | 2 +- doc/7-systems/pet.md | 2 +- doc/7-systems/pokemini.md | 2 +- doc/7-systems/pokey.md | 2 +- doc/7-systems/pv1000.md | 2 +- doc/7-systems/qsound.md | 2 +- doc/7-systems/ricoh.md | 2 +- doc/7-systems/saa1099.md | 2 +- doc/7-systems/scc.md | 2 +- doc/7-systems/segapcm.md | 2 +- doc/7-systems/sm8521.md | 2 +- doc/7-systems/sms.md | 3 ++- doc/7-systems/snes.md | 3 ++- doc/7-systems/soundunit.md | 2 +- doc/7-systems/t6w28.md | 2 +- doc/7-systems/ted.md | 2 +- doc/7-systems/tia.md | 3 ++- doc/7-systems/vera.md | 2 +- doc/7-systems/vic20.md | 2 +- doc/7-systems/virtual-boy.md | 2 +- doc/7-systems/vrc6.md | 2 +- doc/7-systems/wonderswan.md | 2 +- doc/7-systems/x1-010.md | 2 +- doc/7-systems/ym2151.md | 2 +- doc/7-systems/ym2203.md | 3 ++- doc/7-systems/ym2608.md | 3 ++- doc/7-systems/ym2610.md | 3 ++- doc/7-systems/ym2610b.md | 3 ++- doc/7-systems/ym2612.md | 3 ++- doc/7-systems/ymu759.md | 2 +- doc/7-systems/ymz280b.md | 2 +- doc/7-systems/zxbeep.md | 2 +- 55 files changed, 68 insertions(+), 55 deletions(-) diff --git a/doc/7-systems/amiga.md b/doc/7-systems/amiga.md index 0d3d688c0..c40d6eed6 100644 --- a/doc/7-systems/amiga.md +++ b/doc/7-systems/amiga.md @@ -18,7 +18,8 @@ imported MOD files use this chip, and will set A-4 tuning to 436. # info -- this chip uses the [Generic Sample](../4-instrument/amiga.md) instrument editor. +this chip uses the [Generic Sample](../4-instrument/amiga.md) instrument editor. + - the maximum rate for sample playback is technically 31469Hz but anything higher than 28867Hz will sound glitchy on hardware. - sample lengths and loop will be set to an even number. - samples can't be longer than 131070. \ No newline at end of file diff --git a/doc/7-systems/ay8910.md b/doc/7-systems/ay8910.md index 6d1838bd4..8c88d704e 100644 --- a/doc/7-systems/ay8910.md +++ b/doc/7-systems/ay8910.md @@ -49,7 +49,8 @@ as of Furnace 0.6pre7, AY-3-8910 supports software sample playback, where all 3 # info -- this chip uses the [AY-3-8910](../4-instrument/ay8910.md) instrument editor. +this chip uses the [AY-3-8910](../4-instrument/ay8910.md) instrument editor. + ## AY derivative modes diff --git a/doc/7-systems/ay8930.md b/doc/7-systems/ay8930.md index ef7121372..545e8fd0b 100644 --- a/doc/7-systems/ay8930.md +++ b/doc/7-systems/ay8930.md @@ -58,4 +58,4 @@ as of Furnace 0.6pre7, AY8930 supports software PCM, where all 3 channels can pl # info -- this chip uses the [AY8930](../4-instrument/8930.md) instrument editor. \ No newline at end of file +this chip uses the [AY8930](../4-instrument/8930.md) instrument editor. diff --git a/doc/7-systems/bubblesystem.md b/doc/7-systems/bubblesystem.md index 0ead7540a..946fd61d8 100644 --- a/doc/7-systems/bubblesystem.md +++ b/doc/7-systems/bubblesystem.md @@ -14,4 +14,4 @@ Furnace emulates this configuration as a "chip" with 32×16 wavetables. # info -- this chip uses the [Konami SCC/ Bubble System WSG](../4-instrument/scc.md) instrument editor. \ No newline at end of file +this chip uses the [Konami SCC/ Bubble System WSG](../4-instrument/scc.md) instrument editor. diff --git a/doc/7-systems/c64.md b/doc/7-systems/c64.md index e001f557b..04035df58 100644 --- a/doc/7-systems/c64.md +++ b/doc/7-systems/c64.md @@ -60,4 +60,4 @@ two versions of aforementioned chip exist - 6581 (original chip) and 8580 (impro # info -- this chip uses the [C64](../4-instrument/c64.md) instrument editor. \ No newline at end of file +this chip uses the [C64](../4-instrument/c64.md) instrument editor. diff --git a/doc/7-systems/dac.md b/doc/7-systems/dac.md index 118c4b25e..3c6445db9 100644 --- a/doc/7-systems/dac.md +++ b/doc/7-systems/dac.md @@ -10,4 +10,4 @@ none yet. # info -- this chip uses the [Generic Sample](../4-instrument/amiga.md) instrument editor. \ No newline at end of file +this chip uses the [Generic Sample](../4-instrument/amiga.md) instrument editor. diff --git a/doc/7-systems/es5506.md b/doc/7-systems/es5506.md index cc476cef2..e36eff1c5 100644 --- a/doc/7-systems/es5506.md +++ b/doc/7-systems/es5506.md @@ -42,4 +42,4 @@ it supports a whopping 32 channels of 16-bit PCM and: # info -- this chip uses the [ES5506](../4-instrument/es5506.md) instrument editor. \ No newline at end of file +this chip uses the [ES5506](../4-instrument/es5506.md) instrument editor. diff --git a/doc/7-systems/fds.md b/doc/7-systems/fds.md index 411f2b47f..f26ccef9b 100644 --- a/doc/7-systems/fds.md +++ b/doc/7-systems/fds.md @@ -28,4 +28,4 @@ it also offers an additional 6-bit, 64-byte wavetable sound channel with (somewh # info -- this chip uses the [FDS](../4-instrument/fds.md) instrument editor. \ No newline at end of file +this chip uses the [FDS](../4-instrument/fds.md) instrument editor. diff --git a/doc/7-systems/game-boy.md b/doc/7-systems/game-boy.md index fae7e288d..b2b624dba 100644 --- a/doc/7-systems/game-boy.md +++ b/doc/7-systems/game-boy.md @@ -23,7 +23,8 @@ with stereo sound, two pulse channels, a wave channel and a noise channel, it pa # info -- this chip uses the [Game Boy](../4-instrument/game-boy.md) instrument editor. +this chip uses the [Game Boy](../4-instrument/game-boy.md) instrument editor. + # links diff --git a/doc/7-systems/k007232.md b/doc/7-systems/k007232.md index 3da1d3af0..f7e9d69c1 100644 --- a/doc/7-systems/k007232.md +++ b/doc/7-systems/k007232.md @@ -12,4 +12,4 @@ it has 7 bit digital output per each channel and no volume register on chip, so # info -- this chip uses the [K007232](../4-instrument/k007232.md) instrument editor. \ No newline at end of file +this chip uses the [K007232](../4-instrument/k007232.md) instrument editor. diff --git a/doc/7-systems/k056320.md b/doc/7-systems/k056320.md index a3a8020f3..9e2e162f0 100644 --- a/doc/7-systems/k056320.md +++ b/doc/7-systems/k056320.md @@ -10,4 +10,4 @@ the 056320 is a sample-based chip that featured in a number of Konami arcade gam # info -- this chip uses the [K056320](../4-instrument/k056320.md) instrument editor. \ No newline at end of file +this chip uses the [K056320](../4-instrument/k056320.md) instrument editor. diff --git a/doc/7-systems/lynx.md b/doc/7-systems/lynx.md index 6e17b1a16..e3bb087db 100644 --- a/doc/7-systems/lynx.md +++ b/doc/7-systems/lynx.md @@ -20,4 +20,4 @@ the Atari Lynx has a 6502-based CPU with a sound part (this chip is known as MIK # info -- this chip uses the [Atari Lynx](../4-instrument/lynx.md) instrument editor. \ No newline at end of file +this chip uses the [Atari Lynx](../4-instrument/lynx.md) instrument editor. diff --git a/doc/7-systems/mmc5.md b/doc/7-systems/mmc5.md index 1531381d7..90d8c5696 100644 --- a/doc/7-systems/mmc5.md +++ b/doc/7-systems/mmc5.md @@ -13,4 +13,4 @@ additionally, it offers an 8-bit DAC which can be used to play samples. only one # info -- this chip uses the [NES](../4-instrument/nes.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. \ No newline at end of file +this chip uses the [NES](../4-instrument/nes.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/msm5232.md b/doc/7-systems/msm5232.md index edcd281cc..17ee9ee03 100644 --- a/doc/7-systems/msm5232.md +++ b/doc/7-systems/msm5232.md @@ -27,4 +27,4 @@ Furnace implements this chip in a way that allows the following features: # info -- this chip uses the [MSM5232](../4-instrument/msm5232.md) instrument editor. \ No newline at end of file +this chip uses the [MSM5232](../4-instrument/msm5232.md) instrument editor. diff --git a/doc/7-systems/msm6258.md b/doc/7-systems/msm6258.md index 1d56e756c..9cabf1405 100644 --- a/doc/7-systems/msm6258.md +++ b/doc/7-systems/msm6258.md @@ -21,4 +21,4 @@ MSM6258 is an extremely basic ADPCM sound codec. it has no variable frequency ra # info -- this chip uses the [MSM6258](../4-instrument/msm6258.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. \ No newline at end of file +this chip uses the [MSM6258](../4-instrument/msm6258.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/msm6295.md b/doc/7-systems/msm6295.md index 3c5c26230..9906de6b1 100644 --- a/doc/7-systems/msm6295.md +++ b/doc/7-systems/msm6295.md @@ -9,7 +9,8 @@ an upgrade from 6258 - it provides 4 ADPCM channels, at max 32 KHz (still no var # info -- this chip uses the [MSM6295](../4-instrument/msm6295.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. +this chip uses the [MSM6295](../4-instrument/msm6295.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. + ## chip clock rates diff --git a/doc/7-systems/n163.md b/doc/7-systems/n163.md index f99465651..af1bffbee 100644 --- a/doc/7-systems/n163.md +++ b/doc/7-systems/n163.md @@ -41,4 +41,4 @@ if the waveform changes (e.g. ins change, wave macro or wave synth), or the **lo # info -- this chip uses the [Namco 163](../4-instrument/n163.md) instrument editor. \ No newline at end of file +this chip uses the [Namco 163](../4-instrument/n163.md) instrument editor. diff --git a/doc/7-systems/namco.md b/doc/7-systems/namco.md index 21cfa7b28..ffa5817b9 100644 --- a/doc/7-systems/namco.md +++ b/doc/7-systems/namco.md @@ -11,4 +11,4 @@ everything starts with Namco WSG, which is a simple 3-channel wavetable with no # info -- this chip uses the [Namco WSG](../4-instrument/namco.md) instrument editor. \ No newline at end of file +this chip uses the [Namco WSG](../4-instrument/namco.md) instrument editor. diff --git a/doc/7-systems/nes.md b/doc/7-systems/nes.md index 4c11d3a27..28df60676 100644 --- a/doc/7-systems/nes.md +++ b/doc/7-systems/nes.md @@ -59,7 +59,8 @@ also known as Famicom. it is a five-channel sound generator: first two channels # info -- this chip uses the [NES](../4-instrument/nes.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. +this chip uses the [NES](../4-instrument/nes.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. + ## short noise frequencies (NTSC) diff --git a/doc/7-systems/opl.md b/doc/7-systems/opl.md index 6dfdc04bf..ac82ded0e 100644 --- a/doc/7-systems/opl.md +++ b/doc/7-systems/opl.md @@ -81,4 +81,4 @@ afterwards everyone moved to Windows and software mixed PCM streaming... # info -- this chip uses the [FM (OPL)](../4-instrument/fm-opl.md) instrument editor. \ No newline at end of file +this chip uses the [FM (OPL)](../4-instrument/fm-opl.md) instrument editor. diff --git a/doc/7-systems/opll.md b/doc/7-systems/opll.md index 91295e9ec..92a81490b 100644 --- a/doc/7-systems/opll.md +++ b/doc/7-systems/opll.md @@ -68,4 +68,4 @@ the YM2413 is equipped with the following features: # info -- this chip uses the [FM (OPLL)](../4-instrument/fm-opll.md) instrument editor. \ No newline at end of file +this chip uses the [FM (OPLL)](../4-instrument/fm-opll.md) instrument editor. diff --git a/doc/7-systems/opz.md b/doc/7-systems/opz.md index df49c2ea6..c4b0413a9 100644 --- a/doc/7-systems/opz.md +++ b/doc/7-systems/opz.md @@ -116,4 +116,4 @@ no plans have been made for TX81Z MIDI passthrough, because: # info -- this chip uses the [FM (OPZ)](../4-instrument/opz.md) instrument editor. \ No newline at end of file +this chip uses the [FM (OPZ)](../4-instrument/opz.md) instrument editor. diff --git a/doc/7-systems/pce.md b/doc/7-systems/pce.md index f4953787f..03727cfb8 100644 --- a/doc/7-systems/pce.md +++ b/doc/7-systems/pce.md @@ -23,4 +23,4 @@ furthermore, it has some PCM and LFO! # info -- this chip uses the [PC Engine](../4-instrument/pce.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. \ No newline at end of file +this chip uses the [PC Engine](../4-instrument/pce.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/pcspkr.md b/doc/7-systems/pcspkr.md index 59f2f4663..d84181bfe 100644 --- a/doc/7-systems/pcspkr.md +++ b/doc/7-systems/pcspkr.md @@ -32,4 +32,4 @@ ha! effects... # info -- this chip uses the [Beeper](../4-instrument/beeper.md) instrument editor. \ No newline at end of file +this chip uses the [Beeper](../4-instrument/beeper.md) instrument editor. diff --git a/doc/7-systems/pet.md b/doc/7-systems/pet.md index 9d3188da2..e99e17925 100644 --- a/doc/7-systems/pet.md +++ b/doc/7-systems/pet.md @@ -12,4 +12,4 @@ some of these didn't even have sound... # info -- this chip uses the [PET](../4-instrument/pet.md) instrument editor. \ No newline at end of file +this chip uses the [PET](../4-instrument/pet.md) instrument editor. diff --git a/doc/7-systems/pokemini.md b/doc/7-systems/pokemini.md index f82d2ba50..7633f27a2 100644 --- a/doc/7-systems/pokemini.md +++ b/doc/7-systems/pokemini.md @@ -8,4 +8,4 @@ none. # info -- this chip uses the [Pokémon Mini/QuadTone](../4-instrument/quadtone.md) instrument editor. \ No newline at end of file +this chip uses the [Pokémon Mini/QuadTone](../4-instrument/quadtone.md) instrument editor. diff --git a/doc/7-systems/pokey.md b/doc/7-systems/pokey.md index e92417edb..31832e580 100644 --- a/doc/7-systems/pokey.md +++ b/doc/7-systems/pokey.md @@ -38,4 +38,4 @@ a sound and input chip developed by Atari for their 8-bit computers (Atari 400, # info -- this chip uses the [POKEY](../4-instrument/pokey.md) instrument editor. \ No newline at end of file +this chip uses the [POKEY](../4-instrument/pokey.md) instrument editor. diff --git a/doc/7-systems/pv1000.md b/doc/7-systems/pv1000.md index 2ac6e953e..97cb617b5 100644 --- a/doc/7-systems/pv1000.md +++ b/doc/7-systems/pv1000.md @@ -8,4 +8,4 @@ released only in Japan, this console was pulled after only a few weeks on the ma # info -- this chip uses the [PV-1000](../4-instrument/pv1000.md) instrument editor. \ No newline at end of file +this chip uses the [PV-1000](../4-instrument/pv1000.md) instrument editor. diff --git a/doc/7-systems/qsound.md b/doc/7-systems/qsound.md index 76391b10b..6aa57d365 100644 --- a/doc/7-systems/qsound.md +++ b/doc/7-systems/qsound.md @@ -20,4 +20,4 @@ there are also 3 ADPCM channels. ADPCM samples are fixed to 8012 Hz. # info -- this chip uses the [QSound](../4-instrument/qsound.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. \ No newline at end of file +this chip uses the [QSound](../4-instrument/qsound.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/ricoh.md b/doc/7-systems/ricoh.md index 8a7a22287..1c3695cad 100644 --- a/doc/7-systems/ricoh.md +++ b/doc/7-systems/ricoh.md @@ -8,4 +8,4 @@ none so far. # info -- this chip uses the [RF5C68](../4-instrument/ricoh.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. \ No newline at end of file +this chip uses the [RF5C68](../4-instrument/ricoh.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/saa1099.md b/doc/7-systems/saa1099.md index 2c6f72bb0..8036ec71e 100644 --- a/doc/7-systems/saa1099.md +++ b/doc/7-systems/saa1099.md @@ -30,4 +30,4 @@ this was used by the Game Blaster and SAM Coupé. it's pretty similar to the AY- # info -- this chip uses the [SAA1099](../4-instrument/saa.md) instrument editor. \ No newline at end of file +this chip uses the [SAA1099](../4-instrument/saa.md) instrument editor. diff --git a/doc/7-systems/scc.md b/doc/7-systems/scc.md index 3d7cdde23..8e5b01475 100644 --- a/doc/7-systems/scc.md +++ b/doc/7-systems/scc.md @@ -12,4 +12,4 @@ the SCC+ fixes this issue though (while being compatible with SCC games). # info -- this chip uses the [Konami SCC/Bubble System WSG](../4-instrument/scc.md) instrument editor. \ No newline at end of file +this chip uses the [Konami SCC/Bubble System WSG](../4-instrument/scc.md) instrument editor. diff --git a/doc/7-systems/segapcm.md b/doc/7-systems/segapcm.md index 0fc92f0fe..296f2a884 100644 --- a/doc/7-systems/segapcm.md +++ b/doc/7-systems/segapcm.md @@ -18,4 +18,4 @@ Furnace also has a five channel version of this chip, but it only exists for Def # info -- this chip uses the [SegaPCM](../4-instrument/segapcm.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. \ No newline at end of file +this chip uses the [SegaPCM](../4-instrument/segapcm.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/sm8521.md b/doc/7-systems/sm8521.md index e670116d5..c29ff79ae 100644 --- a/doc/7-systems/sm8521.md +++ b/doc/7-systems/sm8521.md @@ -24,4 +24,4 @@ the sound-related features and quirks of the SM8521 are as follows: # info -- this chip uses the [SM8521](../4-instrument/sm8521.md) instrument editor. \ No newline at end of file +this chip uses the [SM8521](../4-instrument/sm8521.md) instrument editor. diff --git a/doc/7-systems/sms.md b/doc/7-systems/sms.md index 8ec6135f0..36d13976d 100644 --- a/doc/7-systems/sms.md +++ b/doc/7-systems/sms.md @@ -17,7 +17,8 @@ the original iteration of the SN76489 used in the TI-99/4A computer, the SN94624 # info -- this chip uses the [SN76489/Sega PSG](../4-instrument/psg.md) instrument editor. +this chip uses the [SN76489/Sega PSG](../4-instrument/psg.md) instrument editor. + ## SN7 versions SN7 was extremely popular due to low cost. Therefore, it was cloned and copied to no end, often with minor differences between each other. Furnace supports several of these: diff --git a/doc/7-systems/snes.md b/doc/7-systems/snes.md index e12ef8fa0..9c57d7526 100644 --- a/doc/7-systems/snes.md +++ b/doc/7-systems/snes.md @@ -69,7 +69,8 @@ Furnace also allows the SNES to use wavetables (and the wavetable synthesizer) i # info -- this chip uses the [SNES](../4-instrument/snes.md) instrument editor. +this chip uses the [SNES](../4-instrument/snes.md) instrument editor. + ## ADSR diff --git a/doc/7-systems/soundunit.md b/doc/7-systems/soundunit.md index 378d9303c..00706c0f1 100644 --- a/doc/7-systems/soundunit.md +++ b/doc/7-systems/soundunit.md @@ -57,4 +57,4 @@ it has the following capabilities: # info -- this chip uses the [Sound Unit](../4-instrument/soundunit.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. \ No newline at end of file +this chip uses the [Sound Unit](../4-instrument/soundunit.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/t6w28.md b/doc/7-systems/t6w28.md index accd56675..26d7d977c 100644 --- a/doc/7-systems/t6w28.md +++ b/doc/7-systems/t6w28.md @@ -12,4 +12,4 @@ this chip was used in Neo Geo Pocket. # info -- this chip uses the [T6W28](../4-instrument/t6w28.md) instrument editor. \ No newline at end of file +this chip uses the [T6W28](../4-instrument/t6w28.md) instrument editor. diff --git a/doc/7-systems/ted.md b/doc/7-systems/ted.md index a8c5cf48f..4333fcea6 100644 --- a/doc/7-systems/ted.md +++ b/doc/7-systems/ted.md @@ -11,4 +11,4 @@ none so far. # info -- this chip uses the [TED](../4-instrument/ted.md) instrument editor. \ No newline at end of file +this chip uses the [TED](../4-instrument/ted.md) instrument editor. diff --git a/doc/7-systems/tia.md b/doc/7-systems/tia.md index b56b97801..8b89616d4 100644 --- a/doc/7-systems/tia.md +++ b/doc/7-systems/tia.md @@ -31,7 +31,8 @@ Furnace isn't complete without this one... # info -- this chip uses the [TIA](../4-instrument/tia.md) instrument editor. +this chip uses the [TIA](../4-instrument/tia.md) instrument editor. + - pitch number can be used for absolute notes in arpeggio macros. diff --git a/doc/7-systems/vera.md b/doc/7-systems/vera.md index 2d684b43f..d4189412a 100644 --- a/doc/7-systems/vera.md +++ b/doc/7-systems/vera.md @@ -18,4 +18,4 @@ currently Furnace does not support the PCM channel's stereo mode, though (except # info -- this chip uses the [VERA](../4-instrument/vera.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. \ No newline at end of file +this chip uses the [VERA](../4-instrument/vera.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/vic20.md b/doc/7-systems/vic20.md index 2177d661c..6d5a9bd41 100644 --- a/doc/7-systems/vic20.md +++ b/doc/7-systems/vic20.md @@ -19,4 +19,4 @@ these channels are not referred as "square" wave channels since a technique to p # info -- this chip uses the [VIC](../4-instrument/vic.md) instrument editor. \ No newline at end of file +this chip uses the [VIC](../4-instrument/vic.md) instrument editor. diff --git a/doc/7-systems/virtual-boy.md b/doc/7-systems/virtual-boy.md index 327238d5d..8dc11da98 100644 --- a/doc/7-systems/virtual-boy.md +++ b/doc/7-systems/virtual-boy.md @@ -44,4 +44,4 @@ additionally, channel 5 offers a modulation/sweep unit. the former is similar to # info -- this chip uses the [Virtual Boy](../4-instrument/virtual-boy.md) instrument editor. \ No newline at end of file +this chip uses the [Virtual Boy](../4-instrument/virtual-boy.md) instrument editor. diff --git a/doc/7-systems/vrc6.md b/doc/7-systems/vrc6.md index 35b402d39..ea85469af 100644 --- a/doc/7-systems/vrc6.md +++ b/doc/7-systems/vrc6.md @@ -19,4 +19,4 @@ these effects only are effective in the pulse channels. # info -- this chip uses the [VRC](../4-instrument/vrc6.md), [VRC (saw)](../4-instrument/vrc6.md), and [Generic Sample](../4-instrument/amiga.md) instrument editors. \ No newline at end of file +this chip uses the [VRC](../4-instrument/vrc6.md), [VRC (saw)](../4-instrument/vrc6.md), and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/wonderswan.md b/doc/7-systems/wonderswan.md index c3f73ddc8..e386461b7 100644 --- a/doc/7-systems/wonderswan.md +++ b/doc/7-systems/wonderswan.md @@ -22,4 +22,4 @@ it has 4 wavetable channels. some of them have additional capabilities: # info -- this chip uses the [WonderSwan](../4-instrument/wonderswan.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. \ No newline at end of file +this chip uses the [WonderSwan](../4-instrument/wonderswan.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/x1-010.md b/doc/7-systems/x1-010.md index 9bc757447..7e0bea875 100644 --- a/doc/7-systems/x1-010.md +++ b/doc/7-systems/x1-010.md @@ -48,4 +48,4 @@ in Furnace, you can enable the envelope shape split mode. when it is set, its wa # info -- this chip uses the [X1-010](../4-instrument/x1_010.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. \ No newline at end of file +this chip uses the [X1-010](../4-instrument/x1_010.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/ym2151.md b/doc/7-systems/ym2151.md index c08df4250..58b4fd1f7 100644 --- a/doc/7-systems/ym2151.md +++ b/doc/7-systems/ym2151.md @@ -71,4 +71,4 @@ in most arcade boards the chip was used in combination with a PCM chip, like [Se # info -- this chip uses the [FM (OPM)](../4-instrument/fm-opm.md) instrument editor. \ No newline at end of file +this chip uses the [FM (OPM)](../4-instrument/fm-opm.md) instrument editor. diff --git a/doc/7-systems/ym2203.md b/doc/7-systems/ym2203.md index 31ebee605..f8fd41fe9 100644 --- a/doc/7-systems/ym2203.md +++ b/doc/7-systems/ym2203.md @@ -103,7 +103,8 @@ several variants of this chip were released as well, with more features. # info -- this chip uses the [FM (OPN)](../4-instrument/fm-opn.md) and [AY-3-8910/SSG](../4-instrument/ay8910.md) instrument editor. +this chip uses the [FM (OPN)](../4-instrument/fm-opn.md) and [AY-3-8910/SSG](../4-instrument/ay8910.md) instrument editor. + ## extended channel 3 in ExtCh mode, channel 3 is split into one column for each of its four operators and feedback are shared. the frequency of each operator may be controlled independently with notes and effects. this can be used for more polyphony or more complex sounds. diff --git a/doc/7-systems/ym2608.md b/doc/7-systems/ym2608.md index 8a2588b22..51ea15d90 100644 --- a/doc/7-systems/ym2608.md +++ b/doc/7-systems/ym2608.md @@ -103,7 +103,8 @@ the YM2610 (OPNB) and YM2610B chips are very similar to this one, but the built- # info -- this chip uses the [FM (OPN)](../4-instrument/fm-opn.md), [Generic Sample](../4-instrument/amiga.md), [AY-3-8910/SSG](../4-instrument/ay8910.md), [ADPCM-A](../4-instrument/adpcm-a.md), and [ADPCM-B](../4-instrument/adpcm-b.md) instrument editors. +this chip uses the [FM (OPN)](../4-instrument/fm-opn.md), [Generic Sample](../4-instrument/amiga.md), [AY-3-8910/SSG](../4-instrument/ay8910.md), [ADPCM-A](../4-instrument/adpcm-a.md), and [ADPCM-B](../4-instrument/adpcm-b.md) instrument editors. + ## extended channel 3 in ExtCh mode, channel 3 is split into one column for each of its four operators. feedback and LFO levels are shared. the frequency of each operator may be controlled independently with notes and effects. this can be used for more polyphony or more complex sounds. diff --git a/doc/7-systems/ym2610.md b/doc/7-systems/ym2610.md index ef0a760df..b56df33d7 100644 --- a/doc/7-systems/ym2610.md +++ b/doc/7-systems/ym2610.md @@ -100,7 +100,8 @@ its soundchip is a 4-in-1: 4ch 4-op FM, YM2149 (AY-3-8910 clone) and [2 differen # info -- this chip uses the [FM (OPN)](../4-instrument/fm-opn.md), [Generic Sample](../4-instrument/amiga.md), [AY-3-8910/SSG](../4-instrument/ay8910.md), [ADPCM-A](../4-instrument/adpcm-a.md), and [ADPCM-B](../4-instrument/adpcm-b.md) instrument editors. +this chip uses the [FM (OPN)](../4-instrument/fm-opn.md), [Generic Sample](../4-instrument/amiga.md), [AY-3-8910/SSG](../4-instrument/ay8910.md), [ADPCM-A](../4-instrument/adpcm-a.md), and [ADPCM-B](../4-instrument/adpcm-b.md) instrument editors. + ## extended channel 2 in ExtCh mode, channel 2 is split into one column for each of its four operators. feedback and LFO levels are shared. the frequency of each operator may be controlled independently with notes and effects. this can be used for more polyphony or more complex sounds. diff --git a/doc/7-systems/ym2610b.md b/doc/7-systems/ym2610b.md index ad592e495..a670cfc2c 100644 --- a/doc/7-systems/ym2610b.md +++ b/doc/7-systems/ym2610b.md @@ -99,7 +99,8 @@ it is backward compatible with the original chip. # info -- this chip uses the [FM (OPN)](../4-instrument/fm-opn.md), [Generic Sample](../4-instrument/amiga.md), [AY-3-8910/SSG](../4-instrument/ay8910.md), [ADPCM-A](../4-instrument/adpcm-a.md), and [ADPCM-B](../4-instrument/adpcm-b.md) instrument editors. +this chip uses the [FM (OPN)](../4-instrument/fm-opn.md), [Generic Sample](../4-instrument/amiga.md), [AY-3-8910/SSG](../4-instrument/ay8910.md), [ADPCM-A](../4-instrument/adpcm-a.md), and [ADPCM-B](../4-instrument/adpcm-b.md) instrument editors. + ## extended channel 3 diff --git a/doc/7-systems/ym2612.md b/doc/7-systems/ym2612.md index 4ea666ca9..b245b1ac2 100644 --- a/doc/7-systems/ym2612.md +++ b/doc/7-systems/ym2612.md @@ -69,7 +69,8 @@ as of Furnace 0.6pre5, Furnace offers DualPCM, a Z80 driver that splits channel # info -- this chip uses the [FM (OPN)](../4-instrument/fm-opn.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. +this chip uses the [FM (OPN)](../4-instrument/fm-opn.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. + ## extended channel 3 diff --git a/doc/7-systems/ymu759.md b/doc/7-systems/ymu759.md index c9156afa9..956b37aca 100644 --- a/doc/7-systems/ymu759.md +++ b/doc/7-systems/ymu759.md @@ -18,4 +18,4 @@ hey, at least it was the spark that ignited the idea of DefleMask. # info -- this chip uses the [FM (OPL)](../4-instrument/fm-opl.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. \ No newline at end of file +this chip uses the [FM (OPL)](../4-instrument/fm-opl.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/ymz280b.md b/doc/7-systems/ymz280b.md index 693b8c1d4..982df8d25 100644 --- a/doc/7-systems/ymz280b.md +++ b/doc/7-systems/ymz280b.md @@ -10,4 +10,4 @@ none so far. # info -- this chip uses the [YMZ280B](../4-instrument/ymz280b.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. \ No newline at end of file +this chip uses the [YMZ280B](../4-instrument/ymz280b.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors. diff --git a/doc/7-systems/zxbeep.md b/doc/7-systems/zxbeep.md index 7b5061438..183beb4fc 100644 --- a/doc/7-systems/zxbeep.md +++ b/doc/7-systems/zxbeep.md @@ -17,4 +17,4 @@ not really - very soon talented programmers found out ways to output much more t # info -- this chip uses the [Beeper](../4-instrument/beeper.md), [Generic Sample](../4-instrument/amiga.md), and [Pokémon Mini/QuadTone](../4-instrument/quadtone.md) instrument editors. \ No newline at end of file +this chip uses the [Beeper](../4-instrument/beeper.md), [Generic Sample](../4-instrument/amiga.md), and [Pokémon Mini/QuadTone](../4-instrument/quadtone.md) instrument editors. From 2444d2f58ae3ddcf0e82946f1a7064f00f751338 Mon Sep 17 00:00:00 2001 From: Electric Keet Date: Fri, 4 Aug 2023 16:24:42 -0700 Subject: [PATCH 86/87] Minor adjustments. --- doc/2-interface/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/2-interface/README.md b/doc/2-interface/README.md index 465d0f872..ae2768f2e 100644 --- a/doc/2-interface/README.md +++ b/doc/2-interface/README.md @@ -13,7 +13,7 @@ primary topics: - [play/edit controls](play-edit-controls.md) - [instrument/wavetable/sample list](asset-list.md) - [song information](song-info.md) -- [effect list](effect-list.md) +- [effect list window](effect-list.md) - [pattern view](../3-pattern/README.md) - [instrument editor](../4-instrument/README.md) - [wavetable editor](../5-wave/README.md) From 13cfef02a718894511088d10ad589ad1bdd3050a Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 4 Aug 2023 22:16:53 -0500 Subject: [PATCH 87/87] asdf --- doc/2-interface/README.md | 2 +- doc/2-interface/{effect-list.md => effect-list-window.md} | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) rename doc/2-interface/{effect-list.md => effect-list-window.md} (74%) diff --git a/doc/2-interface/README.md b/doc/2-interface/README.md index ae2768f2e..3d6067aff 100644 --- a/doc/2-interface/README.md +++ b/doc/2-interface/README.md @@ -13,7 +13,7 @@ primary topics: - [play/edit controls](play-edit-controls.md) - [instrument/wavetable/sample list](asset-list.md) - [song information](song-info.md) -- [effect list window](effect-list.md) +- [effect list window](effect-list-window.md) - [pattern view](../3-pattern/README.md) - [instrument editor](../4-instrument/README.md) - [wavetable editor](../5-wave/README.md) diff --git a/doc/2-interface/effect-list.md b/doc/2-interface/effect-list-window.md similarity index 74% rename from doc/2-interface/effect-list.md rename to doc/2-interface/effect-list-window.md index 1f76f5051..28a1c313c 100644 --- a/doc/2-interface/effect-list.md +++ b/doc/2-interface/effect-list-window.md @@ -1,10 +1,10 @@ -# effect list +# effect list window + +(for more details about these effects, see [the effects page](../3-pattern/effects.md)) ![effect list window](effect-list.png) this window provides a list of the effects that are available. -for more details about these effects, see [the effects page](../3-pattern/effects.md). - - **Chip at cursor**: the currently selected chip. the list only shows available effects for this chip. - menu button: opens a small list of effect categories. toggle each to change whether they're shown in the list.

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�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 eZ6yJM&xkUXUvuFky*+>&2OXU literal 165108 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