diff options
Diffstat (limited to 'src/lib/netlist/prg/nlwav.cpp')
-rw-r--r-- | src/lib/netlist/prg/nlwav.cpp | 56 |
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) |