From 6492eeff569542aac183bb21a673ebdbca5dbbc8 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 23 Mar 2022 16:39:08 -0500 Subject: [PATCH] GUI: proper sample errors --- src/engine/engine.cpp | 10 ++++++---- src/engine/engine.h | 2 +- src/gui/gui.cpp | 7 +++++-- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index fb11f1df6..a634bd3c2 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -2142,18 +2142,20 @@ int DivEngine::addSample() { return sampleCount; } -bool DivEngine::addSampleFromFile(const char* path) { +int DivEngine::addSampleFromFile(const char* path) { isBusy.lock(); SF_INFO si; SNDFILE* f=sf_open(path,SFM_READ,&si); if (f==NULL) { isBusy.unlock(); - return false; + lastError=fmt::sprintf("could not open file! (%s)",sf_error_number(sf_error(NULL))); + return -1; } - if (si.frames>1000000) { + if (si.frames>16777215) { + lastError="this sample is too big! max sample size is 16777215."; sf_close(f); isBusy.unlock(); - return false; + return -1; } short* buf=new short[si.channels*si.frames]; if (sf_readf_short(f,buf,si.frames)!=si.frames) { diff --git a/src/engine/engine.h b/src/engine/engine.h index 911a33c7c..af4793324 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -489,7 +489,7 @@ class DivEngine { int addSample(); // add sample from file - bool addSampleFromFile(const char* path); + int addSampleFromFile(const char* path); // delete sample void delSample(int index); diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 9f869e57d..7cbf10970 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -2269,8 +2269,11 @@ bool FurnaceGUI::loop() { } break; case GUI_FILE_SAMPLE_OPEN: - e->addSampleFromFile(copyOfName.c_str()); - MARK_MODIFIED; + if (e->addSampleFromFile(copyOfName.c_str())==-1) { + showError(e->getLastError()); + } else { + MARK_MODIFIED; + } break; case GUI_FILE_SAMPLE_SAVE: if (curSample>=0 && curSample<(int)e->song.sample.size()) {