2020年3月25日水曜日

Taglibの使い方 2 Qtで実際に使う


コード


コードを眺めていただくのが早いと思います
これはtextEditを配置したGUIでそこにタグを出力するものでファイル名を*fnameとしてます

TagLib::FileRef f( fname->toUtf8().data() ); // qstring --> char*
ui->textEdit->append(*fname) ;
  if(!f.isNull() && f.tag()) {
    TagLib::Tag *tag = f.tag();
    ui->textEdit->append("title : " + QString::fromStdWString( tag->title().toWString ()    ) ) ;
    ui->textEdit->append("album : " + QString::fromStdWString( tag->album().toWString ()    ) ) ;
    ui->textEdit->append("artist : " +  QString::fromStdWString( tag->artist().toWString ()    )) ;
  ui->textEdit->append("Album-artist : " + QString::fromStdWString( f.file()->properties()["ALBUMARTIST"].toString().toWString() )) ;
    ui->textEdit->append("track : " + QString::number( tag->track()  )) ;
    ui->textEdit->append("year : " + QString::number( tag->year()  )) ;
    ui->textEdit->append("length : " + QString::number( f.audioProperties()->lengthInSeconds() ) + " second") ;
  }else{
    ui->textEdit->setText("error") ;
  }

解説的なもの


凄く簡単にタグを取れますが、TagLib::Tagから直接取れるタグは基本的なものだけ
よく使う album-artist はTagLib::PropertyMapから取り出します
ここからどんなタグが取り出せるかはここを参照
→ https://taglib.org/api/classTagLib_1_1PropertyMap.html
演奏時間はまた別に取得します
タグが存在しなくてもエラーにはならずnullになるだけなので使いやすいね

文字列の扱いがちょっと面倒、QStringにするのも面倒だけどまあこれは仕方ないっす
日本語だとWにしておいた方が良いと思います

Taglibの内部処理としてはファイルの種類毎に取得の方法は違うみたいだけど、そういうことは意識しなくて良いようにできててありがたいです
そこら辺が最初わからなくて悩みました
pythonでmutagenを使ったときと同じだった ( ´∀`)

foobarのように音楽ファイルのタグを読み込んだDBを作ろうとしてます
既にpythonで自作済みなんだけど、Qt c++だとどれくらい速くなるのか試してみたいのさ
少しだけQtにも慣れてきたし、外部のライブラリってのも使ってみたかった
幅が広がってきて嬉しいわ

0 件のコメント:

コメントを投稿