Java选择音频设备并播放.mp3

时间:2014-03-16 14:47:35

标签: java audio

我的电脑有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文件?

4 个答案:

答案 0 :(得分:0)

这些答案来自: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();
   }
 }
}

你可能会遇到无法处理formaterror,因为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

答案 1 :(得分:0)

Google搜索" JavaZoom mp3"。他们提供了另一种选择,在我看来,更好的方式是播放不需要JMF的mp3。

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

JMF和JavaZoom几乎是唯一可用的选择,我说JavaZoom是最简单的选择。

答案 2 :(得分:0)

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),这就是我使用{{{}的原因1}}类获取URL(toExternalForm)。

另一个问题:您需要初始化JavaFX应用程序,否则您无法使用任何内容。

这是一个只播放mp3的例子

File

答案 3 :(得分:0)

在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方式,但对我的任务很有用。