Προς το περιεχόμενο

MP3 WMA Headers


Evgenios1

Προτεινόμενες αναρτήσεις

Δημοσ.

Ποιο ειναι το μεγεθος(bytes) ενος Header mp3 & wma ?Και σε ποιο σημειο ειναι(αρχη,τελος)? Δεν με ενδιαφερει να τον αποκωδικοποιησω , απλος να τον ανιγραψω.

Δημοσ.

Χμμ... Ενα παραδοξο... Το ID3 tag ειναι στο τελος του αρχειου (αρχη : sizeof(mp3file)-128) Σωστα.(?) Μπενοντας στη wiki βλεπω πως το mp3 ειναι πολλα frames και το καθε frame εχει header(Size:4byte(32bit)) + Data (Size:szData = 144*mp3Rate/(hz+pad) )

δλδ συνολο Χ bytes = 4 bytes + szData bytes.

Με τα παραπανω στοιχεια , ανοιγω εναν file reader και διαβαζω 10 frames (απο 0 εως 10*(4+ szData)) και το αποθηκευω ως mp3 file , το παραδοξο (?) αυτο το αρχειο περιεχει τα δεδομενα του τραγουδιστη αλμπουμ κλπ. (λολ?) , αυτα τα στοιχεια ειναι στο tag ID3 που ειναι στο τελος του αρχειου (και καλα) , πως στο καλο τα αντιγραφω? Επρεπε να ειναι ανωνυμο !!!

Τελος πως θα διαβασω 2 bit που ειναι το bit rate , και πως 4 bit που ειναι τα Hz ?

Δημοσ.

Το MP3 Tag v1.0/1.1 είναι πάντα στο τέλος του MP3 αρχείου, οι νεότερες εκδόσεις MP3 Tag όχι. Οι MP3 players κάνουν skip τα non MP3 data chuncks. Ρίξε μια ματιά και εδώ πάντως (just in case): http://www.insomnia.gr/forum/showpost.php?p=2525180&postcount=4

 

Όσον αφορά τα 2 & 4 bits δες τους bit shift operators << και >> σε C/C++.

 

Υ.Γ.

Τελικά σε ενδιαφέρει το MP3 η το WMA/ASF διότι άλλο το ένα και άλλο το άλλο format!

Δημοσ.

Υ.Γ.

Τελικά σε ενδιαφέρει το MP3 η το WMA/ASF διότι άλλο το ένα και άλλο το άλλο format!

 

Και τα δυο !! Το θελω για ενα προγραμμα τυπου ραδιοφωνο, ετσι θελω μικρα κομματκια τραγουδιων για να κανω το κοινος buffering,απλος αρχισα με το mp3 μετα εχει και wma.

Αυτο το ποστ το εχω δει(ωραια δουλεια), αλλα δεν με ενδιαφερει να διαβασω τα id3 version x.x αλλα τα frame.

Τωρα ειδα πως δουλευουν τα << >> , για ριξε μια ιδεα πως θα αποκωδικοποιησω το παρακατω

>
byte->  1010    |  00    |    0    |     0    |
      BitRate     Hz         pad       padP

λογικα θα τα εχω ως enum τα BitRate Hz pad padp

BitRate = 4^2 (16 enums)

Hz = 2^2(4 enums)

pad&padp =1^2 (2 enums)

 

Πω !! θα τα παιξω

Συμφονα με ολλα ωσα διαβασα πρεπει το παρακατω να μου επειστρεφει 0 (0χ00) που ειναι τα 44100 Ηz αλλα μου επιστρεφει 12

>
           h= buffer[2]; //0χ207   header
           h <<= 4; //remove bitrate  
           h >>= 6;// set 2 bit to las postion

---------------------------------------------------------------------------------------------------------------------------------------------------------

Επιτελους το το εφτιαξα!!

Εδω ειναι μια καλση που αποκωδικοποιει* ενα mp3 header

>
using System;
using System.IO;
namespace MP3
{
   class Program
   {
       static void Main(string[] args)
       {
           
               FileStream fs = new FileStream(@"e:\test.mp3", FileMode.Open);
               byte[] buffer = new byte[4];
               fs.Seek(0, SeekOrigin.Begin);
               fs.Read(buffer, 0, 4);
               Console.WriteLine("---------------------------------");
               MP3Header mp3 = new MP3Header(buffer);
               Console.WriteLine(mp3.Bitrate);
               Console.WriteLine(mp3.Freq);
               Console.WriteLine(mp3.PadBit);
               Console.WriteLine(mp3.PrvBit);
               Console.WriteLine("---------------------------------");

               fs.Close();
           
           
           Console.Read();
       }
       public class MP3Header
       {
           private byte _Hz;
           private byte _PadingBit;
           private byte _PrivateBit;
           private byte _BitRate;
    
           public MP3Header(byte [] header)
           {
               var temp = header[2];
               _BitRate = temp >>= 4;
               temp = header[2];
               temp <<= 4;
               _Hz = temp >>= 6;
               temp = header[2];
               temp <<= 6;
               _PadingBit = temp >>= 7;
               temp = header[2];
               temp <<= 7;
               _PrivateBit = temp >>= 7;

           }
           public enum PadingBit : byte
           { On = 1, Off = 0 }
           public enum PreviewBit : byte
           { On = 1, Off = 0 }
           public enum Hz : byte
           {
               _44100=0
           }
           public enum BitRate : byte
           {
               _160=10,
               _128=9
           }
           public PadingBit PadBit
           {
               get
               {
                   return (PadingBit)_PadingBit;
               }
           }
           public PreviewBit PrvBit
           {
               get
               {
                   return (PreviewBit)_PrivateBit; 
               }
           }
           public Hz Freq
           {
               get
               {
                   return (Hz)_Hz;//Εδω πρεπει να το συνδυασεις με τοBitRate ωστε να σο βγαλει Hz
               }
           }
           public BitRate Bitrate
           {
               get
               {
                   return (BitRate)_BitRate;
               }
           }
         
       }
   }
}

* Οχι ολο το header !!

* Επεισης για να βρεις το header πρεπει να κανεις skip το ID3 (128byte & extended 227byte)

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...