2021-04-11 17:22:13 +02:00
|
|
|
/**
|
|
|
|
* SPDX-FileCopyrightText: 2017 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
|
|
|
|
* SPDX-FileCopyrightText: 2021 Bart De Vries <bart@mogwai.be>
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: LGPL-3.0-or-later
|
2021-04-11 15:26:28 +02:00
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <QObject>
|
|
|
|
#include <QUrl>
|
|
|
|
#include <QMediaPlayer>
|
|
|
|
#include <QString>
|
|
|
|
|
|
|
|
#include <memory>
|
|
|
|
|
|
|
|
#include "entry.h"
|
|
|
|
|
|
|
|
class AudioManagerPrivate;
|
|
|
|
|
|
|
|
class AudioManager : public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
Q_PROPERTY(bool playerOpen
|
2021-04-11 16:19:58 +02:00
|
|
|
READ playerOpen
|
|
|
|
WRITE setPlayerOpen
|
|
|
|
NOTIFY playerOpenChanged)
|
2021-04-11 15:26:28 +02:00
|
|
|
|
|
|
|
Q_PROPERTY(Entry* entry
|
|
|
|
READ entry
|
|
|
|
WRITE setEntry
|
|
|
|
NOTIFY entryChanged)
|
|
|
|
|
|
|
|
Q_PROPERTY(bool muted
|
|
|
|
READ muted
|
|
|
|
WRITE setMuted
|
|
|
|
NOTIFY mutedChanged)
|
|
|
|
|
|
|
|
Q_PROPERTY(qreal volume
|
|
|
|
READ volume
|
|
|
|
WRITE setVolume
|
|
|
|
NOTIFY volumeChanged)
|
|
|
|
|
2021-04-11 18:11:36 +02:00
|
|
|
/*Q_PROPERTY(QUrl source
|
2021-04-11 15:26:28 +02:00
|
|
|
READ source
|
|
|
|
WRITE setSource
|
2021-04-11 18:11:36 +02:00
|
|
|
NOTIFY sourceChanged)*/
|
2021-04-11 15:26:28 +02:00
|
|
|
|
|
|
|
Q_PROPERTY(QMediaPlayer::MediaStatus status
|
|
|
|
READ status
|
|
|
|
NOTIFY statusChanged)
|
|
|
|
|
|
|
|
Q_PROPERTY(QMediaPlayer::State playbackState
|
|
|
|
READ playbackState
|
|
|
|
NOTIFY playbackStateChanged)
|
|
|
|
|
2021-04-11 17:13:44 +02:00
|
|
|
Q_PROPERTY(qreal playbackRate
|
|
|
|
READ playbackRate
|
|
|
|
WRITE setPlaybackRate
|
|
|
|
NOTIFY playbackRateChanged)
|
|
|
|
|
2021-04-11 15:26:28 +02:00
|
|
|
Q_PROPERTY(QMediaPlayer::Error error
|
|
|
|
READ error
|
|
|
|
NOTIFY errorChanged)
|
|
|
|
|
|
|
|
Q_PROPERTY(qint64 duration
|
|
|
|
READ duration
|
|
|
|
NOTIFY durationChanged)
|
|
|
|
|
|
|
|
Q_PROPERTY(qint64 position
|
|
|
|
READ position
|
|
|
|
WRITE setPosition
|
|
|
|
NOTIFY positionChanged)
|
|
|
|
|
|
|
|
Q_PROPERTY(bool seekable
|
|
|
|
READ seekable
|
|
|
|
NOTIFY seekableChanged)
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
2021-04-11 16:19:58 +02:00
|
|
|
explicit AudioManager(QObject *parent = nullptr);
|
|
|
|
|
2021-04-11 15:26:28 +02:00
|
|
|
static AudioManager &instance()
|
|
|
|
{
|
|
|
|
static AudioManager _instance;
|
|
|
|
return _instance;
|
|
|
|
}
|
|
|
|
|
|
|
|
~AudioManager() override;
|
|
|
|
|
|
|
|
[[nodiscard]] Entry* entry() const;
|
|
|
|
|
2021-04-11 16:19:58 +02:00
|
|
|
[[nodiscard]] bool playerOpen() const;
|
|
|
|
|
2021-04-11 15:26:28 +02:00
|
|
|
[[nodiscard]] bool muted() const;
|
|
|
|
|
|
|
|
[[nodiscard]] qreal volume() const;
|
|
|
|
|
2021-04-11 18:11:36 +02:00
|
|
|
//[[nodiscard]] QUrl source() const;
|
2021-04-11 15:26:28 +02:00
|
|
|
|
|
|
|
[[nodiscard]] QMediaPlayer::MediaStatus status() const;
|
|
|
|
|
|
|
|
[[nodiscard]] QMediaPlayer::State playbackState() const;
|
|
|
|
|
2021-04-11 17:13:44 +02:00
|
|
|
[[nodiscard]] qreal playbackRate() const;
|
|
|
|
|
2021-04-11 15:26:28 +02:00
|
|
|
[[nodiscard]] QMediaPlayer::Error error() const;
|
|
|
|
|
|
|
|
[[nodiscard]] qint64 duration() const;
|
|
|
|
|
|
|
|
[[nodiscard]] qint64 position() const;
|
|
|
|
|
|
|
|
[[nodiscard]] bool seekable() const;
|
|
|
|
|
|
|
|
Q_SIGNALS:
|
|
|
|
|
2021-04-11 17:13:44 +02:00
|
|
|
void playerOpenChanged(bool state);
|
2021-04-11 16:19:58 +02:00
|
|
|
|
2021-04-11 17:13:44 +02:00
|
|
|
void entryChanged(Entry* entry);
|
2021-04-11 15:26:28 +02:00
|
|
|
|
|
|
|
void mutedChanged(bool muted);
|
|
|
|
|
|
|
|
void volumeChanged();
|
|
|
|
|
2021-04-11 18:11:36 +02:00
|
|
|
//void sourceChanged();
|
2021-04-11 15:26:28 +02:00
|
|
|
|
|
|
|
void statusChanged(QMediaPlayer::MediaStatus status);
|
|
|
|
|
|
|
|
void playbackStateChanged(QMediaPlayer::State state);
|
|
|
|
|
2021-04-11 17:13:44 +02:00
|
|
|
void playbackRateChanged(qreal rate);
|
|
|
|
|
2021-04-11 15:26:28 +02:00
|
|
|
void errorChanged(QMediaPlayer::Error error);
|
|
|
|
|
|
|
|
void durationChanged(qint64 duration);
|
|
|
|
|
|
|
|
void positionChanged(qint64 position);
|
|
|
|
|
|
|
|
void seekableChanged(bool seekable);
|
|
|
|
|
|
|
|
void playing();
|
|
|
|
|
|
|
|
void paused();
|
|
|
|
|
|
|
|
void stopped();
|
|
|
|
|
|
|
|
public Q_SLOTS:
|
|
|
|
|
|
|
|
void setEntry(Entry* entry);
|
|
|
|
|
2021-04-11 16:19:58 +02:00
|
|
|
void setPlayerOpen(bool state);
|
|
|
|
|
2021-04-11 15:26:28 +02:00
|
|
|
void setMuted(bool muted);
|
|
|
|
|
|
|
|
void setVolume(qreal volume);
|
|
|
|
|
2021-04-11 18:11:36 +02:00
|
|
|
//void setSource(const QUrl &source);
|
2021-04-11 15:26:28 +02:00
|
|
|
|
|
|
|
void setPosition(qint64 position);
|
|
|
|
|
2021-04-11 17:13:44 +02:00
|
|
|
void setPlaybackRate(qreal rate);
|
|
|
|
|
2021-04-11 15:26:28 +02:00
|
|
|
void play();
|
|
|
|
|
|
|
|
void pause();
|
|
|
|
|
|
|
|
void stop();
|
|
|
|
|
|
|
|
void seek(qint64 position);
|
|
|
|
|
|
|
|
private Q_SLOTS:
|
|
|
|
|
|
|
|
void mediaStatusChanged();
|
|
|
|
|
|
|
|
void playerStateChanged();
|
|
|
|
|
|
|
|
void playerMutedChanged();
|
|
|
|
|
|
|
|
void playerVolumeChanged();
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
friend class AudioManagerPrivate;
|
|
|
|
|
|
|
|
std::unique_ptr<AudioManagerPrivate> d;
|
|
|
|
|
|
|
|
};
|