summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/prg/nlwav.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/prg/nlwav.cpp')
-rw-r--r--src/lib/netlist/prg/nlwav.cpp56
1 files changed, 23 insertions, 33 deletions
diff --git a/src/lib/netlist/prg/nlwav.cpp b/src/lib/netlist/prg/nlwav.cpp
index ca89d5cdee0..683bb8a1c55 100644
--- a/src/lib/netlist/prg/nlwav.cpp
+++ b/src/lib/netlist/prg/nlwav.cpp
@@ -23,12 +23,14 @@
class wav_t
{
public:
- // FIXME: Initialized in intialize, need better c++ compliance
- // NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init)
+ // XXNOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init)
wav_t(plib::postream &strm, std::size_t sr, std::size_t channels)
: m_f(strm)
+ /* force "play" to play and warn about eof instead of being silent */
+ , m_fmt(static_cast<std::uint16_t>(channels), static_cast<std::uint32_t>(sr))
+ , m_data(m_f.seekable() ? 0 : 0xffffffff)
{
- initialize(sr, channels);
+
write(m_fh);
write(m_fmt);
write(m_data);
@@ -72,56 +74,44 @@ public:
private:
struct riff_chunk_t
{
- uint8_t group_id[4];
- uint32_t filelen;
- uint8_t rifftype[4];
+ uint8_t group_id[4] = {'R','I','F','F'};
+ uint32_t filelen = 0;
+ uint8_t rifftype[4] = {'W','A','V','E'};
};
struct riff_format_t
{
- uint8_t signature[4];
- uint32_t fmt_length;
- uint16_t format_tag;
+ riff_format_t(uint16_t achannels, uint32_t asample_rate)
+ {
+ channels = achannels;
+ sample_rate = asample_rate;
+ block_align = channels * ((bits_sample + 7) / 8);
+ bytes_per_second = sample_rate * block_align;
+ }
+ uint8_t signature[4] = {'f','m','t',' '};
+ uint32_t fmt_length = 16;
+ uint16_t format_tag = 0x0001; // PCM
uint16_t channels;
uint32_t sample_rate;
uint32_t bytes_per_second;
uint16_t block_align;
- uint16_t bits_sample;
+ uint16_t bits_sample = 16;
};
struct riff_data_t
{
- uint8_t signature[4];
+ riff_data_t(uint32_t alen) : len(alen) {}
+ uint8_t signature[4] = {'d','a','t','a'};
uint32_t len;
// data follows
};
- void initialize(std::size_t sr, std::size_t channels)
- {
- std::memcpy(m_fh.group_id, "RIFF", 4);
- m_fh.filelen = 0x0; // Fixme
- std::memcpy(m_fh.rifftype, "WAVE", 4);
-
- std::memcpy(m_fmt.signature, "fmt ", 4);
- m_fmt.fmt_length = 16;
- m_fmt.format_tag = 0x0001; //PCM
- m_fmt.channels = static_cast<std::uint16_t>(channels);
- m_fmt.sample_rate = static_cast<std::uint32_t>(sr);
- m_fmt.bits_sample = 16;
- m_fmt.block_align = m_fmt.channels * ((m_fmt.bits_sample + 7) / 8);
- m_fmt.bytes_per_second = m_fmt.sample_rate * m_fmt.block_align;
-
- std::memcpy(m_data.signature, "data", 4);
- //m_data.len = m_fmt.bytes_per_second * 2 * 0;
- /* force "play" to play and warn about eof instead of being silent */
- m_data.len = (m_f.seekable() ? 0 : 0xffffffff);
- }
+ plib::postream &m_f;
riff_chunk_t m_fh;
riff_format_t m_fmt;
riff_data_t m_data;
- plib::postream &m_f;
};
class log_processor
@@ -304,7 +294,7 @@ public:
ANALOG
};
- vcdwriter(plib::postream &fo, std::vector<pstring> channels,
+ vcdwriter(plib::postream &fo, const std::vector<pstring> &channels,
format_e format, double high_level = 2.0, double low_level = 1.0)
: m_channels(channels.size())
, m_last_time(0)