जावा में खेल .mp3 और .wav


105

मैं अपने जावा एप्लिकेशन में एक .mp3और एक .wavफाइल कैसे खेल सकता हूं ? मैं स्विंग का उपयोग कर रहा हूं। मैंने इंटरनेट पर देखने की कोशिश की, कुछ इस तरह के उदाहरण के लिए:

public void playSound() {
    try {
        AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File("D:/MusicPlayer/fml.mp3").getAbsoluteFile());
        Clip clip = AudioSystem.getClip();
        clip.open(audioInputStream);
        clip.start();
    } catch(Exception ex) {
        System.out.println("Error with playing sound.");
        ex.printStackTrace();
    }
}

लेकिन, यह केवल .wavफाइलें चलाएगा।

इसके साथ:

http://www.javaworld.com/javaworld/javatips/jw-javatip24.html

मैं दोनों .mp3फ़ाइलों और .wavफ़ाइलों को एक ही विधि से चलाने में सक्षम होना चाहता हूं ।


1
ऐसा लगता है कि आपको कुछ प्रकार के प्लगइन की आवश्यकता होगी। जेएमएफ में वह होना चाहिए जो आपको चाहिए। oracle.com/technetwork/java/javase/tech/index-jsp-140239.html
१11

खैर, मुझे यकीन नहीं है कि इन चीजों का उपयोग कैसे करें, मैंने पहले कभी उनका इस्तेमाल नहीं किया है। मैं इसका उपयोग कैसे कर सकता हूं, मैं इसका उपयोग कैसे कर सकता हूं?
स्टेन

JFM को 2003 में छोड़ दिया गया था। यह अनुशंसित नहीं है कि आप इसका उपयोग करते हैं।
joshreesjones

3
यह ध्यान देने योग्य है कि, एक mainविधि में, Thread.sleepध्वनि को सुनने के लिए इसे जोड़ना आवश्यक है , अन्यथा ऐसा होने से पहले कार्यक्रम समाप्त हो जाएगा। ऐसा करने का एक उपयोगी तरीका है:Thread.sleep(clip.getMicrosecondLength() / 1000);
एंड्रे वैलेंटी

जवाबों:


119

जावा FX है Mediaऔर MediaPlayerवर्ग है जो एमपी 3 फ़ाइलें खेलेंगे।

उदाहरण कोड:

String bip = "bip.mp3";
Media hit = new Media(new File(bip).toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(hit);
mediaPlayer.play();

आपको निम्नलिखित आयात कथनों की आवश्यकता होगी:

import java.io.File;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;

5
अंतिम URL संसाधन = getClass ()। getResource ("a.mp3");
नील

44
यह मेरे लिए बिल्कुल भी काम नहीं कर रहा है। यह कहता है कि आयात मौजूद नहीं है। और मैं जावा 7 चला रहा हूँ ...
पल्सपांडा 3

9
stackoverflow.com/questions/15149547/… ऐसा लगता है कि यदि आप ग्रहण का उपयोग करते हैं तो आपको जावा 7 फ़ोल्डर के अंदर से javafx लाइब्रेरी को मैन्युअल रूप से जोड़ना होगा।
ग्युरमे

7
तकनीकी रूप से, Mediaऔर जावा कक्षाएं MediaPlayerनहीं हैं, लेकिन JavaFX कक्षाएं हैं। OS X या Windows पर Java में MP3 सपोर्ट जोड़ने के लिए, आप SampedSP में देखना चाहते हैं । और हाँ - मैंने उन पुस्तकालयों को लिखा।
हेंड्रिक

8
यह काम करने के लिए आपको javaFX को इनिशियलाइज़ करने की ज़रूरत नहीं है। stackoverflow.com/questions/14025718/…
user738048


18

आप केवल जावा एपीआई के साथ खेल सकते हैं:

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

कोड:

AudioInputStream audioIn = AudioSystem.getAudioInputStream(MyClazz.class.getResource("music.wav"));
Clip clip = AudioSystem.getClip();
clip.open(audioIn);
clip.start();

और jmp3 के साथ .mp3 खेलते है


4
ये गलत है। जावा, wav के अलावा अन्य कंटेनर प्रारूपों को खेलेगा। इसके अलावा, wav एक कंटेनर प्रारूप है जिसमें एमपी 3 भी हो सकता है। तो जावा सभी wav फ़ाइलों को नहीं खेल सकता है।
रेडियोडफ

15

जब से मैंने इसका उपयोग किया है, तब तक यह एक समय है, लेकिन जावालेयर एमपी 3 प्लेबैक के लिए बहुत अच्छा है


हाँ, यह बहुत अच्छा है। सरल और मंच पर निर्भर नहीं लगता है। एक पृष्ठभूमि में ठीक खेलता है और बस यह पता लगाने की जरूरत है कि एक थ्रेड को कैसे रोकें।
जेम्स पी।

14

मानक javax.sound API का उपयोग करना, एक एकल मावेन निर्भरता, पूरी तरह से खुला स्रोत ( जावा 7 आवश्यक):

pom.xml

 <!-- 
    We have to explicitly instruct Maven to use tritonus-share 0.3.7-2 
    and NOT 0.3.7-1, otherwise vorbisspi won't work.
   -->
<dependency>
  <groupId>com.googlecode.soundlibs</groupId>
  <artifactId>tritonus-share</artifactId>
  <version>0.3.7-2</version>
</dependency>
<dependency>
  <groupId>com.googlecode.soundlibs</groupId>
  <artifactId>mp3spi</artifactId>
  <version>1.9.5-1</version>
</dependency>
<dependency>
  <groupId>com.googlecode.soundlibs</groupId>
  <artifactId>vorbisspi</artifactId>
  <version>1.0.3-1</version>
</dependency>

कोड

import java.io.File;
import java.io.IOException;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine.Info;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;

import static javax.sound.sampled.AudioSystem.getAudioInputStream;
import static javax.sound.sampled.AudioFormat.Encoding.PCM_SIGNED;

public class AudioFilePlayer {

    public static void main(String[] args) {
        final AudioFilePlayer player = new AudioFilePlayer ();
        player.play("something.mp3");
        player.play("something.ogg");
    }

    public void play(String filePath) {
        final File file = new File(filePath);

        try (final AudioInputStream in = getAudioInputStream(file)) {

            final AudioFormat outFormat = getOutFormat(in.getFormat());
            final Info info = new Info(SourceDataLine.class, outFormat);

            try (final SourceDataLine line =
                     (SourceDataLine) AudioSystem.getLine(info)) {

                if (line != null) {
                    line.open(outFormat);
                    line.start();
                    stream(getAudioInputStream(outFormat, in), line);
                    line.drain();
                    line.stop();
                }
            }

        } catch (UnsupportedAudioFileException 
               | LineUnavailableException 
               | IOException e) {
            throw new IllegalStateException(e);
        }
    }

    private AudioFormat getOutFormat(AudioFormat inFormat) {
        final int ch = inFormat.getChannels();

        final float rate = inFormat.getSampleRate();
        return new AudioFormat(PCM_SIGNED, rate, 16, ch, ch * 2, rate, false);
    }

    private void stream(AudioInputStream in, SourceDataLine line) 
        throws IOException {
        final byte[] buffer = new byte[4096];
        for (int n = 0; n != -1; n = in.read(buffer, 0, buffer.length)) {
            line.write(buffer, 0, n);
        }
    }
}

संदर्भ:


मुझे mp3 और ogg दोनों के लिए यह त्रुटि मिल रही है: UnsupportedAudioFileException: इनपुट फ़ाइल से ऑडियो इनपुट स्ट्रीम नहीं मिल सकी
डेविड विनीकी

मैंने कोड को मावेन मॉड्यूल में रखा। यह निश्चित रूप से काम करता है: search.maven.org/...
odoepner

मैं संस्करण संख्याओं को अपग्रेड कर सकता हूं: <निर्भरता> <groupId> com.googlecode.soundlibs </ groupId> <विरूपण साक्ष्य> ट्राइटनस-शेयर </ विरूपण साक्ष्य> <संस्करण> 0.3.7.4 / / संस्करण> </ निर्भरता> <GroupId> com.googlecode.soundlibs </ groupId> <विरूपण साक्ष्य> mp3spi </ विरूपण साक्ष्य> <संस्करण> 1.9.5.4 </ संस्करण> </ निर्भरता> <निर्भरता> <GroupDd> com.googlecode.soundlibs </ groupId> < विरूपण साक्ष्य> vorbisspi </ विरूपण साक्ष्य> <संस्करण> 1.0.3-2 </ संस्करण> </ निर्भरता>
tib

केवल वर्बिसपी 1.0.3.3 जो नवीनतम है काम नहीं किया।
टिब्बी

यह बहुत अच्छा है, यह एमपी 3 और WAV बॉक्स के ठीक बाहर काम करता है!
माइल्स हेनरिक्स

13

मैं BasicPlayerAPI का उपयोग करने की सलाह दूंगा। यह खुला स्रोत है, बहुत सरल है और इसे JavaFX की आवश्यकता नहीं है। http://www.javazoom.net/jlgui/api.html

ज़िप-फ़ाइल को डाउनलोड करने और निकालने के बाद, परियोजना के निर्माण पथ में निम्नलिखित जार-फ़ाइलों को जोड़ना चाहिए:

  • basicplayer3.0.jar
  • सब से जार lib निर्देशिका (अंदर BasicPlayer3.0)

यहाँ एक न्यूनतर उपयोग उदाहरण है:

String songName = "HungryKidsofHungary-ScatteredDiamonds.mp3";
String pathToMp3 = System.getProperty("user.dir") +"/"+ songName;
BasicPlayer player = new BasicPlayer();
try {
    player.open(new URL("file:///" + pathToMp3));
    player.play();
} catch (BasicPlayerException | MalformedURLException e) {
    e.printStackTrace();
}

आवश्यक आयात:

import java.net.MalformedURLException;
import java.net.URL;
import javazoom.jlgui.basicplayer.BasicPlayer;
import javazoom.jlgui.basicplayer.BasicPlayerException;

बस आपको संगीत बजाना शुरू करना होगा। प्लेयर शुरू कर रहा है और अपने ही प्लेबैक धागा प्रबंधन और प्रदान करता है चलाने, रोकने, फिर से शुरू, बंद करो और की तलाश कार्यक्षमता।

अधिक उन्नत उपयोग के लिए आप jlGui Music Player पर एक नज़र डाल सकते हैं। यह एक खुला स्रोत है WinAmp क्लोन: http://www.javazoom.net/jlgui/jlgui.html

पहली कक्षा देखने के लिए खिलाड़ी होगी (पैकेज javazoom.jlgui.player.amp के अंदर)। यह बहुत अच्छी तरह से BasicPlayer की उन्नत सुविधाओं को दर्शाता है।


धन्यवाद, यह सबसे आसान तरीका है जिसे मैंने एक वर्तमान एप्लिकेशन में एमपी 3 समर्थन जोड़ने की कोशिश की है। हालांकि जावा ज़ूम साइट से mp3spi1.9.4.jarप्रतिस्थापित किया जाना चाहिए mp3spi1.9.5.jar
ओल्ड बैडमैन ग्रे

के बाद अपने मुख्य धागे को सोने के लिए मत भूलना player.play()या आप किसी भी ध्वनि नहीं सुन सकते हैं।
jeremyjjbrown

7

सबसे आसान तरीका मुझे http://www.javazoom.net/javalayer/sources.html से JLayer jar फ़ाइल डाउनलोड करना और इसे जार लाइब्रेरी में जोड़ना था http://www.wikihow.com/Add-JARs- टू-परियोजना बिल्ड-पथ में Eclipse-% 28Java% 29

यहाँ कक्षा के लिए कोड है

public class SimplePlayer {

    public SimplePlayer(){

        try{

             FileInputStream fis = new FileInputStream("File location.");
             Player playMP3 = new Player(fis);

             playMP3.play();

        }  catch(Exception e){
             System.out.println(e);
           }
    } 
}

और यहाँ आयात कर रहे हैं

import javazoom.jl.player.*;
import java.io.FileInputStream;

1
हां यह इस वीडियो की जांच करता है [ youtube.com/…] यह सभी कार्यों जैसे स्टॉप और पॉज़ से गुजरता है।
व्लाद

1
मुझे लगता है कि इसमें पहले से ही वे कार्य शामिल होने चाहिए, क्योंकि वे मूल नहीं लगते हैं। वैसे भी, मुझे एक और पुस्तकालय के साथ एक और समाधान मिला, उत्तर के लिए धन्यवाद :)
N3sh

5

पाठकों को एक और विकल्प देने के लिए, मैं जेएसीओ एमपी 3 प्लेयर लाइब्रेरी, एक क्रॉस प्लेटफॉर्म जावा एमपी प्लेयर का सुझाव दे रहा हूं।

विशेषताएं:

  • बहुत कम CPU उपयोग (~ 2%)
  • अविश्वसनीय छोटी लाइब्रेरी (~ 90KB)
  • JMF (जावा मीडिया फ्रेमवर्क) की आवश्यकता नहीं है
  • किसी भी एप्लिकेशन में एकीकृत करना आसान है
  • किसी भी वेब पेज (एप्लेट के रूप में) को एकीकृत करना आसान है।

इसके तरीकों और विशेषताओं की पूरी सूची के लिए आप यहाँ इसके प्रलेखन की जाँच कर सकते हैं

नमूना कोड:

import jaco.mp3.player.MP3Player;
import java.io.File;

public class Example1 {
  public static void main(String[] args) {
    new MP3Player(new File("test.mp3")).play();
  }
}

अधिक विवरण के लिए, मैंने यहां एक सरल ट्यूटोरियल बनाया जिसमें एक डाउनलोड करने योग्य सोर्सकोड शामिल है।


वाह, यह अविश्वसनीय सरल था।
वेसोस डे कुएसो

स्रोत कोड डाउनलोड पुस्तकालय को वास्तविक स्रोत कोड नहीं देता है?
a8_

4

एमपी 3 डिकोडर / प्लेयर / कन्वर्टर मावेन डिपेंडेंसी का उपयोग करना ।

import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class PlayAudio{

public static void main(String[] args) throws FileNotFoundException {

    try {
        FileInputStream fileInputStream = new FileInputStream("mp.mp3");
        Player player = new Player((fileInputStream));
        player.play();
        System.out.println("Song is playing");
        while(true){
            System.out.println(player.getPosition());
        }
    }catch (Exception e){
        System.out.println(e);
    }

  }

}

2

आपको पहले JMF इंस्टॉल करना होगा ( इस लिंक का उपयोग करके डाउनलोड करें )

File f = new File("D:/Songs/preview.mp3");
MediaLocator ml = new MediaLocator(f.toURL());
Player p = Manager.createPlayer(ml);
p.start();

JMF जार फ़ाइलों को जोड़ने के लिए मत भूलना


5
ध्यान दें कि जेएमएफ को बहुत समय पहले सन / ओरेकल द्वारा छोड़ दिया गया है।
हेंड्रिक

1

JAVE के लिए freshmeat.net की खोज करें (जावा ऑडियो वीडियो एनकोडर के लिए खड़ा है) लाइब्रेरी ( यहां लिंक )। यह इस तरह की चीजों के लिए एक पुस्तकालय है। मुझे नहीं पता कि जावा में एक देशी एमपी 3 फ़ंक्शन है।

यदि आप दोनों प्रकार की फ़ाइलों को चलाने के लिए एक विधि चाहते हैं, तो आपको संभवतः एमपी फ़ंक्शन और वेव फ़ंक्शन को एक साथ लपेटने की आवश्यकता होगी, विरासत और एक साधारण आवरण फ़ंक्शन का उपयोग करना होगा।


मुझे वास्तव में कोई जानकारी नहीं है कि कस्टम पुस्तकालयों का उपयोग कैसे किया जाए, इसके साथ कोई मदद?
स्टेन

लाइब्रेरी डाउनलोड करें और अपने कोड में एक सम्मिलित विवरण लिखें। पुस्तकालय के उपयोग पर निर्देश शामिल होना चाहिए। आमतौर पर, एक फ़ंक्शन कॉल पर्याप्त होता है, हालांकि आपको पहले एक ऑब्जेक्ट घोषित करने की आवश्यकता हो सकती है। फिर, एक फ़ंक्शन बनाएं जो इसके इनपुट के फ़ाइल एक्सटेंशन की जांच करता है, और आपको जो लाइब्रेरी फ़ंक्शन चाहिए उसे कॉल करता है।
स्पेंसर रथबुन

0

जावा साउंड के लिए एमपी रीडिंग सपोर्ट जोड़ने के लिए mp3plugin.jar, एप्लिकेशन के रन-टाइम क्लास पाथ में JMF को जोड़ें ।

ध्यान दें कि Clipकक्षा में मेमोरी सीमाएँ हैं जो इसे उच्च गुणवत्ता वाले ध्वनि के कुछ सेकंड से अधिक के लिए अनुपयुक्त बनाती हैं।


2
JMF को 2003 में छोड़ दिया गया था। यह अनुशंसित नहीं है कि आप इसका उपयोग करते हैं।
joshreesjones

@ mathguy54 जब मैं लोगों को इसका उपयोग न करने की सलाह देता हूं, तो ऐसा इसलिए है क्योंकि यह विभिन्न प्रकार के मीडिया का समर्थन नहीं करता है। फिर भी, यह अभी भी एमपी 3 को डिकोड करने के लिए पूरी तरह से पर्याप्त है।
एंड्रयू थॉम्पसन

0

मेरे पास इसके लिए अन्य तरीके हैं, पहला है:

public static void playAudio(String filePath){

    try{
        InputStream mus = new FileInputStream(new File(filePath));
        AudioStream aud = new AudioStream(mus);
    }catch(Exception e){
        JOptionPane.showMessageDialig(null, "You have an Error");
    }

और दूसरा है:

try{
    JFXPanel x = JFXPanel();
    String u = new File("021.mp3").toURI().toString();
    new MediaPlayer(new Media(u)).play();
} catch(Exception e){
    JOPtionPane.showMessageDialog(null, e);
}

और अगर हम इस ऑडियो में लूप बनाना चाहते हैं तो हम इस विधि का उपयोग करते हैं।

try{
    AudioData d = new AudioStream(new FileInputStream(filePath)).getData();
    ContinuousAudioDataStream s = new ContinuousAudioDataStream(d);
    AudioPlayer.player.start(s);
} catch(Exception ex){
    JOPtionPane.showMessageDialog(null, ex);
}

अगर हम इस पाश को रोकना चाहते हैं तो हम इस लाइब्रेरियों को इस कोशिश में शामिल करते हैं:

AudioPlayer.player.stop(s);

इस तीसरी विधि के लिए हम फलने का आयात जोड़ते हैं:

import java.io.FileInputStream;
import sun.audio.AudioData;
import sun.audio.AudioStream;
import sun.audio.ContinuousAudioDataStream;

-2

इस लाइब्रेरी का उपयोग करें: sun.audio आयात करें। *;

public void Sound(String Path){
    try{
        InputStream in = new FileInputStream(new File(Path));
        AudioStream audios = new AudioStream(in);
        AudioPlayer.player.start(audios);
    }
    catch(Exception e){}
}

2
बहुत लंबे समय तक ध्वनि बजाने का यह सही तरीका नहीं है। यह भी देखें कि सूर्य के स्वामित्व वाले जावा वर्गों का उपयोग करना एक बुरा अभ्यास है? एक खाली कैच ब्लॉक के साथ आपका कोड भी एक भयानक उदाहरण है।
रेडियोडेफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.