// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include "audio_core/adsp/adsp.h" #include "audio_core/audio_manager.h" #include "audio_core/sink/sink.h" namespace Core { class System; } namespace AudioCore { class AudioManager; /** * Main audio class, stored inside the core, and holding the audio manager, all sinks, and the ADSP. */ class AudioCore { public: explicit AudioCore(Core::System& system); ~AudioCore(); /** * Shutdown the audio core. */ void Shutdown(); /** * Get a reference to the audio manager. * * @return Ref to the audio manager. */ AudioManager& GetAudioManager(); /** * Get the audio output sink currently in use. * * @return Ref to the sink. */ Sink::Sink& GetOutputSink(); /** * Get the audio input sink currently in use. * * @return Ref to the sink. */ Sink::Sink& GetInputSink(); /** * Get the ADSP. * * @return Ref to the ADSP. */ ADSP::ADSP& ADSP(); private: /** * Create the sinks on startup. */ void CreateSinks(); /// Main audio manager for audio in/out std::unique_ptr audio_manager; /// Sink used for audio renderer and audio out std::unique_ptr output_sink; /// Sink used for audio input std::unique_ptr input_sink; /// The ADSP in the sysmodule std::unique_ptr adsp; }; } // namespace AudioCore