id3lib
id3lib-3.8.3binaries.zip
id3lib-3.8.3.tar.gz
を落としてくる。
id3lib-3.8.3binaries.zipからは、Release以下のdllとlibを取り出す。
id3lib-3.8.3.tar.gzからinclude以下を取り出す。
pathを通しておく。
リネーム用プログラムを作成(後述)。

展開後のファイルを適当なディレクトリに置く

適当にディレクトリを掘って、リネーム用プログラムを置く

コマンドプロンプトから適当に実行

動けば正義、『.mp3』っていうファイル名のは諦めようw

変換できていない理由はファイル名がまずくて読み込めない、或いはID3を読めなかったのが原因かな

適当にファイル名を付け直してリネーム用プログラムに投げる
どうにもならないのは、_UNKNOWN_00.mp3とか適当にリネームしよう
『"Arpeggione Sonata" from Schubert's piano Sonata D. 821 1st. Allegro moderato』っていう曲はunicodeで入れてあるようだ、ぐぬぬ。
リネーム用プログラムは次のような感じで。
#include
#include
#include
bool getName(std::string& sNameNew, const std::string& sNameFile);
int main(int argc, char *argv[])
{
std::string sNameBefore;
std::string sNameAfter;
if (2 != argc)
return 1;
sNameBefore = argv[1];
if (!getName(sNameAfter, sNameBefore))
return 2;
if (!MoveFileEx(sNameBefore.c_str(), sNameAfter.c_str(), MOVEFILE_COPY_ALLOWED))
return 3;
return 0;
}
bool getName(std::string& sNameNew, const std::string& sNameFile)
{
ID3_Tag tag;
ID3_Frame *pFrame;
ID3_Field *pField;
char *p;
tag.Link(sNameFile.c_str(), true, false);
pFrame = tag.Find(ID3FID_TITLE);
if (NULL == pFrame)
return false;
pField = pFrame->GetField(ID3FN_TEXT);
if (NULL == pField)
return false;
if (NULL == pField->GetRawText())
return false;
p = new char[pField->Size() + 1];
if (NULL == p)
return false;
CopyMemory(p, pField->GetRawText(), pField->Size());
p[pField->Size()] = '\0';
sNameNew.erase();
sNameNew.append(p);
sNameNew.append(".mp3");
delete[] p;
return true;
}
id3lib-3.8.3binaries.zip
id3lib-3.8.3.tar.gz
を落としてくる。
id3lib-3.8.3binaries.zipからは、Release以下のdllとlibを取り出す。
id3lib-3.8.3.tar.gzからinclude以下を取り出す。
pathを通しておく。
リネーム用プログラムを作成(後述)。

展開後のファイルを適当なディレクトリに置く

適当にディレクトリを掘って、リネーム用プログラムを置く

コマンドプロンプトから適当に実行

動けば正義、『.mp3』っていうファイル名のは諦めようw

変換できていない理由はファイル名がまずくて読み込めない、或いはID3を読めなかったのが原因かな

適当にファイル名を付け直してリネーム用プログラムに投げる
どうにもならないのは、_UNKNOWN_00.mp3とか適当にリネームしよう
『"Arpeggione Sonata" from Schubert's piano Sonata D. 821 1st. Allegro moderato』っていう曲はunicodeで入れてあるようだ、ぐぬぬ。
リネーム用プログラムは次のような感じで。
#include
#include
#include
bool getName(std::string& sNameNew, const std::string& sNameFile);
int main(int argc, char *argv[])
{
std::string sNameBefore;
std::string sNameAfter;
if (2 != argc)
return 1;
sNameBefore = argv[1];
if (!getName(sNameAfter, sNameBefore))
return 2;
if (!MoveFileEx(sNameBefore.c_str(), sNameAfter.c_str(), MOVEFILE_COPY_ALLOWED))
return 3;
return 0;
}
bool getName(std::string& sNameNew, const std::string& sNameFile)
{
ID3_Tag tag;
ID3_Frame *pFrame;
ID3_Field *pField;
char *p;
tag.Link(sNameFile.c_str(), true, false);
pFrame = tag.Find(ID3FID_TITLE);
if (NULL == pFrame)
return false;
pField = pFrame->GetField(ID3FN_TEXT);
if (NULL == pField)
return false;
if (NULL == pField->GetRawText())
return false;
p = new char[pField->Size() + 1];
if (NULL == p)
return false;
CopyMemory(p, pField->GetRawText(), pField->Size());
p[pField->Size()] = '\0';
sNameNew.erase();
sNameNew.append(p);
sNameNew.append(".mp3");
delete[] p;
return true;
}




