audio_renderer.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // Copyright 2018 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include <array>
  6. #include <memory>
  7. #include <vector>
  8. #include "audio_core/behavior_info.h"
  9. #include "audio_core/command_generator.h"
  10. #include "audio_core/common.h"
  11. #include "audio_core/effect_context.h"
  12. #include "audio_core/memory_pool.h"
  13. #include "audio_core/mix_context.h"
  14. #include "audio_core/sink_context.h"
  15. #include "audio_core/splitter_context.h"
  16. #include "audio_core/stream.h"
  17. #include "audio_core/voice_context.h"
  18. #include "common/common_funcs.h"
  19. #include "common/common_types.h"
  20. #include "common/swap.h"
  21. #include "core/hle/result.h"
  22. namespace Core::Timing {
  23. class CoreTiming;
  24. }
  25. namespace Kernel {
  26. class WritableEvent;
  27. }
  28. namespace Core::Memory {
  29. class Memory;
  30. }
  31. namespace AudioCore {
  32. using DSPStateHolder = std::array<VoiceState*, AudioCommon::MAX_CHANNEL_COUNT>;
  33. class AudioOut;
  34. class AudioRenderer {
  35. public:
  36. AudioRenderer(Core::Timing::CoreTiming& core_timing, Core::Memory::Memory& memory_,
  37. AudioCommon::AudioRendererParameter params,
  38. std::shared_ptr<Kernel::WritableEvent> buffer_event, std::size_t instance_number);
  39. ~AudioRenderer();
  40. [[nodiscard]] ResultCode UpdateAudioRenderer(const std::vector<u8>& input_params,
  41. std::vector<u8>& output_params);
  42. void QueueMixedBuffer(Buffer::Tag tag);
  43. void ReleaseAndQueueBuffers();
  44. [[nodiscard]] u32 GetSampleRate() const;
  45. [[nodiscard]] u32 GetSampleCount() const;
  46. [[nodiscard]] u32 GetMixBufferCount() const;
  47. [[nodiscard]] Stream::State GetStreamState() const;
  48. private:
  49. BehaviorInfo behavior_info{};
  50. AudioCommon::AudioRendererParameter worker_params;
  51. std::shared_ptr<Kernel::WritableEvent> buffer_event;
  52. std::vector<ServerMemoryPoolInfo> memory_pool_info;
  53. VoiceContext voice_context;
  54. EffectContext effect_context;
  55. MixContext mix_context;
  56. SinkContext sink_context;
  57. SplitterContext splitter_context;
  58. std::vector<VoiceState> voices;
  59. std::unique_ptr<AudioOut> audio_out;
  60. StreamPtr stream;
  61. Core::Memory::Memory& memory;
  62. CommandGenerator command_generator;
  63. std::size_t elapsed_frame_count{};
  64. };
  65. } // namespace AudioCore