写一个QTAV的音乐播放器

11 篇文章 0 订阅
9 篇文章 0 订阅

关于QTAV的介绍和编译请看我之前的文章,直接上代码
因为音乐播放器只有一个所以是个单例
头文件:

#pragma once

#include <QObject>
#include <QtAV/AVPlayer.h>
#include <QtAVWidgets/GLWidgetRenderer2.h>
using namespace QtAV;
#define avplayer QtavPlayer::getInstance()

class QtavPlayer : public QObject
{
	Q_OBJECT

private:
	QtavPlayer(QObject *parent = nullptr);
	void initPlayer();
public:
	static QtavPlayer* getInstance();

	// 播放歌曲
	void playSong(const QString& url);
	// 停止播放
	void stop();
	// 播放
	void play();
	// 暂停
	void pause(bool isPause);
	// 设置播放位置
	void setPositionValue(qint64 position);
	// 设置音量
	void setVolume(qreal);
	// 获取音量
	qreal getVolume();
	// 获取时长
	qint64 getDuration();
	// 设置索引
	void setIndex(unsigned int index);

	~QtavPlayer();

private slots:
	void onStarted();

signals:
	void positionChanged(qint64);
	void started();
	void stoped();
	void stateChanged(AVPlayer::State);
	void error(const AVError& e);
	void currentIndexChanged(unsigned int index);
	void interruptTimeoutChanged();

private:
	AVPlayer* m_Player = nullptr;;
	AudioOutput* m_Audio = nullptr;
	// 歌曲索引
	unsigned int m_index = -1;

};

cpp

#include "qtavplayer.h"

QtavPlayer::QtavPlayer(QObject *parent)
	: QObject(parent)
{
	initPlayer();
}

QtavPlayer::~QtavPlayer()
{
	if (m_Player)
	{
		delete m_Player, m_Player = nullptr;
	}
}

void QtavPlayer::onStarted()
{
	emit currentIndexChanged(m_index);
}

QtavPlayer* QtavPlayer::getInstance()
{
	static QtavPlayer player;
	return &player;
}

void QtavPlayer::initPlayer()
{
	m_Player = new AVPlayer(this);
    //得到音频输出接口
    m_Audio = m_Player->audio();
	m_Player->setInterruptTimeout(3000);
	connect(m_Player,&AVPlayer::positionChanged,this,&QtavPlayer::positionChanged);
	connect(m_Player,&AVPlayer::started,this,&QtavPlayer::onStarted);
	connect(m_Player, &AVPlayer::stopped, this, &QtavPlayer::stoped);
	connect(m_Player,&AVPlayer::stateChanged,this,&QtavPlayer::stateChanged);
	connect(m_Player,&AVPlayer::error,this,&QtavPlayer::error);
	connect(m_Player, &AVPlayer::interruptTimeoutChanged, this, &QtavPlayer::interruptTimeoutChanged);
}

void QtavPlayer::playSong(const QString& url)
{
	m_Player->play(url);
}

void QtavPlayer::stop()
{
	m_Player->stop();
}

void QtavPlayer::play()
{
	m_Player->play();
}

void QtavPlayer::pause(bool isPause)
{
	m_Player->pause(isPause);
}

void QtavPlayer::setPositionValue(qint64 position)
{
	m_Player->setPosition(position);
}

void QtavPlayer::setVolume(qreal value)
{
	value /= 100.0;
	m_Audio->setVolume(value);
}

qreal QtavPlayer::getVolume()
{
	return m_Audio->volume();
}

qint64 QtavPlayer::getDuration()
{
	return m_Player->duration();
}

void QtavPlayer::setIndex(unsigned int index)
{
	m_index = index;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值