2012-01-23 14 views
7

क्या कोई मुझे सही दिशा में इंगित कर सकता है कि यह कोड लगातार इस ऑडियो क्लिप को क्यों नहीं चलाएगा? यह एक बार खेलता है और बंद हो जाता है।ऑडियो क्लिप लगातार लूप नहीं होगा

final Clip clip = AudioSystem.getClip(); 
final AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("Alarm_Police.wav")); 
clip.open(inputStream); 
clip.loop(Clip.LOOP_CONTINUOUSLY); 
+0

क्या आपने लूप() को खोलने से पहले() किया है? मैंने कोशिश नहीं की है लेकिन यह काम कर सकता है। –

+0

मैंने अभी इसे आजमाया है और ऐसा लगता है ... क्या आप कोशिश ब्लॉक में कोई अपवाद पकड़ रहे हैं जो इस कोड को कम करना चाहिए? – Timst

+0

हाय, मैंने यह भी कोशिश की और यह काम करता है। क्या आपके पास पहले लूप के बाद कुछ अपवाद है? – hudi

उत्तर

12

यदि आप एक बड़ा आवेदन चला रहे हैं, तो यह उत्तर लागू नहीं हो सकता है। लेकिन कोड के उस टुकड़े के साथ एक साधारण परीक्षण के लिए, यह सहायता:

क्लिप.लोप() यह अपना स्वयं का धागा शुरू करता है, लेकिन वह धागा JVM को जीवित नहीं रखेगा। तो इसे काम करने के लिए, सुनिश्चित करें कि क्लिप एकमात्र धागा नहीं है।

अगर मैं इस स्निपेट से थ्रेड.sleep (..) छोड़ देता हूं, तो मुझे आपके जैसा ही समस्या मिलती है;

import java.io.File; 

import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 
import javax.sound.sampled.Clip; 

public class Snippet { 
    public static void main(String[] args) throws Exception { 

     AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("notify.wav")); 
     Clip clip = AudioSystem.getClip(); 
     clip.open(inputStream); 
     clip.loop(Clip.LOOP_CONTINUOUSLY); 
     Thread.sleep(10000); // looping as long as this thread is alive 
    } 
} 
+0

के अंत में समाप्त होने से रोकने के लिए 'एक GUI तत्व बनाता है, धन्यवाद फ्रैंक, जहां तक मैं समझता हूं कि अगर मैंने ऊपर तीर कुंजी दबाई है तो यह आपकी 'प्रतिष्ठा' या कुछ में जोड़ती है, लेकिन मेरे पास ऐसा करने की अनुमति देने के लिए पर्याप्त पोस्ट नहीं हैं। मैंने हरे रंग की चेकमार्क मारा, जिसका मुझे उम्मीद है कि मैं सवाल का जवाब देने के लिए आपका उत्तर चुनता हूं। – daveed007

+0

आप बिल्कुल सही हैं, मुझे खुशी है कि मैं मदद कर सकता हूं! – Paaske

1

पूर्ण ऑडियो फ़ाइल चलाने के लिए आपको सोने की समय जानने की आवश्यकता होगी। एक वैकल्पिक होगा:

while(clip.isRunning()) 
{ 
    Thread.sleep(100); 
} 

यह सो रहता है (100ms की वृद्धि) की जब तक isRunning() राज्य गलत पर बदल गया है। आपको इस लूप से पहले प्रारंभिक नींद की आवश्यकता हो सकती है ताकि isRunning() स्थिति में सेट करने का समय हो।

1

मेरी ऑडियो फ़ाइल में अलार्म बीप के 20 सेकंड होते हैं। मुझे इसे लगातार रिंग करने की ज़रूरत है। धागे का उपयोग करने के बजाय, मैं नीचे दिखाए गए कोड के टुकड़े के साथ चला गया।

 while(true){ 
      clip.start(); 
      clip.loop(clip.LOOP_CONTINUOUSLY);    
     } 

सोचें कि इससे मदद मिलेगी। धन्यवाद।

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