diff --git a/src/audio_core/cubeb_input.cpp b/src/audio_core/cubeb_input.cpp index f182bd2c2..0cd650af6 100644 --- a/src/audio_core/cubeb_input.cpp +++ b/src/audio_core/cubeb_input.cpp @@ -1,4 +1,4 @@ -// Copyright 2018 Citra Emulator Project +// Copyright Citra Emulator Project / Azahar Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. @@ -144,6 +144,11 @@ Samples CubebInput::Read() { while (impl->sample_queue.Pop(queue)) { samples.insert(samples.end(), queue.begin(), queue.end()); } + + if (samples.empty()) { + samples = GenerateSilentSamples(parameters); + } + return samples; } diff --git a/src/audio_core/input.h b/src/audio_core/input.h index ba2621890..e47f5942c 100644 --- a/src/audio_core/input.h +++ b/src/audio_core/input.h @@ -1,4 +1,4 @@ -// Copyright 2023 Citra Emulator Project +// Copyright Citra Emulator Project / Azahar Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. @@ -53,6 +53,22 @@ public: */ virtual Samples Read() = 0; + /** + * Generates a buffer of silence. + * Takes into account the sample size and signedness of the input. + */ + virtual Samples GenerateSilentSamples(const InputParameters& params) { + u8 silent_value = 0x00; + + if (params.sample_size == 8) { + silent_value = params.sign == Signedness::Unsigned ? 0x80 : 0x00; + return std::vector(32, silent_value); + } else { + silent_value = params.sign == Signedness::Unsigned ? 0x80 : 0x00; + return std::vector(64, silent_value); + } + } + protected: InputParameters parameters; }; diff --git a/src/audio_core/null_input.h b/src/audio_core/null_input.h index 00dacf5bd..1b0796ea7 100644 --- a/src/audio_core/null_input.h +++ b/src/audio_core/null_input.h @@ -1,4 +1,4 @@ -// Copyright 2019 Citra Emulator Project +// Copyright Citra Emulator Project / Azahar Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. @@ -30,10 +30,11 @@ public: void AdjustSampleRate(u32 sample_rate) override {} Samples Read() override { - return {}; + return GenerateSilentSamples(parameters); } private: + InputParameters parameters; bool is_sampling = false; }; diff --git a/src/audio_core/openal_input.cpp b/src/audio_core/openal_input.cpp index 935b16454..3d4c55fb0 100644 --- a/src/audio_core/openal_input.cpp +++ b/src/audio_core/openal_input.cpp @@ -1,4 +1,4 @@ -// Copyright 2023 Citra Emulator Project +// Copyright Citra Emulator Project / Azahar Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. @@ -108,6 +108,10 @@ Samples OpenALInput::Read() { return {}; } + if (samples.empty()) { + samples = GenerateSilentSamples(parameters); + } + return samples; }