audio_core.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "audio_core/audio_core.h"
  4. #include "audio_core/sink/sink_details.h"
  5. #include "common/settings.h"
  6. #include "core/core.h"
  7. namespace AudioCore {
  8. AudioCore::AudioCore(Core::System& system) : audio_manager{std::make_unique<AudioManager>(system)} {
  9. CreateSinks();
  10. // Must be created after the sinks
  11. adsp = std::make_unique<AudioRenderer::ADSP::ADSP>(system, *output_sink);
  12. }
  13. AudioCore ::~AudioCore() {
  14. Shutdown();
  15. }
  16. void AudioCore::CreateSinks() {
  17. const auto& sink_id{Settings::values.sink_id};
  18. const auto& audio_output_device_id{Settings::values.audio_output_device_id};
  19. const auto& audio_input_device_id{Settings::values.audio_input_device_id};
  20. output_sink = Sink::CreateSinkFromID(sink_id.GetValue(), audio_output_device_id.GetValue());
  21. input_sink = Sink::CreateSinkFromID(sink_id.GetValue(), audio_input_device_id.GetValue());
  22. }
  23. void AudioCore::Shutdown() {
  24. audio_manager->Shutdown();
  25. }
  26. AudioManager& AudioCore::GetAudioManager() {
  27. return *audio_manager;
  28. }
  29. Sink::Sink& AudioCore::GetOutputSink() {
  30. return *output_sink;
  31. }
  32. Sink::Sink& AudioCore::GetInputSink() {
  33. return *input_sink;
  34. }
  35. AudioRenderer::ADSP::ADSP& AudioCore::GetADSP() {
  36. return *adsp;
  37. }
  38. void AudioCore::PauseSinks(const bool pausing) const {
  39. if (pausing) {
  40. output_sink->PauseStreams();
  41. input_sink->PauseStreams();
  42. } else {
  43. output_sink->UnpauseStreams();
  44. input_sink->UnpauseStreams();
  45. }
  46. }
  47. } // namespace AudioCore