給定mp3文件的路徑,如何使用IPropertyStore在Windows中使用C++訪問mp3元數據?
如何創建並初始化IPropertyStore對象以對該文件的元數據進行操作?
具體來說,如何從這裏得到:
"C:\\Music\\Viva Las Vegas.mp3"
到這裏:
store->GetValue(PKEY_Music_AlbumArtist, &variant);
下面是一些僞上下的代碼,以幫助澄清我想要做的事:
#include "stdafx.h"
#include <propsys.h>
#include <propkey.h>
void main()
{
// property store must somehow represent the mp3 file
IPropertyStore* store = "C:\\Music\\Viva Las Vegas.mp3"; // HELP!
PROPVARIANT variant;
// get the existing album artist
store->GetValue(PKEY_Music_AlbumArtist, &variant);
assert(variant== "Elvis Presley");
// set it to something else
variant= "ZZ Top";
store->SetValue(PKEY_Music_AlbumArtist, variant);
}
背景
也許有這樣做的更好的語言,但我想用C++(這是一個很長的故事)。
最初,在研究了mp3元數據之後,它似乎就像TagLib的ID3標籤一樣。所以我寫了一個在多個領域工作得很好的實用程序。但後來我發現TagLib僅限於很多可能字段的一小部分,我想要訪問它們。
我最關心的領域是專輯藝術家,因爲Windows Media Player使用它作爲默認排序順序,無法更改。
我修改了TagLib源代碼來訪問專輯藝術家而不是貢獻藝術家(通過將所有出現的'\ 251ART'改爲'\ 141ART'),但它不起作用。我確信有一種方法可以用ID3標籤完成所有事情,但我寧願不依賴像TagLib,ZLIB和CMake工具這樣的額外工具。我想使用IPropertyStore,因爲它是內置的,如果我能克服這個障礙,它似乎是最簡單的方法。
我在網上找到了一些IPropertyStore的例子,我試着按摩它們以適應我的需要,但沒有任何運氣,我仍然很困惑。
MSDN「幫助」毫無幫助 - 沒有規範,沒有示例 - 它甚至不告訴我要包含哪個頭文件。與之前的版本相比,MSDN幫助非常可怕,或者我錯過了什麼?沒有谷歌我會被搞砸。無論如何...
我希望有人能夠在3或4行代碼中顯示我如何爲我的目的創建和初始化IPropertyStore。提前致謝。