PlaybackStream.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. /*
  2. * Copyright (c) 2023, Gregory Bertilson <zaggy1024@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "PlaybackStream.h"
  7. #include <AK/Platform.h>
  8. #include <LibCore/ThreadedPromise.h>
  9. #if defined(AK_OS_SERENITY)
  10. # include <LibAudio/PlaybackStreamSerenity.h>
  11. #elif defined(HAVE_PULSEAUDIO)
  12. # include <LibAudio/PlaybackStreamPulseAudio.h>
  13. #elif defined(AK_OS_MACOS)
  14. # include <LibAudio/PlaybackStreamAudioUnit.h>
  15. #endif
  16. namespace Audio {
  17. ErrorOr<NonnullRefPtr<PlaybackStream>> PlaybackStream::create(OutputState initial_output_state, u32 sample_rate, u8 channels, u32 target_latency_ms, AudioDataRequestCallback&& data_request_callback)
  18. {
  19. VERIFY(data_request_callback);
  20. // Create the platform-specific implementation for this stream.
  21. #if defined(AK_OS_SERENITY)
  22. return PlaybackStreamSerenity::create(initial_output_state, sample_rate, channels, target_latency_ms, move(data_request_callback));
  23. #elif defined(HAVE_PULSEAUDIO)
  24. return PlaybackStreamPulseAudio::create(initial_output_state, sample_rate, channels, target_latency_ms, move(data_request_callback));
  25. #elif defined(AK_OS_MACOS)
  26. return PlaybackStreamAudioUnit::create(initial_output_state, sample_rate, channels, target_latency_ms, move(data_request_callback));
  27. #else
  28. (void)initial_output_state, (void)sample_rate, (void)channels, (void)target_latency_ms;
  29. return Error::from_string_literal("Audio output is not available for this platform");
  30. #endif
  31. }
  32. }