最近、プログラミングの記事が無いよねと貴方がいったから、10月29日はプログラミング記念日。
今日は、音楽フォーマットを知らなくても出来る!音楽ファイルのタグ情報の取得方法を紹介します。WMAとMP3で同じ関数が使える代わりに、ID3v2.3タグのこの項目!という指定は出来ません。
利用するのはWindow Media SDKです。
要はメディアプレーヤで取得できる情報をAPIで取得します。何の関数使うの?って事が分かれば簡単、ズバリWMCreateEditorです。
後はMSDNのマニュアルを見た方が早いですが、一応コードを。曲名の取得に“Title”という文字列を利用していますが、ヘルプやヘッダを読めば、他にも取得できる項目がある事が分かります。下のコードに少し埋めておきます。
#include <wmsdk.h>
#include <objbase.h>
#include <comdef.h>
#include <comip.h>
#include <strsafe.h>
#pragma comment(lib, "wmvcore.lib")
_COM_SMARTPTR_TYPEDEF(IWMMetadataEditor, __uuidof(IWMMetadataEditor));
_COM_SMARTPTR_TYPEDEF(IWMMetadataEditor2, __uuidof(IWMMetadataEditor2));
_COM_SMARTPTR_TYPEDEF(IWMReader, __uuidof(IWMReader));
_COM_SMARTPTR_TYPEDEF(IWMHeaderInfo, __uuidof(IWMHeaderInfo));
static const DWORD g_dwWMContentAttributes = 5;
static const WCHAR g_wszWMTitle[] =L"Title";
static const WCHAR g_wszWMAuthor[] =L"Author";
static const WCHAR g_wszWMDescription[] =L"Description";
static const WCHAR g_wszWMRating[] =L"Rating";
static const WCHAR g_wszWMCopyright[] =L"Copyright";
void GetMusicTag(LPCWSTR lpwzFileName)
{
IWMMetadataEditorPtr pEditor;
if(SUCCEEDED(WMCreateEditor(&pEditor)))
{
IWMMetadataEditor2Ptr pEditor2 = pEditor;
if(pEditor2)
{
if(SUCCEEDED(pEditor2->OpenEx(lpwzFileName, GENERIC_READ, FILE_SHARE_READ)))
{
IWMHeaderInfoPtr pHeaderInfo = pEditor2;
if(pHeaderInfo)
{
WORD wStreamNum = 0;
WMT_ATTR_DATATYPE attrType;
BYTE pbValue[1024];
WORD cbValue = 1024;
if(SUCCEEDED(pHeaderInfo->GetAttributeByName(&wStreamNum, g_wszWMTitle, &attrType, pbValue, &cbValue)))
{
_ASSERT(attrType == WMT_TYPE_STRING);
basic_string<WHCAR> strTitle; // For Test
strTitle.assign(reinterpret_cast<WCHAR*>(pbValue), cbValue);
}
pEditor->Close();
}
}
}
}
}
尚、このサンプルを実行しても何も表示されません。デバッカなどでstrTitleの変数に曲名が入ってる事を確認してください。




最近のコメント