diff --git a/src/engine/platform/sound/ymz280b.cpp b/src/engine/platform/sound/ymz280b.cpp index 74fafe67..4ab0e87e 100644 --- a/src/engine/platform/sound/ymz280b.cpp +++ b/src/engine/platform/sound/ymz280b.cpp @@ -286,6 +286,8 @@ int ymz280b_device::generate_pcm8(struct YMZ280BVoice *voice, s16 *buffer, int s ***********************************************************************************************/ +// according to this core, it should be little-endian. +// but it's big-endian in VGMPlay... int ymz280b_device::generate_pcm16(struct YMZ280BVoice *voice, s16 *buffer, int samples) { u32 position = voice->position; @@ -298,7 +300,7 @@ int ymz280b_device::generate_pcm16(struct YMZ280BVoice *voice, s16 *buffer, int while (samples) { /* fetch the current value */ - val = (s16)((m_ext_mem[position / 2 + 1] << 8) + m_ext_mem[position / 2 + 0]); + val = (s16)((m_ext_mem[position / 2 + 0] << 8) + m_ext_mem[position / 2 + 1]); /* output to the buffer, scaling by the volume */ *buffer++ = val; @@ -321,7 +323,7 @@ int ymz280b_device::generate_pcm16(struct YMZ280BVoice *voice, s16 *buffer, int while (samples) { /* fetch the current value */ - val = (s16)((m_ext_mem[position / 2 + 1] << 8) + m_ext_mem[position / 2 + 0]); + val = (s16)((m_ext_mem[position / 2 + 0] << 8) + m_ext_mem[position / 2 + 1]); /* output to the buffer, scaling by the volume */ *buffer++ = val; diff --git a/src/engine/platform/ymz280b.cpp b/src/engine/platform/ymz280b.cpp index b2797cd6..5ad8a0ed 100644 --- a/src/engine/platform/ymz280b.cpp +++ b/src/engine/platform/ymz280b.cpp @@ -431,7 +431,17 @@ void DivPlatformYMZ280B::renderSamples() { unsigned char* src=(unsigned char*)s->getCurBuf(); int actualLength=MIN((int)(getSampleMemCapacity()-memPos),length); if (actualLength>0) { +#ifdef TA_BIG_ENDIAN memcpy(&sampleMem[memPos],src,actualLength); +#else + if (s->depth==DIV_SAMPLE_DEPTH_16BIT) { + for (int i=0; igetSampleMemUsage(); unsigned char* sampleMem=new unsigned char[sampleMemLen]; memcpy(sampleMem,writeZ280[i]->getSampleMem(),sampleMemLen); - // TODO: please fix this later - /* - for (int i=0; idepth==DIV_SAMPLE_DEPTH_16BIT) { - unsigned int pos=s->offYMZ280B; - for (unsigned int j=0; jsamples; j++) { - unsigned char lo=sampleMem[pos+j*2]; - unsigned char hi=sampleMem[pos+j*2+1]; - sampleMem[pos+j*2]=hi; - sampleMem[pos+j*2+1]=lo; - } - } - } - */ w->writeC(0x67); w->writeC(0x66); w->writeC(0x86); diff --git a/src/gui/editControls.cpp b/src/gui/editControls.cpp index fe72351a..6bfde010 100644 --- a/src/gui/editControls.cpp +++ b/src/gui/editControls.cpp @@ -204,7 +204,9 @@ void FurnaceGUI::drawMobileControls() { ImGui::SameLine(); ImGui::Button("Export Audio"); ImGui::SameLine(); - ImGui::Button("Export VGM"); + if (ImGui::Button("Export VGM")) { + openFileDialog(GUI_FILE_EXPORT_VGM); + } ImGui::Button("CmdStream");