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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:QML中用javascript 实现中文转换拼音
下一篇:Ubuntu 下读取多媒体文件tag 软件

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月23日 18时40分31秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章