2010-09-23 18 views
14

मैं एक एसएमएस हैंडलिंग, जावा आधारित सॉफ्टवेयर के साथ काम कर रहा हूं और जब भी हमें कोई संदेश प्राप्त होता है तो एक बीप/अलर्ट ध्वनि खेलना चाहते हैं। मैंने java.sound पुस्तकालयों को देखने की कोशिश की और कुछ भी नहीं मिला। मुझे नहीं पता कि ध्वनि बजाने के एप्लेट तरीके से जाकर जावा एप्लिकेशन में ठीक रहेगा! क्या किसी भी जावा पुस्तकालयों में कोई पूर्वनिर्धारित आवाज है जिसे हम किसी एप्लिकेशन में कॉल कर सकते हैं? किसी भी पॉइंटर्स की सराहना की जाएगी!जावा एप्लिकेशन में ध्वनि (चेतावनी) कैसे खेलें?

उत्तर

2

एप्लेट मार्ग ठीक किया जाना चाहिए (और बहुत सीधा है), टूलकिट वर्ग के भीतर बीप विधि पर एक नज़र ले जा सकते हैं। ऐप्पल इंस्टेंस बनाने से बचने के लिए आप स्थिर newAudioClip विधि का उपयोग कर सकते हैं, और फिर AudioClip पर play() पर कॉल करें।

URL url = getClass().getResource("/foo/bar/sound.wav"); 
AudioClip clip = Applet.newAudioClip(url); 
clip.play(); 
+0

किसी भी विचार क्यों इस सवाल का जवाब व्यापक रूप से इस्तेमाल नहीं कर रहा है? यह बेहद सरल और उपयोगी लगता है ... – RaKXeR

37

तुम सिर्फ एक बीप या त्वरित चेतावनी कोशिश

Toolkit.getDefaultToolkit().beep(); 
+1

यह लिनक्स के तहत काम नहीं कर सकता है। – Augustin

+0

एफवाईआई, विंडोज 10 पर ठीक काम कर रहा है। धन्यवाद – Nabin

+1

आयात java.awt.Toolkit; –

1

आप एक मनमाना ध्वनि फ़ाइल खेलने के लिए ध्वनि पैकेज उपयोग करना चाहते हैं चाहते हैं, आप javax.sound.sampled पैकेज का उपयोग कर सकते हैं।

 
private void playSound(File f) { 
    Runnable r = new Runnable() { 
     private File f; 

     public void run() { 
      playSoundInternal(this.f); 
     } 

     public Runnable setFile(File f) { 
      this.f = f; 
      return this; 
     } 
    }.setFile(f); 

    new Thread(r).start(); 
} 

private void playSoundInternal(File f) { 
    try { 
     AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(f); 
     try { 
      Clip clip = AudioSystem.getClip(); 
      clip.open(audioInputStream); 
      try { 
       clip.start(); 
       try { 
        Thread.sleep(100); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       clip.drain(); 
      } finally { 
       clip.close(); 
      } 
     } catch (LineUnavailableException e) { 
      e.printStackTrace(); 
     } finally { 
      audioInputStream.close(); 
     } 
    } catch (UnsupportedAudioFileException e) { 
     e.printStackTrace(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

क्या आप समझा सकते हैं कि क्लिप.स्टार्ट() को कॉल करने के बाद हमें सोने के लिए थ्रेड की आवश्यकता क्यों है? – lucks

+0

यह कुछ समय हो गया है क्योंकि मैंने यह कोड लिखा था, लेकिन मेरा अनुमान है कि यह शायद 'थ्रेड.इल्ड() 'के साथ ही काम करेगा। –

+0

मैं इस बात का जिक्र कर रहा था कि हमें पहले स्थान पर क्यों अवरुद्ध करने की आवश्यकता है, लेकिन मुझे एहसास हुआ कि यह शायद इसलिए है क्योंकि हम – lucks

23

() एक बाहरी ध्वनि फ़ाइल के बिना आप अपनी खुद की ध्वनि उत्पन्न कर सकते हैं अगर आप कुछ एक बीप की तुलना में कम उबाऊ की तलाश: यहाँ कोड है कि एक ध्वनि फ़ाइल खेलेंगे है।

import javax.sound.sampled.*; 

public class SoundUtils { 

    public static float SAMPLE_RATE = 8000f; 

    public static void tone(int hz, int msecs) 
    throws LineUnavailableException 
    { 
    tone(hz, msecs, 1.0); 
    } 

    public static void tone(int hz, int msecs, double vol) 
     throws LineUnavailableException 
    { 
    byte[] buf = new byte[1]; 
    AudioFormat af = 
     new AudioFormat(
      SAMPLE_RATE, // sampleRate 
      8,   // sampleSizeInBits 
      1,   // channels 
      true,  // signed 
      false);  // bigEndian 
    SourceDataLine sdl = AudioSystem.getSourceDataLine(af); 
    sdl.open(af); 
    sdl.start(); 
    for (int i=0; i < msecs*8; i++) { 
     double angle = i/(SAMPLE_RATE/hz) * 2.0 * Math.PI; 
     buf[0] = (byte)(Math.sin(angle) * 127.0 * vol); 
     sdl.write(buf,0,1); 
    } 
    sdl.drain(); 
    sdl.stop(); 
    sdl.close(); 
    } 

    public static void main(String[] args) throws Exception { 
    SoundUtils.tone(1000,100); 
    Thread.sleep(1000); 
    SoundUtils.tone(100,1000); 
    Thread.sleep(1000); 
    SoundUtils.tone(5000,100); 
    Thread.sleep(1000); 
    SoundUtils.tone(400,500); 
    Thread.sleep(1000); 
    SoundUtils.tone(400,500, 0.2); 

    } 
} 

अधिक ध्वनि यहाँ प्रयोगों: Produce special sound effect

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