Evgenios1 Δημοσ. 10 Μαρτίου 2009 Δημοσ. 10 Μαρτίου 2009 Ποιο ειναι το μεγεθος(bytes) ενος Header mp3 & wma ?Και σε ποιο σημειο ειναι(αρχη,τελος)? Δεν με ενδιαφερει να τον αποκωδικοποιησω , απλος να τον ανιγραψω.
Επισκέπτης Δημοσ. 11 Μαρτίου 2009 Δημοσ. 11 Μαρτίου 2009 διάβασε τις προδιαγραφές του format π.χ. http://en.wikipedia.org/wiki/MP3#File_structure
Directx Δημοσ. 11 Μαρτίου 2009 Δημοσ. 11 Μαρτίου 2009 Αν πρόκειται για WMA αρχεία πρέπει να μελετήσεις την δομή των αρχείων ASF καθώς τα WMA είναι μια υποκατηγορία τους. Για περισσότερες πληροφορίες δες εδώ: http://www.microsoft.com/windows/windowsmedia/forpros/format/asfspec.aspx
Evgenios1 Δημοσ. 11 Μαρτίου 2009 Μέλος Δημοσ. 11 Μαρτίου 2009 Χμμ... Ενα παραδοξο... Το 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 ?
Directx Δημοσ. 11 Μαρτίου 2009 Δημοσ. 11 Μαρτίου 2009 Το 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!
Evgenios1 Δημοσ. 11 Μαρτίου 2009 Μέλος Δημοσ. 11 Μαρτίου 2009 Υ.Γ. Τελικά σε ενδιαφέρει το 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)
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.