parent
4affc48ebd
commit
ceb27728d3
|
@ -3293,7 +3293,7 @@ DivSample* DivEngine::sampleFromFile(const char* path) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
DivSample* DivEngine::sampleFromFileRaw(const char* path, DivSampleDepth depth, int channels, bool bigEndian, bool unsign) {
|
DivSample* DivEngine::sampleFromFileRaw(const char* path, DivSampleDepth depth, int channels, bool bigEndian, bool unsign, bool swapNibbles) {
|
||||||
if (song.sample.size()>=256) {
|
if (song.sample.size()>=256) {
|
||||||
lastError="too many samples!";
|
lastError="too many samples!";
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -3459,6 +3459,14 @@ DivSample* DivEngine::sampleFromFileRaw(const char* path, DivSampleDepth depth,
|
||||||
}
|
}
|
||||||
delete[] buf;
|
delete[] buf;
|
||||||
|
|
||||||
|
// swap nibbles if needed
|
||||||
|
if (swapNibbles) {
|
||||||
|
unsigned char* b=(unsigned char*)sample->getCurBuf();
|
||||||
|
for (unsigned int i=0; i<sample->getCurBufLen(); i++) {
|
||||||
|
b[i]=(b[i]<<4)|(b[i]>>4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
BUSY_END;
|
BUSY_END;
|
||||||
return sample;
|
return sample;
|
||||||
}
|
}
|
||||||
|
|
|
@ -796,7 +796,7 @@ class DivEngine {
|
||||||
DivSample* sampleFromFile(const char* path);
|
DivSample* sampleFromFile(const char* path);
|
||||||
|
|
||||||
// get raw sample
|
// get raw sample
|
||||||
DivSample* sampleFromFileRaw(const char* path, DivSampleDepth depth, int channels, bool bigEndian, bool unsign);
|
DivSample* sampleFromFileRaw(const char* path, DivSampleDepth depth, int channels, bool bigEndian, bool unsign, bool swapNibbles);
|
||||||
|
|
||||||
// delete sample
|
// delete sample
|
||||||
void delSample(int index);
|
void delSample(int index);
|
||||||
|
|
|
@ -5019,8 +5019,12 @@ bool FurnaceGUI::loop() {
|
||||||
ImGui::Checkbox("Big endian",&pendingRawSampleBigEndian);
|
ImGui::Checkbox("Big endian",&pendingRawSampleBigEndian);
|
||||||
ImGui::EndDisabled();
|
ImGui::EndDisabled();
|
||||||
|
|
||||||
|
ImGui::BeginDisabled(pendingRawSampleDepth==DIV_SAMPLE_DEPTH_16BIT);
|
||||||
|
ImGui::Checkbox("Swap nibbles",&pendingRawSampleSwapNibbles);
|
||||||
|
ImGui::EndDisabled();
|
||||||
|
|
||||||
if (ImGui::Button("OK")) {
|
if (ImGui::Button("OK")) {
|
||||||
DivSample* s=e->sampleFromFileRaw(pendingRawSample.c_str(),(DivSampleDepth)pendingRawSampleDepth,pendingRawSampleChannels,pendingRawSampleBigEndian,pendingRawSampleUnsigned);
|
DivSample* s=e->sampleFromFileRaw(pendingRawSample.c_str(),(DivSampleDepth)pendingRawSampleDepth,pendingRawSampleChannels,pendingRawSampleBigEndian,pendingRawSampleUnsigned,pendingRawSampleSwapNibbles);
|
||||||
if (s==NULL) {
|
if (s==NULL) {
|
||||||
showError(e->getLastError());
|
showError(e->getLastError());
|
||||||
} else {
|
} else {
|
||||||
|
@ -5684,6 +5688,7 @@ FurnaceGUI::FurnaceGUI():
|
||||||
pendingRawSampleChannels(1),
|
pendingRawSampleChannels(1),
|
||||||
pendingRawSampleUnsigned(false),
|
pendingRawSampleUnsigned(false),
|
||||||
pendingRawSampleBigEndian(false),
|
pendingRawSampleBigEndian(false),
|
||||||
|
pendingRawSampleSwapNibbles(false),
|
||||||
globalWinFlags(0),
|
globalWinFlags(0),
|
||||||
curFileDialog(GUI_FILE_OPEN),
|
curFileDialog(GUI_FILE_OPEN),
|
||||||
warnAction(GUI_WARN_OPEN),
|
warnAction(GUI_WARN_OPEN),
|
||||||
|
|
|
@ -1116,7 +1116,7 @@ class FurnaceGUI {
|
||||||
|
|
||||||
String pendingRawSample;
|
String pendingRawSample;
|
||||||
int pendingRawSampleDepth, pendingRawSampleChannels;
|
int pendingRawSampleDepth, pendingRawSampleChannels;
|
||||||
bool pendingRawSampleUnsigned, pendingRawSampleBigEndian;
|
bool pendingRawSampleUnsigned, pendingRawSampleBigEndian, pendingRawSampleSwapNibbles;
|
||||||
|
|
||||||
ImGuiWindowFlags globalWinFlags;
|
ImGuiWindowFlags globalWinFlags;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue