diff --git a/src/engine/engine.h b/src/engine/engine.h index a5b73b2ba..b12bc926c 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -954,7 +954,7 @@ class DivEngine { DivSample* sampleFromFile(const char* path); // get raw sample - DivSample* sampleFromFileRaw(const char* path, DivSampleDepth depth, int channels, bool bigEndian, bool unsign, bool swapNibbles); + DivSample* sampleFromFileRaw(const char* path, DivSampleDepth depth, int channels, bool bigEndian, bool unsign, bool swapNibbles, int rate); // delete sample void delSample(int index); diff --git a/src/engine/fileOpsSample.cpp b/src/engine/fileOpsSample.cpp index 4a44d0192..55969df33 100644 --- a/src/engine/fileOpsSample.cpp +++ b/src/engine/fileOpsSample.cpp @@ -302,7 +302,7 @@ DivSample* DivEngine::sampleFromFile(const char* path) { #endif } -DivSample* DivEngine::sampleFromFileRaw(const char* path, DivSampleDepth depth, int channels, bool bigEndian, bool unsign, bool swapNibbles) { +DivSample* DivEngine::sampleFromFileRaw(const char* path, DivSampleDepth depth, int channels, bool bigEndian, bool unsign, bool swapNibbles, int rate) { if (song.sample.size()>=256) { lastError="too many samples!"; return NULL; @@ -420,8 +420,8 @@ DivSample* DivEngine::sampleFromFileRaw(const char* path, DivSampleDepth depth, return NULL; } - sample->rate=32000; - sample->centerRate=32000; + sample->rate=rate; + sample->centerRate=rate; sample->depth=depth; sample->init(samples); diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index b8da63237..a3d2690e5 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -5988,6 +5988,15 @@ bool FurnaceGUI::loop() { pendingRawSampleBigEndian=false; } + ImGui::AlignTextToFramePadding(); + ImGui::Text("Sample rate"); + ImGui::SameLine(); + ImGui::SetNextItemWidth(120.0f*dpiScale); + if (ImGui::InputInt("##RSRate",&pendingRawSampleRate,100,1000)) { + if (pendingRawSampleRate<100) pendingRawSampleRate=100; + if (pendingRawSampleRate>384000) pendingRawSampleRate=384000; + } + if (pendingRawSampleDepth==DIV_SAMPLE_DEPTH_8BIT || pendingRawSampleDepth==DIV_SAMPLE_DEPTH_16BIT) { ImGui::AlignTextToFramePadding(); ImGui::Text("Channels"); @@ -6033,7 +6042,7 @@ bool FurnaceGUI::loop() { } if (ImGui::Button("OK")) { - DivSample* s=e->sampleFromFileRaw(pendingRawSample.c_str(),(DivSampleDepth)pendingRawSampleDepth,pendingRawSampleChannels,pendingRawSampleBigEndian,pendingRawSampleUnsigned,pendingRawSampleSwapNibbles); + DivSample* s=e->sampleFromFileRaw(pendingRawSample.c_str(),(DivSampleDepth)pendingRawSampleDepth,pendingRawSampleChannels,pendingRawSampleBigEndian,pendingRawSampleUnsigned,pendingRawSampleSwapNibbles,pendingRawSampleRate); if (s==NULL) { showError(e->getLastError()); } else { @@ -7225,6 +7234,7 @@ FurnaceGUI::FurnaceGUI(): editString(NULL), pendingRawSampleDepth(8), pendingRawSampleChannels(1), + pendingRawSampleRate(32000), pendingRawSampleUnsigned(false), pendingRawSampleBigEndian(false), pendingRawSampleSwapNibbles(false), diff --git a/src/gui/gui.h b/src/gui/gui.h index 3e0e53137..b2facc682 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1497,7 +1497,7 @@ class FurnaceGUI { SDL_Event userEvent; String pendingRawSample; - int pendingRawSampleDepth, pendingRawSampleChannels; + int pendingRawSampleDepth, pendingRawSampleChannels, pendingRawSampleRate; bool pendingRawSampleUnsigned, pendingRawSampleBigEndian, pendingRawSampleSwapNibbles, pendingRawSampleReplace; ImGuiWindowFlags globalWinFlags;