diff options
Diffstat (limited to 'src/osd/modules/sound/sound_module.h')
-rw-r--r-- | src/osd/modules/sound/sound_module.h | 73 |
1 files changed, 58 insertions, 15 deletions
diff --git a/src/osd/modules/sound/sound_module.h b/src/osd/modules/sound/sound_module.h index d9f597ad0d9..2498db84107 100644 --- a/src/osd/modules/sound/sound_module.h +++ b/src/osd/modules/sound/sound_module.h @@ -4,33 +4,76 @@ * sound_module.h * */ +#ifndef MAME_OSD_SOUND_SOUND_MODULE_H +#define MAME_OSD_SOUND_SOUND_MODULE_H -#ifndef SOUND_MODULE_H_ -#define SOUND_MODULE_H_ +#pragma once -#include "osdepend.h" -#include "modules/osdmodule.h" +#include <osdepend.h> -//============================================================ -// CONSTANTS -//============================================================ +#include <cstdint> +#include <array> +#include <vector> +#include <string> #define OSD_SOUND_PROVIDER "sound" class sound_module { public: - sound_module() : m_sample_rate(0), m_audio_latency(1) { } + virtual ~sound_module() = default; - virtual ~sound_module() { } + virtual uint32_t get_generation() { return 1; } + virtual osd::audio_info get_information() { + osd::audio_info result; + result.m_generation = 1; + result.m_default_sink = 1; + result.m_default_source = 0; + result.m_nodes.resize(1); + result.m_nodes[0].m_name = ""; + result.m_nodes[0].m_id = 1; + result.m_nodes[0].m_rate.m_default_rate = 0; // Magic value meaning "use configured sample rate" + result.m_nodes[0].m_rate.m_min_rate = 0; + result.m_nodes[0].m_rate.m_max_rate = 0; + result.m_nodes[0].m_sinks = 2; + result.m_nodes[0].m_sources = 0; + result.m_nodes[0].m_port_names.push_back("L"); + result.m_nodes[0].m_port_names.push_back("R"); + result.m_nodes[0].m_port_positions.emplace_back(std::array<double, 3>({ -0.2, 0.0, 1.0 })); + result.m_nodes[0].m_port_positions.emplace_back(std::array<double, 3>({ 0.2, 0.0, 1.0 })); + result.m_streams.resize(1); + result.m_streams[0].m_id = 1; + result.m_streams[0].m_node = 1; + return result; + } + virtual bool external_per_channel_volume() { return false; } + virtual bool split_streams_per_source() { return false; } - virtual void update_audio_stream(bool is_throttled, const int16_t *buffer, int samples_this_frame) = 0; - virtual void set_mastervolume(int attenuation) = 0; + virtual uint32_t stream_sink_open(uint32_t node, std::string name, uint32_t rate) { return 1; } + virtual uint32_t stream_source_open(uint32_t node, std::string name, uint32_t rate) { return 0; } + virtual void stream_set_volumes(uint32_t id, const std::vector<float> &db) {} + virtual void stream_close(uint32_t id) {} + virtual void stream_sink_update(uint32_t id, const int16_t *buffer, int samples_this_frame) {} + virtual void stream_source_update(uint32_t id, int16_t *buffer, int samples_this_frame) {} - int sample_rate() const { return m_sample_rate; } +protected: + class abuffer { + public: + abuffer(uint32_t channels) : m_channels(channels), m_last_sample(channels, 0) {} + void get(int16_t *data, uint32_t samples); + void push(const int16_t *data, uint32_t samples); + uint32_t channels() const { return m_channels; } - int m_sample_rate; - int m_audio_latency; + private: + struct buffer { + uint32_t m_cpos; + std::vector<int16_t> m_data; + }; + + uint32_t m_channels; + std::vector<int16_t> m_last_sample; + std::vector<buffer> m_buffers; + }; }; -#endif /* FONT_MODULE_H_ */ +#endif // MAME_OSD_SOUND_SOUND_MODULE_H |