AUI Framework  develop
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    explicit IAudioPlayer(_<ISoundInputStream> stream);
   19
   20    static _<IAudioPlayer> fromUrl(AUrl url);
   21    static _<IAudioPlayer> fromStream(_<ISoundInputStream> stream);
   22
   26    enum class PlaybackStatus : int8_t {
   27        PLAYING,
   28        PAUSED,
   29        STOPPED
   30    };
   31
   35    void play();
   36
   40    void pause();
   41
   45    void stop();
   46
   50    PlaybackStatus playbackStatus() const noexcept {
   51        return mPlaybackStatus;
   52    }
   53
   57    [[nodiscard]]
   59        return *mResampledStream;
   60    }
   61
   67    void setLoop(bool loop);
   68
   72    [[nodiscard]]
   73    bool loop() const noexcept {
   74        return mLoop;
   75    }
   76
   81    void setVolume(aui::audio::VolumeLevel volume);
   82
   86    [[nodiscard]]
   87    aui::audio::VolumeLevel volume() const noexcept {
   88        return mVolume;
   89    }
   90
   96    void onFinished();
   97
   98    const AUrl& url() const noexcept {
   99        return *mUrl;
  100    }
  101
  102    void rewind();
  103
  104signals:
  109
  114
  115protected:
  116    bool isInitialized() const noexcept {
  117        return mResampledStream != std::nullopt;
  118    }
  119
  120    void initialize();
  121
  122    void initializeIfNeeded() {
  123        if (!isInitialized()) {
  124            initialize();
  125        }
  126    }
  127
  128    void reset();
  129
  130private:
  131    aui::audio::VolumeLevel mVolume = aui::audio::VolumeLevel::MAX;
  132    AOptional<AUrl> mUrl;
  133    _<ISoundInputStream> mSourceStream;
  134    AOptional<ASoundResampler> mResampledStream;
  135    PlaybackStatus mPlaybackStatus = PlaybackStatus::STOPPED;
  136    bool mLoop = false;
  137
  138    virtual void playImpl() = 0;
  139    virtual void pauseImpl() = 0;
  140    virtual void stopImpl() = 0;
  141
  142    virtual void onVolumeSet() { }
  143    virtual void onLoopSet() { }
  144};
Implements audio mixing and resampling.
Definition ASoundResampler.h:34
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:113
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:73
void stop()
Pauses audio playback without keeping playback progress.
PlaybackStatus playbackStatus() const noexcept
Definition IAudioPlayer.h:50
void play()
Starts audio playback, if playback was previously paused, it will continue from where it was paused.
ASoundResampler & resampledStream()
Get resampled stream for playback.
Definition IAudioPlayer.h:58
emits finished
On playback finished.
Definition IAudioPlayer.h:108
PlaybackStatus
Playback status depends on last called function among play(), pause(), stop().
Definition IAudioPlayer.h:26
aui::audio::VolumeLevel volume() const noexcept
Definition IAudioPlayer.h:87
An std::weak_ptr with AUI extensions.
Definition SharedPtrTypes.h:215
ASignal< Args... > emits
A signal declaration.
Definition ASignal.h:577