diff options
-rw-r--r-- | src/mame/drivers/vgmplay.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/mame/drivers/vgmplay.cpp b/src/mame/drivers/vgmplay.cpp index 442c2ee33e7..41596f9eecb 100644 --- a/src/mame/drivers/vgmplay.cpp +++ b/src/mame/drivers/vgmplay.cpp @@ -2705,6 +2705,17 @@ QUICKLOAD_LOAD_MEMBER(vgmplay_state, load_file) logerror("File version %x.%02x\n", version >> 8, version & 0xff); uint32_t data_start = version >= 0x150 ? r32(0x34) + 0x34 : 0x40; + int volbyte = version >= 0x160 && data_start >= 0x7d ? r8(0x7c) : 0; + logerror("Volume %02x\n", volbyte); + + if (volbyte == 0xc1) // 0x00~0xc0 0~192, 0xc1 -64, 0xc2~0xff -62~-1 + volbyte = -0x40; + else if (volbyte > 0xc1) + volbyte -= 0x100; + + float volume = powf(2.0f, float(volbyte) / float(0x20)); + uint32_t chip_count = 0; + uint32_t extra_header_start = version >= 0x170 && data_start >= 0xc0 && r32(0xbc) ? r32(0xbc) + 0xbc : 0; uint32_t header_size = extra_header_start ? extra_header_start : data_start; @@ -2732,6 +2743,8 @@ QUICKLOAD_LOAD_MEMBER(vgmplay_state, load_file) break; } } + + chip_count++; } device.set_unscaled_clock(c & ~0xc0000000); @@ -2915,6 +2928,16 @@ QUICKLOAD_LOAD_MEMBER(vgmplay_state, load_file) if (child.clock() != 0) logerror("%s %d\n", child.tag(), child.clock()); + if (chip_count == 0) + volume = 0.0f; + else + volume /= (float)chip_count; + + for (int i = 0; i < m_lspeaker->inputs(); i++) + m_lspeaker->set_input_gain(i, volume); // TODO : Volume is related to chip number + for (int i = 0; i < m_rspeaker->inputs(); i++) + m_rspeaker->set_input_gain(i, volume); + //for (auto &stream : machine().sound().streams()) // if (stream->sample_rate() != 0) // logerror("%s %d\n", stream->device().tag(), stream->sample_rate()); |