2017-10-06 6 views
5

सभी पिछले उत्तरों को पढ़ें और कोई भाग्य नहीं था। एक एंड्रॉइड ऐप पर काम करना जिसमें मुझे पाठ के साथ mp3 ऑडियो सिंक्रनाइज़ करने की आवश्यकता है। mp3 खेला जाता है क्योंकि यह पाठ को बदलने पर रहता है। बस यूट्यूब पर गीत पर प्रकाश डाला तरह आदिटेक्स्ट के साथ एमपी 3 ऑडियो सिंक्रनाइज़ कैसे करें?

उत्तर

1

वे LRC फ़ाइलों का उपयोग

https://en.wikipedia.org/wiki/LRC_(file_format)

अनिवार्य रूप से एमपी 3 के तहत गीत उत्पन्न करने के लिए, गीत (या जो भी) समय के साथ टैग किए गए हैं जिसके लिए वे दिखाई देनी चाहिए , यदि आप जिस एंड्रॉइड प्लेयर का उपयोग कर रहे हैं वह एलआरसी जागरूक है, तो इसे सही समय पर अंतराल पर गीतों को ओवरले करना चाहिए, आप लाइनों को विस्तारित टैगिंग के साथ एक समय में कुछ शब्द भी प्रकट कर सकते हैं।

2

पहले आप ऑडियो कि आप खेलते हैं और फिर उपशीर्षक फ़ाइल बनाने आप का उपयोग इस यूआरएल Create Subtitle जांच कर सकते हैं के लिए के रूप में

String mimeType = getMimeType("file://mnt/sdcard/BarbieGirl.srt"); 
     // mp.selectTrack(index); 
     try { 
      mp.addTimedTextSource(path, mimeType); 
     } catch (IllegalArgumentException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

अपने मीडिया प्लेयर में है कि उपशीर्षक फ़ाइल जोड़ना चाहते हैं का उपशीर्षक फ़ाइल बनाने के लिए की जरूरत है।

+0

मैं टेक्स्टव्यू पर उपशीर्षक कैसे दिखा सकता हूं? – Husnain

+0

हां, आप टेक्स्टव्यू पर उपशीर्षक दिखा सकते हैं इस लिंक का अनुसरण करें: https://stackoverflow.com/questions/13422673/looking-for-a-working-example-of-addtimedtextsource-for-adding-subtitle-to-a-vid – Ashish

0

मेरे पास एंड्रॉइड के लिए कोई कोड नमूना नहीं है लेकिन मैंने जावास्क्रिप्ट के साथ ऐसा कुछ किया है, इसलिए मैं आपको कुछ चरणों को इंगित करने वाला हूं। इस LRC Maker & Generator पर एक नज़र डालें, इसमें गीत सिंक्रनाइज़ेशन के साथ "माई हार्ट विल गो ऑन" का नमूना शामिल है। यदि आप यही हासिल करना चाहते हैं तो अच्छा है।

1- एलआरसी सोचें, जो ऑडियो फ़ाइल के लिए सिंक्रनाइज़ेशन को संभालने के लिए एक टेक्स्ट प्रारूप है। प्रत्येक पंक्ति कोष्ठक में ऑडियो या समय के बारे में जानकारी रखती है, उदाहरण के लिए:

[ar:Chubby Checker oppure Beatles, The] 
[al:Hits Of The 60's - Vol. 2 – Oldies] 
[ti:Let's Twist Again] 
[au:Written by Kal Mann/Dave Appell, 1961] 
[length: 2:23] 

[00:12.00]Naku Penda Piya-Naku Taka Piya-Mpenziwe 
[00:15.30]Some more lyrics ... 

चेक Wikipedia LRC Format, वहाँ सरल स्वरूप (पंक्ति-दर-पंक्ति) और उन्नत स्वरूप (वर्ड-दर-शब्द) है। मैं सरल प्रारूप के साथ शुरू करने का सुझाव देते हैं।

2- सरल प्रारूप को पढ़ने, प्रदर्शित करने और लिखने के लिए जानकारी और वस्तुओं को संभालने के लिए जावा क्लास (गतिविधि या अपनी कस्टम लाइब्रेरी) बनाएं।

  • कच्चे पाठ लाइनों की ArrayList ([00: 12.00] Naku Penda पिया-Naku टका पिया-Mpenziwe, ...) आपका वर्ग विशेषताएं होनी चाहिए
  • पार्स टैग की ArrayList ([00.12.00] , [00.18.50], ...)
  • पार्स पाठ लाइनों की ArrayList (Naku Penda पिया-Naku टका पिया-Mpenziwe, ...)
  • ListView सही
  • पर छोड़ दिया और गीत रेखा पर समय स्वरूप प्रदर्शित करने के लिए
  • आपकी सूची दृश्य में प्रदर्शित करने के लिए लाइनों की संख्या
  • सूची आइटम जिसमें दृश्य दिखते हैं (टाइम प्रारूप टेक्स्ट व्यू, गीत रेखा TexView या EditText यदि आप उपयोगकर्ता को ऐप में गीतों की प्रत्येक पंक्ति को जोड़ने या संपादित करने की अनुमति देते हैं)

3- इंजन को कोड करें। आपको स्वरूपित रेखाएं निकालने के लिए नियमित अभिव्यक्ति का उपयोग करना होगा ([00: 12.00] नाकू पेंडा पिया-नाकू ताका पिया-मेंपेज़ीवे) और प्रत्येक पंक्ति में समय टैग ([00.12.00])। आप उन्हें जावास्क्रिप्ट कोड उदाहरण से उपयोग कर सकते हैं:

var tagRegex = /\[([a-z]+):(.*)\].*/; 
var lrcAllRegex = /(\[[0-9.:\[\]]*\])+(.*)/; 
var timeRegex = /\[([0-9]+):([0-9.]+)\]/; 
var rawLrcArray = rawLrc.split(/[\r\n]/); 

tagRegex (शीर्षक, कलाकार, शैली, आदि संगीत के बारे में जानकारी के चयन के लिए है)

lrcAllRegex एलआरसी प्रारूप वाली एक रेखा का चयन करने के लिए है।

timeRegex LRC प्रारूप

rwaLrcArray लाइनों की एक सरणी के लिए बंटवारे पूरे पाठ के लिए करता है, तो के साथ एक पूरी लाइन में समय प्रारूप के चयन के लिए है। जावा में यह मुश्किल नहीं होना चाहिए।

3a- इसलिए एंड्रॉइड में ArrayAdapter के माध्यम से ListView में एकाधिक आइटम जोड़ने के लिए मूल प्रक्रिया का उपयोग करके, पाठ को पढ़ें, इसे कई पंक्तियों की सरणी में विभाजित करें, पार्स टाइम टैग, पार्स लाइनों को विभाजित करें और उन्हें विशेषताओं टैग और लाइन में डाल दें "एलआरसी आइटम" कक्षा जिसे आप ListView में जानकारी एकत्रित करने के लिए उपयोग करेंगे।

विशेषताओं

LRC आइटम कक्षा होनी चाहिए:

  • समय प्रारंभ टैग
  • समय समाप्ति टैग
  • स्ट्रिंग लाइन

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

3b- अगला भाग जो आप सबसे अधिक चाहते हैं, सिंक्रनाइज़ेशन के लिए, "टाइम टैग" टेक्स्ट व्यू, और "लाइन" एलआरसी आइटम लेआउट के "लाइन" संपादन टेक्स्ट में ईवेंट श्रोता जोड़ें। प्रत्येक बार जब उपयोगकर्ता टाइम टैग टेक्स्ट व्यू पर क्लिक करता है, तो एलआरसी टाइम टैग वैल्यू अपडेट करें और टाइम टैग टेक्स्ट व्यू में [XX: YY.ZZ] प्रारूप में उस नए समय को लिखें।

जब कोई उपयोगकर्ता किसी लाइन एडिटटेक्स्ट या टेक्स्ट व्यू पर क्लिक करता है, तो उस समय संगीत प्लेयर को उस समय में बदलें, इससे उपयोगकर्ता अगली पंक्ति के समय टैग को सही करने के लिए किसी भी लाइन पर वापस जाने की अनुमति देगा।

4- अंत में, जब किया जाता है, प्रत्येक एलआरसी आइटम कक्षा पर नई सूचनाएं दोहराएं और प्रत्येक पंक्ति टैग ([00: 12.00]) को प्रत्येक पंक्ति के आगे (नाकू पेंडा पिया-नाकू ताका पिया-मपेन्ज़ीवे) के साथ जोड़ दें और प्रत्येक पंक्ति के बाद नई लाइन "\ n" जोड़ें। यह तय करने के लिए आप पर निर्भर है कि क्या आप इसे संगीत-file.lrc पर लिखना नहीं चाहते हैं या बस इसे डेटाबेस में सहेजें।

आप JS File पर और अधिक देख सकते हैं। Lusaisai Lyricer Package Live Demo पर क्रेडिट जो मुझे प्रेरित करता है।

संबंधित मुद्दे