import java.awt.event.*;
import javax.swing.*;
import javax.sound.sampled.*;
import java.net.URL;
import java.io.*;

class SoundTest
{
    public static void main(String[] args) throws Exception
    {
        URL file = new URL("file:C:/Users/a/Documents/My/baby.wav");

        AudioInputStream ais = AudioSystem.getAudioInputStream(file);
        Clip clip = AudioSystem.getClip();
        clip.open(ais);

        JButton button = new JButton("Play Clip");
        button.addActionListener( new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent ae)
            {
                clip.setFramePosition(0);
                clip.start();
            }
        });

        JOptionPane.showMessageDialog(null, button);
    }
}

मैं इस कोड को आजमा रहा हूं लेकिन जब मैं इसे चलाने की कोशिश कर रहा हूं तो यह त्रुटि दिखा रहा है -

javax.sound.sampled.UnsupportedAudioFileException:
    could not get audio input stream from input URL (in javax.sound.sampled.AudioSystem) 

कृपया कोई मेरी समस्या का समाधान करें

0
Arpit Mishra 26 अक्टूबर 2020, 14:26

2 जवाब

सबसे बढ़िया उत्तर

ऐसा लगता है कि दो चीजों में से एक (या दोनों!) हो सकता है। एक यह है कि फ़ाइल का पता काम नहीं कर रहा है। दूसरा यह है कि फ़ाइल एक प्रारूप है जिसका जावा समर्थन नहीं करता है।

मैं टिप्पणियों में जानकारी के लिए अनुरोध करूंगा लेकिन वहां चीजें काफी अव्यवस्थित हो रही हैं!

क्या आप हमें wav फ़ाइल का प्रारूप बता सकते हैं? इसके गुणों की जाँच करने का प्रयास करें। निश्चित रूप से, जावा 16-बिट, 44100 एफपीएस, मोनो या स्टीरियो, लिटिल एंडियन का समर्थन करेगा, जो कि सबसे आम प्रारूप है। यदि आपके OS के गुण अपूर्ण हैं, तो आप ऑडेसिटी का उपयोग करके संपत्तियों की जांच कर सकते हैं। इन दिनों बहुत सारी फाइलें हैं जो 24-बिट या 32-बिट, या 48000fps या यहां तक ​​​​कि 92000fps हैं, और जावा अभी तक उनका समर्थन नहीं करता है, afaik।

Freesound.org पर एक "सुरक्षित" परीक्षण ध्वनि यह थंडर क्लैप होगी। आप पृष्ठ के दाईं ओर विनिर्देशों पर देख सकते हैं कि यह 16-बिट, 44100 एफपीएस स्टीरियो है। मैं इसे डाउनलोड करूंगा और इसे इसके वेब स्थान से चलाने की कोशिश करने के बजाय इसे आपके प्रोग्राम में जोड़ दूंगा।

पता लगाने में कोई समस्या है या नहीं, इसका परीक्षण करने में मदद के लिए, मैं ध्वनि को आपकी SoundTest.java फ़ाइल के समान फ़ोल्डर में रखूंगा। फिर, फ़ाइल का URL प्राप्त करने के लिए निम्न पंक्ति का उपयोग करें।

URL url = this.getClass().getResource("soundfilename.wav");

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

2
Phil Freihofner 27 अक्टूबर 2020, 05:16

आप जिस URL को इनपुट कर रहे हैं उसके लिए स्ट्रिंग गलत है, इसके बजाय इसे आज़माएं:

C:\\Users\\a\\Documents\\My\\baby.wav

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

यदि आप विभिन्न फ़ाइलों तक पहुँचने का एक आसान तरीका चाहते हैं, तो मैंने देखा कि आप स्विंग लाइब्रेरी का उपयोग कर रहे हैं, इसलिए JFileChooser घटक।

संपादित करें: परिवर्तित URL पथ

0
joshpetit 26 अक्टूबर 2020, 15:24