AUI Framework  master
Cross-platform base for C++ UI apps
Loading...
Searching...
No Matches
IAudioPlayer.h
    1#pragma once
    2
    3#include <AUI/Common/AObject.h>
    4#include <AUI/Common/ASignal.h>
    5#include <AUI/Url/AUrl.h>
    6#include <AUI/Audio/ASoundResampler.h>
    7#include <AUI/Audio/VolumeLevel.h>
    8
   15class API_AUI_AUDIO IAudioPlayer: public AObject {
   16public:
   17    explicit IAudioPlayer(AUrl url);
   18
   19    static _<IAudioPlayer> fromUrl(AUrl url);
   23    enum class PlaybackStatus : int8_t {
   24        PLAYING,
   25        PAUSED,
   26        STOPPED
   27    };
   28
   32    void play();
   33
   37    void pause();
   38
   42    void stop();
   43
   47    PlaybackStatus playbackStatus() const noexcept {
   48        return mPlaybackStatus;
   49    }
   50
   54    [[nodiscard]]
   55    const _<ASoundResampler>& resampledStream() const noexcept {
   56        return mResampledStream;
   57    }
   58
   64    void setLoop(bool loop);
   65
   69    [[nodiscard]]
   70    bool loop() const noexcept {
   71        return mLoop;
   72    }
   73
   78    void setVolume(aui::audio::VolumeLevel volume);
   79
   83    [[nodiscard]]
   84    aui::audio::VolumeLevel volume() const noexcept {
   85        return mVolume;
   86    }
   87
   93    void onFinished();
   94
   95    const AUrl& url() const noexcept {
   96        return mUrl;
   97    }
   98
   99    void rewind();
  100
  101signals:
  106
  111
  112protected:
  113    bool isInitialized() const noexcept {
  114        return mResampledStream != nullptr;
  115    }
  116
  117    void initialize();
  118
  119    void initializeIfNeeded() {
  120        if (!isInitialized()) {
  121            initialize();
  122        }
  123    }
  124
  125    void release();
  126
  127private:
  128    aui::audio::VolumeLevel mVolume = aui::audio::VolumeLevel::MAX;
  129    AUrl mUrl;
  130    _<ISoundInputStream> mSourceStream;
  131    _<ASoundResampler> mResampledStream;
  132    PlaybackStatus mPlaybackStatus = PlaybackStatus::STOPPED;
  133    bool mLoop = false;
  134
  135    virtual void playImpl() = 0;
  136    virtual void pauseImpl() = 0;
  137    virtual void stopImpl() = 0;
  138
  139    virtual void onVolumeSet() { }
  140    virtual void onLoopSet() { }
  141};
Uniform Resource Locator implementation.
Definition AUrl.h:31
void pause()
Pauses audio playback keeping playback progress.
emits read
On sound stream read.
Definition IAudioPlayer.h:110
const _< ASoundResampler > & resampledStream() const noexcept
Get resampled stream for playback.
Definition IAudioPlayer.h:55
void onFinished()
Called By AAudioMixer when the playback is finished.
void setVolume(aui::audio::VolumeLevel volume)
Set level of volume.
void setLoop(bool loop)
Set loop flag, is loop flag is true then audio playback wouldn't be stopped after it ends and sound s...
bool loop() const noexcept
Definition IAudioPlayer.h:70
void stop()
Pauses audio playback without keeping playback progress.
PlaybackStatus playbackStatus() const noexcept
Definition IAudioPlayer.h:47
void play()
Starts audio playback, if playback was previously paused, it will continue from where it was paused.
emits finished
On playback finished.
Definition IAudioPlayer.h:105
PlaybackStatus
Playback status depends on last called function among play(), pause(), stop().
Definition IAudioPlayer.h:23
aui::audio::VolumeLevel volume() const noexcept
Definition IAudioPlayer.h:84
An std::weak_ptr with AUI extensions.
Definition SharedPtrTypes.h:179
ASignal< Args... > emits
A signal declaration.
Definition ASignal.h:572