用QT自带的QMediaPlayer写一个音乐播放器

9 篇文章 0 订阅

直接上代码
头文件

#pragma once

#include <QObject>

class QMediaPlayer;
class QMediaPlaylist;

#define SfPlayer MusicPlayer::GetInstance()

class MusicPlayer : public QObject
{
	Q_OBJECT

private:
	MusicPlayer(QObject *parent = nullptr);
public:
	~MusicPlayer();
	static MusicPlayer* GetInstance();

	// 添加音乐
	void addMusicMedia(QUrl);
	// 设置当前播放歌曲
	void setCurrentSong(int index);
	// 获取当前播放索引
	int getCurrentIndex();
	// 播放歌曲
	void playSong();
	// 停止播放
	void stopSong();
	// 暂停播放
	void puaseSong();
	// 设置音量
	void setVolumeValue(int);
	// 获取当前音量
	int getVolumeValue();
	// 设置播放位置
	void setPosition(qint64 position);
	// 获取播放位置
	qint64 getPosition();
	// 获取时长
	int getDuration();
	// 清楚音乐列表
	void clearMusicList();

signals:
	void positionChanged(qint64 position);
	void stateChanged(int stateType);
	void currentIndexChanged(int index);

private:
	QMediaPlayer* player = nullptr;
	QMediaPlaylist* playList = nullptr;
};

cpp

#include "musicplayer.h"

#include "../data/SeeFmGui.h"
#include <QMediaPlayer>
#include <QMediaPlaylist>


MusicPlayer::MusicPlayer(QObject *parent)
	: QObject(parent)
{
	player = new QMediaPlayer(this);
	player->seekableChanged(true);
	playList = new QMediaPlaylist(this);
	playList->setPlaybackMode(QMediaPlaylist::CurrentItemOnce);
	player->setPlaylist(playList);
	connect(player,&QMediaPlayer::positionChanged,this,&MusicPlayer::positionChanged);
	connect(player, &QMediaPlayer::stateChanged, this, &MusicPlayer::stateChanged);
	connect(playList, &QMediaPlaylist::currentIndexChanged, this, &MusicPlayer::currentIndexChanged);
}

MusicPlayer::~MusicPlayer()
{
	if (player)
	{
		delete player, player = nullptr;
	}

	if (playList)
	{
		delete playList, playList = nullptr;
	}
}

MusicPlayer* MusicPlayer::GetInstance()
{
	static MusicPlayer player;
	return &player;
}

void MusicPlayer::addMusicMedia(QUrl url)
{
	playList->addMedia(url);
}

void MusicPlayer::setCurrentSong(int index)
{
	playList->setCurrentIndex(index);
}

int MusicPlayer::getCurrentIndex()
{
	return playList->currentIndex();
}

void MusicPlayer::playSong()
{
	player->play();
}

void MusicPlayer::stopSong()
{
	player->stop();
}

void MusicPlayer::puaseSong()
{
	player->pause();
}

void MusicPlayer::setVolumeValue(int vol)
{
	player->setVolume(vol);
}

int MusicPlayer::getVolumeValue()
{
	return player->volume();
}

void MusicPlayer::setPosition(qint64 position)
{
	player->setPosition(position);
}

qint64 MusicPlayer::getPosition()
{
	return player->position();
}

int MusicPlayer::getDuration()
{
	return player->duration();
}

void MusicPlayer::clearMusicList()
{
	playList->clear();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值