diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index 13425266..da325ff6 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -999,9 +999,21 @@ void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsi if (s->depth==8) samp_temp<<=8; blip_add_delta(samp_bb,i,samp_temp-samp_prevSample); samp_prevSample=samp_temp; + + if (sPreview.pos>=s->rendLength) { + if (s->loopStart>=0 && s->loopStart<(int)s->rendLength) { + sPreview.pos=s->loopStart; + } + } } - if (sPreview.pos>=s->rendLength) sPreview.sample=-1; + if (sPreview.pos>=s->rendLength) { + if (s->loopStart>=0 && s->loopStart<(int)s->rendLength) { + sPreview.pos=s->loopStart; + } else { + sPreview.sample=-1; + } + } } else if (sPreview.wave>=0 && sPreview.wave<(int)song.wave.size()) { DivWavetable* wave=song.wave[sPreview.wave]; for (size_t i=0; ipreviewSample(curSample); } + ImGui::SameLine(); + if (ImGui::Button(ICON_FA_VOLUME_OFF "##StopSampleL")) { + e->stopSamplePreview(); + } ImGui::Separator(); for (int i=0; i<(int)e->song.sample.size(); i++) { DivSample* sample=e->song.sample[i]; @@ -2108,6 +2112,10 @@ void FurnaceGUI::drawSampleEdit() { if (ImGui::Button(ICON_FA_VOLUME_UP "##PreviewSample")) { e->previewSample(curSample); } + ImGui::SameLine(); + if (ImGui::Button(ICON_FA_VOLUME_OFF "##StopSample")) { + e->stopSamplePreview(); + } ImGui::Separator(); bool considerations=false; ImGui::Text("notes:");