2012-11-13 4 views
3

Taglib-sharp를 사용하여 레이블/게시자 필드를 업데이트하려고하지만 개체 브라우저를 사용하여 개체 계층 구조 어디에도 표시되지 않습니다.taglib-sharp에서 Label/Publisher와 동일한 필드가 있습니까?

저는 Google을 통해 문서를 검색 한 결과 음식을 제공하지 않는 분야 인 것으로 보입니다.

그 필드를 편집 할 수있는 대안을 찾아보기 전에 (내가 한 가지 제안 할 수 있겠습니까?) 그 필드를 편집 할 수 있기 전에 마지막 균열이 있고 더 많은 정보를 가진 TagLib-sharp에 익숙한 StackOverflow 커뮤니티에서 물어볼 것이라고 생각했습니다. 의견? 사전에

감사합니다,

프랜시스

업데이트 : 나는 그런 mpg123 & UltraID3Lib 같은 다른 라이브러리를 조사했지만 그들은 같은 한계를 갖고있는 것 같다.

답변

4

음, Daniel Fuchs 대답이 저에게 효과적이지 않았습니다. 그러나 그것은 시작이었습니다.

태그 라이브러리 날카로운 코드에서 필드를 추가하는 단계에 의해 단계는 다음과 같습니다

  1. 다운로드 Source

  2. 파일 열기 태그 라이브러리/Tag.cs ​​ 다음과 같은 코드를 삽입 (PerformersSort 250 행 아래에 삽입했습니다.) :

    public virtual string Publisher 
    { 
        get { return ""; } 
        set { } 
    } 
    
  3. TagLib/Id3v2/Tag 파일을 엽니 다.

    public override string Publisher 
    { 
        get { return GetTextAsString(FrameType.TPUB); } 
        set { SetTextFrame(FrameType.TPUB, value); } 
    } 
    
  4. 열기 태그 라이브러리/ID3V2/FrameTypes.cs 다음 코드를 삽입 (내가 그것을 삽입 된 파일 : CS는 다음과 같은 코드 를 삽입 (나는 PerformersSort 아래 라인 1292 그것을 삽입) TPOS, 라인 71) 이하 :

    public static readonly ReadOnlyByteVector TPUB = "TPUB"; 
    
  5. 는 이제 "아하"일을 온다. 파일 태그 라이브러리/CombinedTag.cs ​​을 열고 다음 코드 를 삽입 (나는 PerformersSort, 라인 (318) 아래에 삽입) :

    마지막으로
    public override string Publisher 
    { 
        get 
        { 
         foreach (Tag tag in tags) 
         { 
          if (tag == null) 
           continue; 
    
          string value = tag.Publisher; 
    
          if (value != null) 
           return value; 
         } 
    
         return null; 
        } 
    
        set 
        { 
         foreach (Tag tag in tags) 
          if (tag != null) 
           tag.Publisher = value; 
        } 
    } 
    
  6. 코드를 컴파일합니다. 중요

: 나는뿐만 아니라, 코드를 컴파일하는 문제가 있었다. SharpZipLib dll (.NET 2.0)을 다운로드하고이 dll을 taglib 프로젝트에 포함해야합니다. 또한 Nuget으로 NUnit을 설치해야했습니다. 마침내 GDK lib와 테스트 코드 내부의 모든 오류에 대해 주석을 달았습니다. 프로덕션에서는 사용되지 않을 것이기 때문입니다.

+0

훌륭한 후속 조치 주셔서 감사합니다. – Francis

+0

이 작품을 확인할 수 있습니다. 훌륭한 답변. 굉장한 물건 JoaoBrunoah! – Francis

0

저는 TagLib #에 익숙하지 않지만 Qt 프로젝트에서 TagLib을 사용하고 있습니다.이 정보를 검색 할 때 TagLib::File::properties을 검사합니다. 문서를 살펴보면 모든 속성과 값이있는 문자열 맵일뿐입니다.

희망 TagLib #에는이 방법이 있습니다.

+0

Vinicius 제안에 감사드립니다. 나는 TagLib-sharp 소스 코드를 살펴보고 코드를 직접 확장 할 수 있는지 확인하지 않았다. 이 중 일부 경험이 있다면 큰 도움이 될만한 몇 가지 지침을 전달할 것입니다. – Francis

+0

안녕하세요, 방금 확인했는데 실제로 TagLib #는 TagLib처럼 'TagLib :: File :: properties'를 노출하지 않습니다. 어쩌면 C TagLib C API를 사용할 수 있지만 C 함수에 대해 C# 래퍼를 선언해야합니다. 또한 Windows 인 경우 TagLib C++ DLL이 필요합니다.이 DLL은 Windows에서 빌드하기가 다소 어렵지만 직접 컴파일 한 것을 보낼 수 있습니다. –

+0

후속 조치를 보내 주셔서 감사합니다. C++ dll을 통해 보낼 수 있다면 크게 감사하겠습니다. 예, 저는 Windows 7 64 비트입니다. – Francis

1

음 TagLib #는 게시자 태그를 읽을 수 없습니다. 현재까지의 최신 버전 (2.1.0.0)조차도이를 수행 할 수 없습니다. 대안으로 자유롭게 사용할 수있는 TagLib #의 소스 코드를 사용하여 직접이 기능을 추가 할 수 있습니다.

는 이렇게 파일 태그 라이브러리/ID3V2/FrameTypes.cs을 열고 어딘가에 다음 줄을 추가하려면 다음

public static readonly ReadOnlyByteVector TPUB = "TPUB"; // Publisher field 

을 그리고 파일의 태그 라이브러리/ID3V2/Tag.cs ​​ :

public string Publisher { 
    get {return GetTextAsString (FrameType.TPUB);} 
    set {SetTextFrame (FrameType.TPUB, value);} 
} 

그런 다음이

TagLib.File tf = TagLib.File.Create(...); // open file 
tf.Tag.Publisher = "Label XY";    // write new Publisher 
tf.Save();         // save tags 
같은 것을 사용하여 게시자 필드에 액세스 할 수 있습니다

이것은 추한 해킹이지만 MP3 파일에도 적용됩니다.

+0

안녕 다니엘, 난 단지 당신의 반응을 보았습니다. 나는 그것을 지금 시도 할 것이고 그것이 나를 위해 일하는지 알 것이다. 대단히 감사합니다! – Francis

+0

그것은 나를 위해 작동하지 않습니다. 프란시스, 너를 위해 일 했니? – Joaobrunoah

+0

내 프로젝트 및 제공 업체 (Beatport)의 데이터 제공 업체에서 기술적 인 문제 (Json)로 인해 솔루션이나 Daniel 's를 아직 테스트하지 못했습니다. 지원이 필요하지 않습니다. 새로운 소식이 있으면이 게시물을 업데이트 할 것입니다. – Francis