2009-10-02 19 views
6

मेरे पास एक बहुत बड़ी WAV फ़ाइल है, आकार में लगभग 100 एमबी। मैं इस WAV फ़ाइल को पढ़ने के लिए जावा का उपयोग करना चाहता हूं और ऑडियो के हर 2 सेकंड के लिए इसे छोटे हिस्सों में विभाजित करना चाहता हूं।जावा का उपयोग करते हुए एक wav फ़ाइल को छोटे हिस्सों में कैसे विभाजित करें?

क्या जावा में ऐसा करना संभव है? क्या आप कृपया मुझे एक एपीआई सुझा सकते हैं जिसके साथ मैं इसे प्राप्त कर सकता हूं?

अग्रिम धन्यवाद, स्नेहल

+0

हाय। मैं एक .wav फ़ाइल पढ़ रहा हूं और मैं इसे छोटे हिस्सों में विभाजित करना चाहता हूं और इसे पास करना चाहता हूं, ताकि प्रत्येक खंड में आवृत्ति को पता चल सके। मैं जावा ध्वनि में काफी नया हूं, तो क्या आप इसके साथ मेरी मदद कर सकते हैं। मैं अगली टिप्पणी में अपने कोड के हिस्से को जोड़ रहा हूं। अग्रिम धन्यवाद – Learner

+0

अंतिम फ्लोट [] floatBuffer = DTMF.generateDTMFTone (चरित्र); स्ट्रिंग पढ़ने = "डी: /RecordAudio31.wav"; इनपुट फ़ाइल में = नया फ़ाइल इनपुट स्ट्रीम (पढ़ें); // इनपुटस्ट्रीम ऑडियोस्ट्रीम ऑडियोस्ट्रीम = नया ऑडियोस्ट्रीम (इन) से ऑडिस्ट्रीम बनाना; अंतिम ऑडियोफॉर्मैट प्रारूप = नया ऑडियोफॉर्मैट (44100, 16, 1, सत्य, झूठा); अंतिम ऑडियो इनपुटस्ट्रीम इनपुटस्ट्रीम = नया ऑडियो इनपुट स्ट्रीम (ऑडियोस्ट्रीम, प्रारूप, फ्लोटबफर। लम्बाई); अंतिम ऑडियोडिस्परचर प्रेषक = नया ऑडियो डिस्पैचर (इनपुटस्ट्रीम, चरण आकार, 0); dispatcher.addAudioProcessor (goertzelAudioProcessor); नया थ्रेड (प्रेषक) .start(); – Learner

+0

मैंने इसे समझ लिया। फिर भी धन्यवाद। – Learner

उत्तर

4

आप AudioInputStream और उसके AudioFileFormat सदस्य (जो एक AudioFormat उदाहरण शामिल है) का उपयोग कर सकते पता है कि (प्रारूप, नमूना दर) लिखने के लिए, आप AudioSystem का उपयोग यह लिखने के लिए कर सकते हैं।

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

+0

ऑडियोफाइलफॉर्मैट के माध्यम से मैं पता लगा सकता हूं कि नमूना दर 8000 है। नमूना दर और बाइट्स की संख्या के बीच संबंध क्या है? मैं ऑडियो हैंडलिंग में कुल नौसिखिया हूं, मेरी अज्ञानता के लिए खेद है – Snehal

+2

नमूना दर (एफ) के अलावा आपको प्रति नमूना बिट्स (बीपीएस) और चैनलफॉर्मैट द्वारा प्रदान की जाने वाली चैनलों (एन) की बिट्स की भी आवश्यकता है। ऑडियो के एक सेकंड के लिए आपको बीपीएस * एन * एफ/8 बाइट्स की आवश्यकता है। – eljenso

+0

धन्यवाद एलिजेंसो। मैं ऑडियो के 2 सेकंड के लिए आवश्यक बाइट्स की संख्या पता लगा सकता था। अब, मैं ऑडियोसिस्टम की लेखन विधि का उपयोग करके पढ़ा गया बाइट लिखने की कोशिश कर रहा हूं। हालांकि, इनपुट इनपुट में से एक AudioInputStream है। मैं उस बाइट को पढ़ने के बाइट्स के आधार पर बनाने में असमर्थ हूं। कोई संकेतक वास्तव में सहायक होगा। धन्यवाद! – Snehal

0

यदि आपको अपने कोड की दीर्घायु की परवाह नहीं है, तो जावा के लिए क्विकटाइम मीडिया के लिए एक अच्छी शर्त है। यह विंडोज और मैक पर चलता है और किसी भी ऑडियो (और वीडियो) प्रारूप को बहुत अधिक पढ़ और लिख देगा। नकारात्मकता यह है कि ऐप्पल ने वर्षों से इसका समर्थन नहीं किया है, इसलिए यह अभी भी काम करता है, आप एक मरने वाली तकनीक में निवेश कर रहे हैं।

1

आप specification for a wav file भी देख सकते हैं जो वास्तव में बुनियादी और सरल है। और फिर बाइनरी फ़ाइल को पढ़ें, और इसे छोटे बिट्स में फिर से सहेजें।

मुझे लगता है कि यह हमेशा पुस्तकालयों पर भरोसा करने के बजाय ऐसा करने के लिए एक बेहतर सीखने का अनुभव है।

+1

आपको यह भी जानने की आवश्यकता होगी कि बड़े हिस्से के प्रारूप को दिए गए छोटे हिस्सों के लिए हेडर को कैसे प्रारूपित किया जाए। एक 'सरल' कार्य नहीं है लेकिन यह भी एक बहुत मुश्किल नहीं है।हालांकि निश्चित रूप से चश्मे में देखने की जरूरत है। –

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