diff options
author | 2019-04-01 06:00:54 +0900 | |
---|---|---|
committer | 2019-03-31 17:00:54 -0400 | |
commit | 99cc29b2c9742f8b790330fa94cbe1f2cb3137e5 (patch) | |
tree | 8b9399dfb1169155203d184d8c08b6b361bf83f2 | |
parent | 104e42014ed5f78c6d9cdfe09deba8e0f02f4708 (diff) |
vgmplay.cpp : Volume Modifier Support, Typo (#3804)
* vgmplay.cpp : Volume Multipler Support, Typo
* vgmplay.cpp : Minor fix
* vgmplay.cpp : Fix volume
* mega32x.cpp : Remove unused
* vgmplay.cpp : Fix duplicate
* vgmplay.cpp : Log volume
* vgmplay.cpp : Fix volume
-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()); |