2012-07-06 35 views
9

है, मैं विभिन्न प्रारूपों/कोडेक्स के बीच डीकोडिंग और एन्कोडिंग ऑडियो के लिए एक सी ++ लाइब्रेरी लिख रहा हूं। मेरे पास आवश्यक कोडेक लाइब्रेरी लोड करने से पहले प्रारूप को तुरंत पहचानने के लिए एक दिनचर्या है।पता लगाएं कि फ़ाइल एमपी 3

डब्ल्यूएवी फाइलों के लिए फ़ाइल की शुरुआत में एएससीआईआई मान "आरआईएफएफ" और "वेव" के लिए कोई सरल दिख सकता है। यह एफएलएसी पर भी लागू होता है, हम केवल पहले 4 बाइट्स में पढ़ सकते हैं, जो "एफएलएसी" होगा।

लेकिन फ़ाइल को एमपी 3 होने पर मैं तुरंत कैसे पता लगा सकता हूं? मैं फ़ाइल एक्सटेंशन पर भरोसा नहीं कर सकता। मैं पहले एमपी 3 फ्रेम को डीकोड करने की कोशिश भी नहीं कर सकता, क्योंकि फ़ाइल की शुरुआत में अतिरिक्त डेटा हो सकता है (उदाहरण: आईडी 3, कवर छवि, आदि)।

उत्तर

19

यह पता लगाना कि फ़ाइल एक एमपी 3 है, फ़ाइल में एक निश्चित पैटर्न की खोज करने से अधिक जटिल है।

Some concepts

(जानकारी के लिए http://www.codeproject.com/Articles/8295/MPEG-Audio-Frame-Header देखें)

  • एमपी 3 फ़ाइल फ्रेम की एक श्रृंखला के होते हैं और प्रत्येक फ्रेम शुरुआत में एक शीर्ष लेख है।
  • शीर्षलेख 11-बिट सिंक शब्द के साथ एक बाइट सीमा पर शुरू होता है, जो सभी 1 है। इसलिए सिंक शब्द या तो 0xFFE या 0XFFF है।
  • प्रत्येक फ्रेम की लंबाई हेडर पैरामीटर के आधार पर गणना की जाती है।

फ़ाइल (0xFFF या 0xFFE) में syncword के लिए Algorithm to determine if a file is MP3 or not

  • खोजें।
  • हेडर पैरामीटर पार्स करें।
  • हेडर पैरामीटर का उपयोग करके फ्रेम लंबाई निर्धारित करें।
  • फ्रेम लंबाई का उपयोग कर अगले फ्रेम की तलाश करें।
  • यदि आपको खोज के बाद एक और सिंकवर्ड मिलता है, तो फ़ाइल ज्यादातर एमपी 3 फ़ाइल होती है।
  • सुनिश्चित करने के लिए, लगातार एमपी 3 फ्रेम खोजने के लिए प्रक्रिया दोहराएं। एक बेहतर हिट दर के लिए एन बढ़ाया जा सकता है।
-3

मैं बस अपनी मौजूदा लहर और flac परीक्षण में हस्ताक्षर की जांच करता हूं।
एक एमपी 3 फ़ाइल should have this in hex:
0x49, 0x44, 0x33
यह फ़ाइलों मैं था से कुछ के लिए काम करता है। मुझे यकीन नहीं है कि यह सभी परिस्थितियों में काम करता है, इसलिए ओक बाइट्स के उत्तर जैसे अधिक जटिल समाधान की आवश्यकता हो सकती है।

+2

बाइट अनुक्रम जो आप सुझाते हैं ('I'' D' '3') आईडी 3 (v2) मेटाडेटा टैग के लिए शीर्षलेख का हिस्सा है लेकिन सभी एमपी 3 फ़ाइलों में ID3v2 टैग नहीं होंगे (और एक ID3v2.4 टैग हो सकता है शुरुआत के बजाय फ़ाइल के अंत में)। – Deltics