diff options
author | 2025-04-14 11:31:53 +0200 | |
---|---|---|
committer | 2025-04-27 22:23:20 +0200 | |
commit | d0f1c15a0f6df2dd51a754cb46e6175b7079c8f2 (patch) | |
tree | be35c94340442af08c316a8679089ee68e119fac /src/emu/resampler.h | |
parent | ec636faeba5c5841c5a4a35b7c9dc2f06a00f538 (diff) |
New sound infrastructure.
Should be added soon:
- mute
- speaker/microphone resampling
To be added a little later:
- compression
- reverb
Needs to be added by someone else:
- coreaudio
- direct
- portaudio
- xaudio2
- js
Diffstat (limited to 'src/emu/resampler.h')
-rw-r--r-- | src/emu/resampler.h | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/emu/resampler.h b/src/emu/resampler.h new file mode 100644 index 00000000000..c1b2f88f3e9 --- /dev/null +++ b/src/emu/resampler.h @@ -0,0 +1,35 @@ +// license:BSD-3-Clause +// copyright-holders:Olivier Galibert + +// Audio resampler + +#pragma once + +#ifndef MAME_EMU_RESAMPLER_H +#define MAME_EMU_RESAMPLER_H + +#include "sound.h" + +class audio_resampler +{ +public: + using sample_t = sound_stream::sample_t; + + audio_resampler(u32 fs, u32 ft); + + u32 history_size() const { return m_order_per_lane; } + + void apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const; + void apply(const emu::detail::output_buffer_interleaved<s16> &src, std::vector<sample_t> &dest, u64 dest_sample, u32 srcc, float gain, u32 samples) const; + void apply(const emu::detail::output_buffer_flat<sample_t> &src, std::vector<s16> &dest, u32 destc, int dchannels, u64 dest_sample, u32 srcc, float gain, u32 samples) const; + +private: + u32 m_order_per_lane, m_ftm, m_fsm, m_ft, m_fs, m_delta, m_skip, m_phases, m_phase_shift; + + std::vector<std::vector<float>> m_coefficients; + + static u32 compute_gcd(u32 fs, u32 ft); +}; + +#endif + |