#pragma once #include "engine/framework/audio/resampling.h" #include "engine/framework/audio/wav_reader.h" #include #include #include namespace engine::audio { enum class MonoMixAccumulation { Float32, Float64, }; std::vector mixdown_interleaved_to_mono_average( const std::vector & interleaved_samples, int channel_count, MonoMixAccumulation accumulation = MonoMixAccumulation::Float32); std::vector duplicate_mono_to_interleaved_channels( const std::vector & mono_samples, int target_channel_count); std::vector deinterleave_to_planar_channels( const std::vector & interleaved_samples, int channel_count); std::vector interleave_planar_channels( const std::vector & planar_samples, int channel_count, int64_t frame_count); std::vector extract_interleaved_channel( const std::vector & interleaved_samples, int channel_count, int channel_index); std::vector convert_wav_to_mono_linear_resampled( const WavData & wav, int target_sample_rate_hz); std::vector convert_interleaved_audio_to_mono_linear_resampled( const std::vector & interleaved_samples, int sample_rate_hz, int channel_count, int target_sample_rate_hz); std::vector convert_interleaved_audio_to_mono_torchaudio_sinc_hann_resampled( const std::vector & interleaved_samples, int sample_rate_hz, int channel_count, int target_sample_rate_hz, const TorchaudioSincHannResampleOptions & options = {}, MonoMixAccumulation accumulation = MonoMixAccumulation::Float32); std::vector read_wav_f32_as_mono_linear_resampled( const std::filesystem::path & path, int target_sample_rate_hz); } // namespace engine::audio