audio_device.cpp 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include <array>
  4. #include <span>
  5. #include "audio_core/audio_core.h"
  6. #include "audio_core/common/feature_support.h"
  7. #include "audio_core/renderer/audio_device.h"
  8. #include "audio_core/sink/sink.h"
  9. #include "core/core.h"
  10. namespace AudioCore::Renderer {
  11. constexpr std::array usb_device_names{
  12. AudioDevice::AudioDeviceName{"AudioStereoJackOutput"},
  13. AudioDevice::AudioDeviceName{"AudioBuiltInSpeakerOutput"},
  14. AudioDevice::AudioDeviceName{"AudioTvOutput"},
  15. AudioDevice::AudioDeviceName{"AudioUsbDeviceOutput"},
  16. };
  17. constexpr std::array device_names{
  18. AudioDevice::AudioDeviceName{"AudioStereoJackOutput"},
  19. AudioDevice::AudioDeviceName{"AudioBuiltInSpeakerOutput"},
  20. AudioDevice::AudioDeviceName{"AudioTvOutput"},
  21. };
  22. constexpr std::array output_device_names{
  23. AudioDevice::AudioDeviceName{"AudioBuiltInSpeakerOutput"},
  24. AudioDevice::AudioDeviceName{"AudioTvOutput"},
  25. AudioDevice::AudioDeviceName{"AudioExternalOutput"},
  26. };
  27. AudioDevice::AudioDevice(Core::System& system, const u64 applet_resource_user_id_,
  28. const u32 revision)
  29. : output_sink{system.AudioCore().GetOutputSink()},
  30. applet_resource_user_id{applet_resource_user_id_}, user_revision{revision} {}
  31. u32 AudioDevice::ListAudioDeviceName(std::vector<AudioDeviceName>& out_buffer,
  32. const size_t max_count) const {
  33. std::span<const AudioDeviceName> names{};
  34. if (CheckFeatureSupported(SupportTags::AudioUsbDeviceOutput, user_revision)) {
  35. names = usb_device_names;
  36. } else {
  37. names = device_names;
  38. }
  39. const u32 out_count{static_cast<u32>(std::min(max_count, names.size()))};
  40. for (u32 i = 0; i < out_count; i++) {
  41. out_buffer.push_back(names[i]);
  42. }
  43. return out_count;
  44. }
  45. u32 AudioDevice::ListAudioOutputDeviceName(std::vector<AudioDeviceName>& out_buffer,
  46. const size_t max_count) const {
  47. const u32 out_count{static_cast<u32>(std::min(max_count, output_device_names.size()))};
  48. for (u32 i = 0; i < out_count; i++) {
  49. out_buffer.push_back(output_device_names[i]);
  50. }
  51. return out_count;
  52. }
  53. void AudioDevice::SetDeviceVolumes(const f32 volume) {
  54. output_sink.SetDeviceVolume(volume);
  55. }
  56. f32 AudioDevice::GetDeviceVolume([[maybe_unused]] std::string_view name) const {
  57. return output_sink.GetDeviceVolume();
  58. }
  59. } // namespace AudioCore::Renderer