【问题标题】:Java select audio device and play .mp3Java 选择音频设备并播放 .mp3
【发布时间】:2014-03-16 14:47:34
【问题描述】:

我的电脑有 3 个声卡。我可以使用此代码选择并播放 .wav 文件

import javax.sound.sampled.*

AudioInputStream audioIn = AudioSystem.getAudioInputStream(url);

Mixer.Info[] arrMixerInfo = AudioSystem.getMixerInfo();

// Get a sound clip resource.
Clip clip = AudioSystem.getClip(arrMixerInfo[1]);

// Open audio clip and load samples from the audio input stream.
clip.open(audioIn);
clip.start();
clip.drain();
clip.close();

如何播放 .mp3 文件?

【问题讨论】:

    标签: java audio


    【解决方案1】:

    在 Linux 上,您可以使用 mpg123 命令在不同的声卡上播放 mp3。

    public class SoundTest {
        public static void main(String[] args) {
        //play mp3
            try {
             //my first soundcard is CA0106 with id: CARD=CA0106
                java.lang.Process p1 = Runtime.getRuntime().exec(new String[]{"mpg123", "-asysdefault:CARD=CA0106", "audio/1.mp3"});
             //my second soundcard is CARD=Intel (internal motherboard souncard)
                java.lang.Process p2 = Runtime.getRuntime().exec(new String[]{"mpg123", "-asysdefault:CARD=Intel", "audio/2.mp3"});
            } catch (Exception e) {
                e.printStackTrace();
            }
        //play wav
            try {
            java.lang.Process p3 = Runtime.getRuntime().exec(new String[]{"aplay", "audio/audio1.wav", "-Dsysdefault:CARD=Intel"});
            java.lang.Process p4 = Runtime.getRuntime().exec(new String[]{"aplay", "audio/audio2.wav", "-Dsysdefault:CARD=CA0106"});
         } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    您可以通过命令aplay -L 获取声卡 ID 这不是 Java 方式,但对我的任务很有用。

    【讨论】:

      【解决方案2】:

      此答案来自:How to play an mp3 file in java。 我完全相信原始海报的这个答案:Juned Ahsan


      为此,您需要在您的 PC 中安装 Java Media Framework (JMF)。你已经安装了它,然后试试这段代码:

      import javax.media.*;
      import java.net.*;
      import java.io.*;
      import java.util.*;
      class AudioPlay
      {
       public static void main(String args[]) throws Exception
       {
      
      
       // Take the path of the audio file from command line
       File f=new File("song.mp3");
      
      
       // Create a Player object that realizes the audio
       final Player p=Manager.createRealizedPlayer(f.toURI().toURL());
      
      
        // Start the music
        p.start();
      
      
        // Create a Scanner object for taking input from cmd
        Scanner s=new Scanner(System.in);
      
      
        // Read a line and store it in st
        String st=s.nextLine();
      
      
         // If user types 's', stop the audio
         if(st.equals("s"))
         {
         p.stop();
         }
       }
      }
      

      您可能会遇到无法处理格式错误,这是因为Java默认取消了对MP3的支持(盗版问题),您需要安装“JMF MP3插件”才能播放MP3文件。

      去 Java 的 JMF 网站下载 http://java.sun.com/javase/technologies/desktop/media/jmf/mp3/download.html

      为确保您使用的是受支持的格式文件,请在此处查看:

      http://www.oracle.com/technetwork/java/javase/formats-138492.html

      如果您使用的是 windows7,您可能还需要阅读以下内容:

      https://forums.oracle.com/forums/thread.jspa?threadID=2132405&tstart=45

      【讨论】:

        【解决方案3】:

        在 Google 上搜索“JavaZoom mp3”。它们提供了另一种播放 mp3 的方式,在我看来是更好的方式,不需要 JMF。

        基本上,这个库的作用是将一个 mp3 解码器插入你的 VM。

        JMF 和 JavaZoom 几乎是唯一可用的替代方案,我认为 JavaZoom 是最简单的替代方案。

        【讨论】:

        【解决方案4】:

        JavaFx 有 MediaMediaPlayer 类。

        import javafx.scene.media.Media;
        import javafx.scene.media.MediaPlayer;    
        
        Media media = new Media(new File("sound.mp3").toURI().toURL().toExternalForm());
        MediaPlayer mediaPlayer = new MediaPlayer(media);
        
        mediaPlayer.play();
        

        困难的部分是当你需要提供网址时,你不能只使用sound.mp3,你需要提供完整的网址(例如:file:/C:/a/b/c/d/sound.mp3)这就是为什么我使用File类来获取网址(@ 987654321@).

        另一个问题:你需要初始化 JavaFX 应用程序,否则你不能使用任何东西。

        这是一个只播放mp3的例子

        public class Main extends Application
        {
            public static void main(String[] args)
            {
                Application.launch();
            }
        
            @Override
            public void start(Stage stage) throws Exception
            {
                Media media = new Media(new File("sound.mp3").toURI().toURL().toExternalForm());
                MediaPlayer mediaPlayer = new MediaPlayer(media);
        
                mediaPlayer.play();
            }
        }
        

        【讨论】:

        • 感谢您的回答,但我认为您的代码只能通过默认声卡播放 .mp3 文件。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多