Qt 使用tablib 获取多媒体tag信息
发布日期:2021-06-29 01:27:27
浏览次数:2
分类:技术文章
本文共 5280 字,大约阅读时间需要 17 分钟。
最近项目需要, 要获取音乐文件tag信息. 有两个方式, 本人偏向第二种方式. 效率比较高,可控性比较好.
一.QML方式
使用QML Audio component 进行解析. 将多媒体文件都放到Playlist中, 在遍历每一个文件取出文件中的tag.
import QtQuick 2.7import QtQuick.Controls 2.4import QtMultimedia 5.8Item { property alias playList: parseMultimedia.playlist property alias musicPlayer: musicPlayer WorkerScript { id: worker property bool running: false property var type source: "dataloader.js" onMessage: { if (messageObject.action === 'sortArtist') { var msg = { 'action': 'sortAlbum', 'model': songsListModel, 'dest': albumListModel}; worker.sendMessage(msg); } } } Audio { id: musicPlayer autoPlay: true autoLoad: true onSourceChanged: { } playlist: Playlist { id: musicPlayList } } Audio { id: parseMultimedia property var fileName //autoPlay :true autoLoad: true muted: true loops: Audio.Infinite playlist: parsePlaylist } Playlist { id: parsePlaylist } Timer { id: insertTimer property int indexPath: 0 interval: 200; running: false; repeat: true onTriggered: { if ( indexPath < musicManager.count()) { parseMultimedia.play() parseMultimedia.pause() var title = parseMultimedia.metaData.title var artist = parseMultimedia.metaData.albumArtist if (artist === undefined) { artist = 'unknown' } var album = parseMultimedia.metaData.albumTitle if (album === undefined) { album = 'unknown' } var source = Qt.resolvedUrl(parseMultimedia.playlist.itemSource(indexPath)) var fileName = musicManager.getFileInfoName(indexPath) if (title === undefined) { title = fileName } songsListModel.set(parsePlaylist.currentIndex, { "playlistIndex": parsePlaylist.currentIndex, "title": parseMultimedia.metaData.title, "album": album, "artist": artist, "source": source, "fileName": fileName }); indexPath = indexPath + 1 parsePlaylist.next() // listView.forceLayout(); } else { if (indexPath >= musicManager.count() ) { insertTimer.stop() insertTimer.indexPath = 0 appWindow.isReady = true allSongListModelReady(); } } } onRunningChanged: { if (!running) { var msg = { 'action': 'sortArtist', 'model': songsListModel, 'dest':artistListModel}; worker.sendMessage(msg); } } } Timer { id: loadModelTimer property int indexPath: 0 running: false; repeat: false onTriggered: { parsePlaylist.currentIndex = 0 insertTimer.start() } } Connections { target: musicManager onLoadfinish: { parsePlaylist.clear() loadModelTimer.interval = musicManager.count() loadModelTimer.start() for (var i = 0; i< musicManager.count(); i++) { parsePlaylist.addItem("file://" + musicManager.getFileInfoPath(i)) } loadFolderData(); } } function loadFolderData() { for (var i = 0; i < musicManager.folderCount(); i++) { var item = musicManager.folderItem(i); folderListModel.set(i, { "baseName": item.baseName, "uid": item.uId , "dropTarget": "none", "isFolder": item.isFolder, "parentFolder": item.parentFolder, "folderOpen":item.folderOpen, "source": item.path, "fileCount": item.fileCount }) } } Component.onCompleted: { musicManager.runParse(); }}
二.C++ tablib 方式
这个没什么好说的, 直接将tablib编译成和一平台一样的类型就可以了.例如: arm. x86.
int main(int argc, char **argv) { QString sname; QString singer; QString album; QFileInfo fileInfo(QString("/sdcard/Music/Alone.mp3")); qDebug() << fileInfo.absoluteFilePath(); const char *fileName = "/sdcard/Music/Alone.mp3"; TagLib::MPEG::File *mpegFile = new TagLib::MPEG::File(fileName); qDebug() << "mpegFile: " << mpegFile; if(false == mpegFile->isOpen()) { qDebug() << "-----open failed---"; } else { sname = QString(mpegFile->tag()->title().toCString(true)); singer = QString(mpegFile->tag()->artist().toCString(true)); album = QString(mpegFile->tag()->album().toCString(true)); qDebug() << sname; qDebug() << singer; qDebug() << album; }}
这里有我自己编译QT 项目.
转载地址:https://blog.csdn.net/yt_42370304/article/details/82663620 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月23日 18时40分31秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
使用 Python 为女神挑选口红
2019-04-29
微信群总是有人发广告?看我用Python写一个自动化机器人消灭他!
2019-04-29
10 行 Python 代码自动清理电脑内重复文件,解放双手!
2019-04-29
我用几行 Python 自动化脚本完美解决掉了小姐姐的微信焦虑感
2019-04-29
python爬取双色球网站中奖纪录,我也想中奖
2019-04-29
python爬取花木兰豆瓣影评,并进行词云分析
2019-04-29
python爬取英雄联盟官网所有英雄皮肤数据
2019-04-29
python爬取堆糖网每日精选图片
2019-04-29
Python爬取高质量电脑壁纸,还是很好看的
2019-04-29
python 爬虫 黑科技
2019-04-29
Python 一键制作微信好友图片墙
2019-04-29
Pipenv – 超好用的 Python 包管理工具
2019-04-29
可能是最全面的 python 字符串拼接总结
2019-04-29
利用Python爬取微博数据生成词云图片实例代码
2019-04-29
对Python3 解析html的几种操作方式小结
2019-04-29
Python基于opencv调用摄像头获取个人图片的实现方法
2019-04-29
Opencv+Python实现图像运动模糊和高斯模糊的示例
2019-04-29
python初学者入门学习笔记:交互式环境与print输出
2019-04-29
python初学者入门学习笔记:变量的使用
2019-04-29
python初学者入门学习笔记:字符串的操作(连接/获取长度/截取)
2019-04-29