Qt 使用tablib 获取多媒体tag信息

最近项目需要, 要获取音乐文件tag信息. 有两个方式, 本人偏向第二种方式. 效率比较高,可控性比较好.

一.QML方式

使用QML Audio component 进行解析. 将多媒体文件都放到Playlist中, 在遍历每一个文件取出文件中的tag.
```JavaScript
import QtQuick 2.7
import QtQuick.Controls 2.4
import QtMultimedia 5.8

Item {
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.
```cpp
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 项目.
QT tablib

原文地址:https://www.cnblogs.com/yongxo/p/9635286.html

时间: 2024-10-14 04:56:02

Qt 使用tablib 获取多媒体tag信息的相关文章

获取多媒体详细信息列表

实现效果: 知识运用: IWMPMedia类的getItemInfo方法 //该类为微软提供的一个多媒体播放类 string getItemInfo ( string bstrItemName)    //其getItemInfo方法用来获取当前播放媒体的歌手名 歌名等信息 实现代码: private void button1_Click(object sender, EventArgs e) { opEDL.ShowDialog(); if (opEDL.FileName != "opEDL&

Qt 获取Windows内存信息

通过调用Windows API来获取Windows 内存信息,并显示在界面上,通过与Windows 内存管理器对比可以看到结果是正确的. 实现的小工具的界面效果与内存管理器对比如下: 实现的完整代码: #pragma execution_character_set("utf-8") #ifndef QMEMORYINFO_H #define QMEMORYINFO_H #include <QtWidgets/QWidget> #include <QLabel>

集成微信第三方登录功能获取微信用户信息

最近公司要做微信的第三方登录,本来打算直接用第三方的框架就算了,就闲的想自己集成试试看. 然后发现被腾讯坑得不省人事. 前提,应用必须要在微信开发平台上注册,并且通过审核,有微信登录的权限. 首先,下载官方的demo.把libs的jar包拷到自己的工程里. 在应用的包名下,建一个wxapi的包目录,在里建一个叫WXEntryActivity的activity并实现IWXAPIEventHandler监听,用于微信回调数据! 下面是我自己的WXEntryActivity,OnUserInfoLis

C#获取MP3,WMA信息

用于获取MP3内部信息,包括歌曲名,歌手名等…… namespace FileBatchRemaer.domain { /// <summary> /// Mp3信息结构 /// </summary> public struct Mp3Info { public string identify; //TAG,三个字节 public string Title; //歌曲名,30个字节 public string Artist; //歌手名,30个字节 public string Al

Android获取手机相关信息

首先,一个小例子: package com.brio.testid; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.os.Bundle; import android.provider.Settings.Secure; import android.widget.TextView; public class MainActivity extends Activity {

获取MP3的信息

方法1: 1 //读取mp3里的信息 2 AudioFileID fileID; 3 4 AudioFileTypeID typeIdMP3 = kAudioFileMP3Type; 5 6 OSStatus status = noErr; 7 //读取mp3文件 8 status = AudioFileOpenURL((__bridge CFURLRef)fileURL, kAudioFileReadPermission, typeIdMP3, &fileID); 9 if (status !

php获取apk包信息

这段时间太忙了,一个月没有写博客了,稍微闲下来就感觉把在开发中遇到的问题记录下来 php上传安卓apk包的时候,需要获取安卓apk包内的信息 <?php /*解析安卓apk包中的压缩XML文件,还原和读取XML内容 依赖功能:需要PHP的ZIP包函数支持.*/ include('./Apkparser.php'); $appObj = new Apkparser(); $targetFile = a.apk;//apk所在的路径地址 $res = $appObj->open($targetFi

linux(ubuntu)下为python安装使用mutagen模块获取mp3文件信息包括封面图片的获取

首先是安装 下载地址:    https://pypi.python.org/pypi/mutagen 安装: tar -zxvf mutagen-1.29.tar.gz cd mutagen-1.29 ./setup.py build ./setup.py install 使用: from mutagen.mp3 import MP3, EasyMP3 from mutagen.id3 import EasyID3 from mutagen.id3 import COMM #EasyMP3继承

Atitit.获取主板与bios序列号获取硬件设备信息&#160;&#160;Wmi&#160;wmic&#160;的作用

Atitit.获取主板与bios序列号获取硬件设备信息  Wmi wmic 的作用 1 获取硬件核心基础核心基础Wmi1 2 其他资料2 3 Wmic WMI 命令行接口2 4 Atitit.获取主板与bios序列号2 5 参考3 1 获取硬件核心基础核心基础Wmi WMI,是Windows 2K/XP管理系统的核心:对于其他的Win32操作系统,WMI是一个有用的插件.WMI以CIMOM为基础,CIMOM即公共信息模型对象管理器(Common Information Model Object