2017-04-24 8 views
2

Ich versuche, ein Werkzeug zum Bearbeiten und Einbetten von Kapitel Markierungen in MP3-Dateien (für Podcasting) durch this spec.Wie bette ich Kapitelmetadaten in C# in MP3-Dateien ein?

Alle Bibliotheken, die ich bisher gefunden habe, unterstützen die CHAP- oder CTOC-Frames nicht, noch kann ich herausfinden, wie sie mit benutzerdefinierten Frames funktionieren. NTagLite scheint bis jetzt mein Favorit zu sein, aber ich habe Probleme beim Erstellen der Quelle auf VS2017, um zu versuchen, meine eigenen Methoden für verschiedene Frametypen zu verwenden, und am Ende des Tages bin ich kein sehr fortgeschrittener Programmierer, der einen ByteStream benutzt manuell ist ein bisschen über meinen Kopf.

Kennt jemand einen Weg, dies zu erreichen? Jeder mit Erfahrung hier? Fehle ich gerade die Anrufe in diesen Bibliotheken und diese Funktionalität ist alle schon da?

Antwort

0

Wenn Sie keine Bibliothek finden, die dies für Sie tun wird, können Sie es möglicherweise selbst tun. Zunächst definieren einige Objekt, das dem ID3-Tag des Kapitels bezogenen Metadaten/Rahmen kapselt:

public class ChapterFrame : Frame 
{ 
    private Header Header { get; set; } 
    private string ElementId { get; set; } 
    private TimeSpan StartTime { get; set; } 
    private TimeSpan EndTime { get; set; } 
    private TimeSpan StartOffset { get; set; } 
    private TimeSpan EndOffset { get; set; } 
    private List<ChapterFrame> Subframes = new List<ChapterFrame>(); 
} 

Dann schreiben Sie eine Methode (so etwas wie ChapterFrame.ToByteArray()):

public byte[] ToByteArray(ChapterFrame frame) { 
    return new byte[]; 
} 

... dass jeder der ChapterFrame nimmt ‚s Felder und flacht sie in eine serialisierte Array von Bytes aus, konform mit den ID3 v2.3/2.4 Kapitel Rahmen Addendum Normen:

from "ID3v2 Chapter Frame Addendum", C. Newell, 2 December 2005

Jetzt, da Sie einen neuen Rahmen haben, können Sie den ID3-Tag durchsuchen, um herauszufinden, wo der neue Rahmen eingefügt werden soll.

Bitte beachten Sie, dass ich hier definitiv kein Experte bin - das ist nur eine Vermutung.

0

Die neueste Version von Audio Tools Library für. NET (https://github.com/Zeugma440/atldotnet) unterstützt ID3v2 Kapitel (CTOC/CHAP Frames) Lesen und Schreiben.

Beispielcode aus dem Wiki unter:

using System; 
using ATL.AudioData; 
using System.Collections.Generic; 

AudioDataManager theFile = new AudioDataManager(AudioData.AudioDataIOFactory.GetInstance().GetDataReader(<fileLocation>)); 

Dictionary<uint, ChapterInfo> expectedChaps = new Dictionary<uint, ChapterInfo>(); 
TagData theTag = new TagData(); 
theTag.Chapters = new List<ChapterInfo>(); 
expectedChaps.Clear(); 

ChapterInfo ch = new ChapterInfo(); 
ch.StartTime = 123; 
ch.StartOffset = 456; 
ch.EndTime = 789; 
ch.EndOffset = 101112; 
ch.UniqueID = ""; 
ch.Title = "aaa"; 
ch.Subtitle = "bbb"; 
ch.Url = "ccc\0ddd"; 

theTag.Chapters.Add(ch); 
expectedChaps.Add(ch.StartTime, ch); 

ch = new ChapterInfo(); 
ch.StartTime = 1230; 
ch.StartOffset = 4560; 
ch.EndTime = 7890; 
ch.EndOffset = 1011120; 
ch.UniqueID = "002"; 
ch.Title = "aaa0"; 
ch.Subtitle = "bbb0"; 
ch.Url = "ccc\0ddd0"; 

theTag.Chapters.Add(ch); 
expectedChaps.Add(ch.StartTime, ch); 

// Persists the chapters 
theFile.UpdateTagInFile(theTag, MetaDataIOFactory.TAG_ID3V2); 

// Reads them 
theFile.ReadFromFile(null, true); 

foreach (ChapterInfo chap in theFile.ID3v2.Chapters) 
{ 
    System.Console.WriteLine(chap.Title + "(" + chap.StartTime + ")"); 
} 
Verwandte Themen