Archief - [PROG][C#] id3v2 informatie lezen uit een MP3 bestand

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Cakeman

Legacy Member
Ik zou graag id3v2 tags uit een MP3 willen lezen. Uiteindelijk is het ook de bedoeling dat ik die id3 gegevens ga wijzigen, maar ik ga al blij zijn als ik ze kan lezen :)

Ik heb al wat programmeer ervaring in C#, maar ik heb nog nooit op byteniveau gewerkt... Daarom zou ik graag wat tips hebben...

Via http://www.id3.org/id3v2.4.0-structure ben ik te weten gekomen hoe zo een id3v2 header opgebouwd is.

Ik heb net een kort stukje code geschreven om eens iets te testen:

Code:
string strInput = Application.StartupPath + "\\File.mp3";
FileStream srcFile = new FileStream(strInput, FileMode.Open, FileAccess.Read, FileShare.Read);
BinaryReader bnReader = new BinaryReader(srcFile);
byte[] btIn = bnReader.ReadBytes(10);

textBox1.Text = System.Text.Encoding.ASCII.GetString(btIn);
De 10 eerste bytes worden zonder problemen ingelezen. Wanneer ik die bytearray ga bekijken in de Quickwatch, dan zitten er ook de juiste gegevens in, zoals op de site hierboven vermeld staat:
An ID3v2 tag can be detected with the following pattern:

$49 44 33 yy yy xx zz zz zz zz

Where yy is less than $FF, xx is the 'flags' byte and zz is less than $80.

Dat is blijkbaar hexadecimale notatie... Hoe kan ik die byte "hexadecimaal" benaderen?

Of misschien algemener: hoe werk met bytes die ik uit een file inlees? :)

The Crazy Frog

Legacy Member
Normaal gezien kan je 0x<hex> doen, maar kben da wel nie zeker voor C#.

Hale

Legacy Member
om van binair naar hexadecimaal te gaan doe je het volgende:

1.splits je byte in twee delen van 4 bits.
2.reken die twee delen uit naar decimaal.
3.10=A, 11=B, 12=C, ...
4.plak de twee uitkomsten die je krijgt achter elkaar et voila

bv.

10111100

1. 1011 en 1100
2. 11 en 12
3. B en C
4. uitkomst = 0xBC

Cakeman

Legacy Member
Tyfius zei:
Waarom het wiel opnieuw uitvinden?

http://sourceforge.net/projects/csid3lib
http://developer.novell.com/wiki/index.php/TagLib_Sharp

Anyhow, je kan bij hun toch ook altijd eens kijken hoe zij bepaalde dingen aanpakken.
Ik wil het wiel niet zo zeer opnieuw uitvinden... Ik wil gewoon kijken of ik er zelf ook eentje kan maken :) Aangezien ik iets compleet nieuw moet leren (werken op byte niveau enzo) zal het zeker geen slechte oefening zijn.

Die eerste link die je gaf, heb ik al bekeken, maar die gaf al meteen foutmeldingen bij het uitvoeren van de example app die erbij zat. Dat gaf geen al te beste indruk. Ik kan natuurlijk wel de code verder bekijken.

Die tweede is nieuw voor mij, bedankt. Die ga ik straks zeker eens bekijken.

Tyfius

Legacy Member
Ik was eigelijk op zoek naar de URL van de 2de link. Die wordt namelijk gebruikt in Banshee, en kwam per toeval uit op de eerste link.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan