audio_out.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // Copyright 2018 yuzu Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include "audio_core/audio_out.h"
  5. #include "common/assert.h"
  6. #include "common/logging/log.h"
  7. namespace AudioCore {
  8. /// Returns the stream format from the specified number of channels
  9. static Stream::Format ChannelsToStreamFormat(int num_channels) {
  10. switch (num_channels) {
  11. case 1:
  12. return Stream::Format::Mono16;
  13. case 2:
  14. return Stream::Format::Stereo16;
  15. case 6:
  16. return Stream::Format::Multi51Channel16;
  17. }
  18. LOG_CRITICAL(Audio, "Unimplemented num_channels={}", num_channels);
  19. UNREACHABLE();
  20. return {};
  21. }
  22. StreamPtr AudioOut::OpenStream(int sample_rate, int num_channels,
  23. Stream::ReleaseCallback&& release_callback) {
  24. streams.push_back(std::make_shared<Stream>(sample_rate, ChannelsToStreamFormat(num_channels),
  25. std::move(release_callback)));
  26. return streams.back();
  27. }
  28. std::vector<u64> AudioOut::GetTagsAndReleaseBuffers(StreamPtr stream, size_t max_count) {
  29. return stream->GetTagsAndReleaseBuffers(max_count);
  30. }
  31. void AudioOut::StartStream(StreamPtr stream) {
  32. stream->Play();
  33. }
  34. void AudioOut::StopStream(StreamPtr stream) {
  35. stream->Stop();
  36. }
  37. bool AudioOut::QueueBuffer(StreamPtr stream, Buffer::Tag tag, std::vector<u8>&& data) {
  38. return stream->QueueBuffer(std::make_shared<Buffer>(tag, std::move(data)));
  39. }
  40. } // namespace AudioCore