Skip to content

Commit d21dce3

Browse files
authored
es550[56] devices generate 20bit samples, not 16-bit ones. (#14329)
1 parent a2bdb42 commit d21dce3

File tree

6 files changed

+22
-20
lines changed

6 files changed

+22
-20
lines changed

src/devices/sound/es5506.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1039,7 +1039,8 @@ void es5506_device::generate_samples(sound_stream &stream)
10391039
}
10401040

10411041
for (int c = 0; c < stream.output_count(); c++)
1042-
stream.put_int(c, sampindex, cursample[c], 32768);
1042+
// generated samples are 20-bit signed, range is [-2^19 .. 2^19-1]
1043+
stream.put_int_clamp(c, sampindex, cursample[c], (1 << 19));
10431044
}
10441045
}
10451046

@@ -1077,7 +1078,8 @@ void es5505_device::generate_samples(sound_stream &stream)
10771078
}
10781079

10791080
for (int c = 0; c < stream.output_count(); c++)
1080-
stream.put_int(c, sampindex, cursample[c], 32768);
1081+
// generated samples are 20-bit signed, range is [-2^19 .. 2^19-1]
1082+
stream.put_int_clamp(c, sampindex, cursample[c], (1 << 19));
10811083
}
10821084
}
10831085

src/devices/sound/esqpump.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,12 @@ void esq_5505_5510_pump_device::device_clock_changed()
6363

6464
void esq_5505_5510_pump_device::sound_stream_update(sound_stream &stream)
6565
{
66-
#define SAMPLE_SHIFT 4
67-
constexpr sound_stream::sample_t input_scale = 32768.0 / (1 << SAMPLE_SHIFT);
66+
constexpr sound_stream::sample_t input_scale = 32768.0;
67+
constexpr sound_stream::sample_t output_scale = 1.0 / input_scale;
6868

6969
// Push the 'Aux' output samples directly into the output stream
70-
stream.put(2, 0, stream.get(0, 0) * (1.0 / (1 << SAMPLE_SHIFT)));
71-
stream.put(3, 0, stream.get(1, 0) * (1.0 / (1 << SAMPLE_SHIFT)));
70+
stream.put(2, 0, stream.get(0, 0));
71+
stream.put(3, 0, stream.get(1, 0));
7272

7373
// Push the 'FX1', 'FX2' and 'DRY' samples into the ESP
7474
m_esp->ser_w(0, s32(stream.get(2, 0) * input_scale));
@@ -92,8 +92,8 @@ void esq_5505_5510_pump_device::sound_stream_update(sound_stream &stream)
9292
#endif
9393

9494
// Read the processed result from the ESP.
95-
sound_stream::sample_t l = sound_stream::sample_t(m_esp->ser_r(6)) * (1.0 / 32768.0);
96-
sound_stream::sample_t r = sound_stream::sample_t(m_esp->ser_r(7)) * (1.0 / 32768.0);
95+
sound_stream::sample_t l = sound_stream::sample_t(m_esp->ser_r(6)) * output_scale;
96+
sound_stream::sample_t r = sound_stream::sample_t(m_esp->ser_r(7)) * output_scale;
9797

9898
#if !PUMP_FAKE_ESP_PROCESSING && PUMP_REPLACE_ESP_PROGRAM
9999
// if we're processing the fake program through the ESP, the result should just be that of adding the inputs

src/mame/itech/itech32.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1797,8 +1797,8 @@ void itech32_state::base_devices(machine_config &config)
17971797
m_ensoniq->set_region2("ensoniq.2");
17981798
m_ensoniq->set_region3("ensoniq.3");
17991799
m_ensoniq->set_channels(1); // channels
1800-
m_ensoniq->add_route(0, "speaker", 0.1, 1); // swapped stereo
1801-
m_ensoniq->add_route(1, "speaker", 0.1, 0);
1800+
m_ensoniq->add_route(0, "speaker", 1.6, 1); // swapped stereo
1801+
m_ensoniq->add_route(1, "speaker", 1.6, 0);
18021802
}
18031803

18041804
void itech32_state::via(machine_config &config)
@@ -1872,8 +1872,8 @@ void drivedge_state::drivedge(machine_config &config)
18721872
SPEAKER(config, "back", 2).rear();
18731873

18741874
m_ensoniq->set_channels(2);
1875-
m_ensoniq->add_route(2, "back", 0.1, 1); // swapped stereo
1876-
m_ensoniq->add_route(3, "back", 0.1, 0);
1875+
m_ensoniq->add_route(2, "back", 1.6, 1); // swapped stereo
1876+
m_ensoniq->add_route(3, "back", 1.6, 0);
18771877
}
18781878

18791879
void shoottv_state::shoottv(machine_config &config)

src/mame/nmk/macrossp.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,8 +1025,8 @@ void macrossp_state::macrossp(machine_config &config)
10251025
ensoniq.set_addrmap(1, &macrossp_state::es5506_bank1_map);
10261026
ensoniq.set_channels(1);
10271027
ensoniq.irq_cb().set(FUNC(macrossp_state::irqhandler));
1028-
ensoniq.add_route(0, "speaker", 0.1, 0);
1029-
ensoniq.add_route(1, "speaker", 0.1, 1);
1028+
ensoniq.add_route(0, "speaker", 1.6, 0);
1029+
ensoniq.add_route(1, "speaker", 1.6, 1);
10301030
}
10311031

10321032
void macrossp_state::quizmoon(machine_config &config)

src/mame/seta/ssv.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2454,8 +2454,8 @@ void ssv_state::ssv(machine_config &config)
24542454
m_ensoniq->set_region2("ensoniq.2");
24552455
m_ensoniq->set_region3("ensoniq.3");
24562456
m_ensoniq->set_channels(1);
2457-
m_ensoniq->add_route(0, "speaker", 0.075, 0);
2458-
m_ensoniq->add_route(1, "speaker", 0.075, 1);
2457+
m_ensoniq->add_route(0, "speaker", 1.2, 0);
2458+
m_ensoniq->add_route(1, "speaker", 1.2, 1);
24592459
}
24602460

24612461
void drifto94_state::drifto94(machine_config &config)

src/mame/virtual/vgmplay.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4050,15 +4050,15 @@ void vgmplay_state::vgmplay(machine_config &config)
40504050
// TODO m_es5505[0]->set_addrmap(0, &vgmplay_state::es5505_map<0>);
40514051
// TODO m_es5505[0]->set_addrmap(1, &vgmplay_state::es5505_map<0>);
40524052
m_es5505[0]->set_channels(1);
4053-
m_es5505[0]->add_route(0, m_viz, 0.5, 0);
4054-
m_es5505[0]->add_route(1, m_viz, 0.5, 1);
4053+
m_es5505[0]->add_route(0, m_viz, 8.0, 0);
4054+
m_es5505[0]->add_route(1, m_viz, 8.0, 1);
40554055

40564056
ES5505(config, m_es5505[1], 0);
40574057
// TODO m_es5505[1]->set_addrmap(0, &vgmplay_state::es5505_map<1>);
40584058
// TODO m_es5505[1]->set_addrmap(1, &vgmplay_state::es5505_map<1>);
40594059
m_es5505[1]->set_channels(1);
4060-
m_es5505[1]->add_route(0, m_viz, 0.5, 0);
4061-
m_es5505[1]->add_route(1, m_viz, 0.5, 1);
4060+
m_es5505[1]->add_route(0, m_viz, 8.0, 0);
4061+
m_es5505[1]->add_route(1, m_viz, 8.0, 1);
40624062

40634063
X1_010(config, m_x1_010[0], 0);
40644064
m_x1_010[0]->set_addrmap(0, &vgmplay_state::x1_010_map<0>);

0 commit comments

Comments
 (0)