Reformat
This commit is contained in:
parent
10769eef09
commit
58e8345542
20 changed files with 2063 additions and 1901 deletions
|
|
@ -2,113 +2,128 @@
|
|||
#include <QDebug>
|
||||
|
||||
AudioPlayer::AudioPlayer(QObject *parent)
|
||||
: QObject(parent),
|
||||
mediaPlayer(new QMediaPlayer(this)),
|
||||
audioOutput(new QAudioOutput(this)),
|
||||
positionTimer(new QTimer(this))
|
||||
: QObject(parent),
|
||||
mediaPlayer(new QMediaPlayer(this)),
|
||||
audioOutput(new QAudioOutput(this)),
|
||||
positionTimer(new QTimer(this))
|
||||
{
|
||||
// Set up audio output with default device
|
||||
mediaPlayer->setAudioOutput(audioOutput);
|
||||
|
||||
connect(mediaPlayer, &QMediaPlayer::playbackStateChanged,
|
||||
this, &AudioPlayer::handlePlaybackStateChanged);
|
||||
connect(mediaPlayer, &QMediaPlayer::mediaStatusChanged,
|
||||
this, &AudioPlayer::handleMediaStatusChanged);
|
||||
|
||||
// Set up position timer for updating playback position
|
||||
positionTimer->setInterval(500); // Update every 500ms
|
||||
connect(positionTimer, &QTimer::timeout, [this]() {
|
||||
if (isPlaying()) {
|
||||
emit positionChanged(mediaPlayer->position());
|
||||
}
|
||||
});
|
||||
// Set up audio output with default device
|
||||
mediaPlayer->setAudioOutput(audioOutput);
|
||||
|
||||
connect(mediaPlayer, &QMediaPlayer::playbackStateChanged,
|
||||
this, &AudioPlayer::handlePlaybackStateChanged);
|
||||
connect(mediaPlayer, &QMediaPlayer::mediaStatusChanged,
|
||||
this, &AudioPlayer::handleMediaStatusChanged);
|
||||
|
||||
// Set up position timer for updating playback position
|
||||
positionTimer->setInterval(500); // Update every 500ms
|
||||
connect(positionTimer, &QTimer::timeout, [this]()
|
||||
{
|
||||
if (isPlaying())
|
||||
{
|
||||
emit positionChanged(mediaPlayer->position());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
AudioPlayer::~AudioPlayer()
|
||||
{
|
||||
stop();
|
||||
stop();
|
||||
}
|
||||
|
||||
void AudioPlayer::play(const QString &filePath)
|
||||
{
|
||||
if (isPlaying()) {
|
||||
stop();
|
||||
}
|
||||
|
||||
mediaPlayer->setSource(QUrl::fromLocalFile(filePath));
|
||||
mediaPlayer->play();
|
||||
|
||||
// Start position timer
|
||||
positionTimer->start();
|
||||
if (isPlaying())
|
||||
{
|
||||
stop();
|
||||
}
|
||||
|
||||
mediaPlayer->setSource(QUrl::fromLocalFile(filePath));
|
||||
mediaPlayer->play();
|
||||
|
||||
// Start position timer
|
||||
positionTimer->start();
|
||||
}
|
||||
|
||||
void AudioPlayer::play()
|
||||
{
|
||||
if (!isPlaying()) {
|
||||
mediaPlayer->play();
|
||||
positionTimer->start();
|
||||
}
|
||||
if (!isPlaying())
|
||||
{
|
||||
mediaPlayer->play();
|
||||
positionTimer->start();
|
||||
}
|
||||
}
|
||||
|
||||
void AudioPlayer::pause()
|
||||
{
|
||||
if (isPlaying()) {
|
||||
mediaPlayer->pause();
|
||||
positionTimer->stop();
|
||||
}
|
||||
if (isPlaying())
|
||||
{
|
||||
mediaPlayer->pause();
|
||||
positionTimer->stop();
|
||||
}
|
||||
}
|
||||
|
||||
void AudioPlayer::setPosition(int position)
|
||||
{
|
||||
mediaPlayer->setPosition(position);
|
||||
mediaPlayer->setPosition(position);
|
||||
}
|
||||
|
||||
void AudioPlayer::stop()
|
||||
{
|
||||
mediaPlayer->stop();
|
||||
positionTimer->stop();
|
||||
mediaPlayer->stop();
|
||||
positionTimer->stop();
|
||||
}
|
||||
|
||||
bool AudioPlayer::isPlaying() const
|
||||
{
|
||||
return mediaPlayer->playbackState() == QMediaPlayer::PlayingState;
|
||||
return mediaPlayer->playbackState() == QMediaPlayer::PlayingState;
|
||||
}
|
||||
|
||||
int AudioPlayer::duration() const
|
||||
{
|
||||
return mediaPlayer->duration();
|
||||
return mediaPlayer->duration();
|
||||
}
|
||||
|
||||
int AudioPlayer::position() const
|
||||
{
|
||||
return mediaPlayer->position();
|
||||
return mediaPlayer->position();
|
||||
}
|
||||
|
||||
void AudioPlayer::handlePlaybackStateChanged(QMediaPlayer::PlaybackState state)
|
||||
{
|
||||
if (state == QMediaPlayer::PlayingState) {
|
||||
emit playbackStarted();
|
||||
} else if (state == QMediaPlayer::StoppedState ||
|
||||
state == QMediaPlayer::PausedState) {
|
||||
// Check if we reached the end
|
||||
if (mediaPlayer->position() >= mediaPlayer->duration() - 100) {
|
||||
emit playbackFinished();
|
||||
}
|
||||
}
|
||||
if (state == QMediaPlayer::PlayingState)
|
||||
{
|
||||
emit playbackStarted();
|
||||
}
|
||||
else if (state == QMediaPlayer::StoppedState ||
|
||||
state == QMediaPlayer::PausedState)
|
||||
{
|
||||
// Check if we reached the end
|
||||
if (mediaPlayer->position() >= mediaPlayer->duration() - 100)
|
||||
{
|
||||
emit playbackFinished();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AudioPlayer::handleMediaStatusChanged(QMediaPlayer::MediaStatus status)
|
||||
{
|
||||
if (status == QMediaPlayer::EndOfMedia) {
|
||||
emit playbackFinished();
|
||||
} else if (status == QMediaPlayer::LoadedMedia ||
|
||||
status == QMediaPlayer::BufferedMedia) {
|
||||
// Media loaded successfully, emit duration
|
||||
int duration = mediaPlayer->duration();
|
||||
if (duration > 0) {
|
||||
emit durationChanged(duration);
|
||||
}
|
||||
} else if (status == QMediaPlayer::InvalidMedia) {
|
||||
emit playbackError(mediaPlayer->errorString());
|
||||
}
|
||||
if (status == QMediaPlayer::EndOfMedia)
|
||||
{
|
||||
emit playbackFinished();
|
||||
}
|
||||
else if (status == QMediaPlayer::LoadedMedia ||
|
||||
status == QMediaPlayer::BufferedMedia)
|
||||
{
|
||||
// Media loaded successfully, emit duration
|
||||
int duration = mediaPlayer->duration();
|
||||
if (duration > 0)
|
||||
{
|
||||
emit durationChanged(duration);
|
||||
}
|
||||
}
|
||||
else if (status == QMediaPlayer::InvalidMedia)
|
||||
{
|
||||
emit playbackError(mediaPlayer->errorString());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue