2013-01-15 31 views
0

請原諒我,如果這個問題已經在這個網站的某個地方回答了,但是我沒有找到任何東西,當我搜索它。我已經使用taglib-sharp在C#中爲.mp3文件編寫了ID3v1/2標籤編輯器,並且taglib-sharp將曲目編號視爲uint編號。根據id3.org好的方式來編寫ID3v2軌道號在C#中的字符串?

「在組磁道數/位置」的幀是包含在其原始 記錄音頻文件的順序號的數字串 。這可以用「/」字符和數字 字符串進行擴展,該字符串包含原始 記錄中的軌道/元素總數。例如。 「4/9」。

個人我不使用「/」,但我傾向於寫「03」而不是「3」。有沒有簡單的方法直接將曲目編號作爲字符串寫入標記,而不是通過uint?

另外,側面的問題:taglib似乎並不支持一些標籤,特別是URL,Orig。藝術家,發佈者和編碼。任何想法如何處理這些?

回答

0

不,您不能將string保存爲intuint而不能先投射。爲什麼不只是你自己的價值3保存爲uint按照庫您正在使用和使用這樣的:

uint track = 3; 
string strTrack = track.ToString("00"); 

顯示呢?

如果它的許可證允許,您仍然可以修改庫以滿足您的需求。

我已經快速瀏覽過taglib sharp,它遠不支持標籤中的所有現有框架。它僅支持最常見的幀。對於其他人,我認爲你可以使用某種默認類,但我不記得名字。否則,你仍然可以自己去擴展圖書館,除非有一些其他這樣的圖書館可用,我不知道。

+0

我知道你不能隱式地在字符串和int/uint之間進行轉換。問題在於uint和string之間的轉換是由taglib完成的,如果您只使用taglib,則必須使用uint,這會破壞有關額外零,破折號等的任何信息,然後再由庫轉換回字符串。然而,我不知道如何修改庫或如何直接處理標籤。 – Eric

+0

如果您只想使用'03'進行顯示,您可以使用我的解決方案。如果確實用於存儲,則會丟失信息。所以,如果這確實是一個問題,那麼除非您設法擴展它,否則您不能使用taglib-sharp。這個庫不遵循ID3規範的事實確實是一個問題。檢查他們的網站,看看你是否可以下載他們的來源,是否允許修改它。 – Guillaume

1

TagLib#中的跟蹤字段是對標籤字段各種標籤規範意圖的通用近似和簡化。對於ID3v2標籤,這是假設TRCK字段由一個或兩個數字字符串組成,每個字符串用斜槓分隔,並按照規範將其轉換爲數字。

這就是說,這是一個文本字段,你可以隨心所欲地做任何事情。你只需要訪問文本框架來讀取或寫入它。

寫作是很容易通過Id3v2.Tag.SetTextFrame

Id3v2.Tag tag = (Id3v2.Tag)file.GetTag(TagTypes.Id3v2, true); // Get or create ID3v2 tag. 
tag.SetTextFrame(FrameType.TRCK, "03"); // Add or update TRCK frame. 

閱讀是有點困難,因爲GetTextAsString和GetTextAsArray方便的方法是私有的。 (我責怪沒有好作者。)幸運的是,這些方法非常輕量級,閱讀如下。

Id3v2.Tag tag = (Id3v2.Tag)file.GetTag(TagTypes.Id3v2, false); 
if (tag != null) { 

    TextInformationFrame trackFrame = TextInformationFrame.Get (tag, FrameType.TRCK, false); 
    if (trackFrame != null) { 
     string [] text = trackFrame.Text; 

     // Do something. 
    } 
} 
+0

GetTextAsString()方法是私有的。 – Snakebyte

+0

@Snakebyte D'oh!更新的代碼應該可以工作。 –

+0

對不起,我剛剛下載了tagLib#。你的示例代碼中的'file'是什麼類型的對象? – sab669

相關問題