求java播放音乐mp3等格式的代码

Faneney 2012-11-06 04:22:03
亲们,我想要一个java程序写的调用windows自带的音乐播放器播放map3等格式的音乐,如果有可能的话swing做的播放器也可以,我在网上找了很多例子和代码,有的是乱码,有的不能实现,,现在头都炸了,,希望高手快快出来,帮帮我~!
...全文
696 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
fearlessMore 2013-11-28
  • 打赏
  • 举报
回复
public class EmbeddedMediaPlayer extends Application {
	private static final String MEDIA_URL = "http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv";

	@Override
	public void start(Stage primaryStage) {
		primaryStage.setTitle("Embedded Media Player");
		Group root = new Group();
		Scene scene = new Scene(root, 540, 253);

		Media media = new Media(MEDIA_URL);
		MediaPlayer mediaPlayer = new MediaPlayer(media);
		mediaPlayer.setAutoPlay(true);
		MediaControl mediaControl = new MediaControl(mediaPlayer);
		scene.setRoot(mediaControl);

		primaryStage.setScene(scene);
		primaryStage.show();
	}

	public static void main(String[] args) {
		launch(args);
	}
}
public class MediaControl extends BorderPane {
	private MediaPlayer mp;
	private MediaView mediaView;
	private final boolean repeat = false;
	private boolean atEndOfMedia = false;
	private Duration duration;
	private Slider timeSlider;
	private Label playTime;
	private Slider volumeSlider;
	private HBox mediaBar;

	public MediaControl(final MediaPlayer mp) {
		this.mp = mp;
		setStyle("-fx-background-color: #bfc2c7;");
		mediaView = new MediaView(mp);
		Pane mvPane = new Pane() {
		};
		mvPane.getChildren().add(mediaView);
		mvPane.setStyle("-fx-background-color: black;");
		setCenter(mvPane);

		mediaBar = new HBox();
		mediaBar.setAlignment(Pos.CENTER);
		mediaBar.setPadding(new Insets(5, 10, 5, 10));
		BorderPane.setAlignment(mediaBar, Pos.CENTER);

		final Button playButton = new Button(">");

		playButton.setOnAction(new EventHandler<ActionEvent>() {
			public void handle(ActionEvent e) {
				Status status = mp.getStatus();

				if (status == Status.UNKNOWN || status == Status.HALTED) {
					// don't do anything in these states
					System.out
							.println("Player is in a bad or unknown state, can't play.");
					return;
				}

				if (atEndOfMedia) {
					// rewind the movie if we're sitting at the end
					atEndOfMedia = false;
					mp.seek(mp.getStartTime());
					playButton.setText("||");
				} else if (status == Status.PAUSED || status == Status.READY
						|| status == Status.STOPPED) {
					mp.play();
				} else {
					mp.pause();
				}
			}
		});

		mp.currentTimeProperty().addListener(new InvalidationListener() {
			public void invalidated(Observable ov) {
				updateValues();
			}
		});

		mp.setOnPlaying(new Runnable() {
			public void run() {
				System.out.println("onPlaying");
				playButton.setText("||");
			}
		});

		mp.setOnPaused(new Runnable() {
			public void run() {
				System.out.println("onPaused");
				playButton.setText(">");
			}
		});

		mp.setOnReady(new Runnable() {
			public void run() {
				System.out.println("onReady");
				duration = mp.getMedia().getDuration();
				updateValues();
			}
		});

		mp.setCycleCount(repeat ? MediaPlayer.INDEFINITE : 1);

		mp.setOnEndOfMedia(new Runnable() {
			public void run() {
				System.out.println("onEndOfMedia");
				if (!repeat) {
					playButton.setText(">");
					atEndOfMedia = true;
				}
			}
		});

		mediaBar.getChildren().add(playButton);
		// Add spacer
		Label spacer = new Label("   ");
		mediaBar.getChildren().add(spacer);

		// Add Time label
		Label timeLabel = new Label("Time: ");
		mediaBar.getChildren().add(timeLabel);

		// Add time slider
		timeSlider = new Slider();
		HBox.setHgrow(timeSlider, Priority.ALWAYS);
		timeSlider.setMinWidth(50);
		timeSlider.setMaxWidth(Double.MAX_VALUE);
		timeSlider.valueProperty().addListener(new InvalidationListener() {
			public void invalidated(Observable ov) {
				if (timeSlider.isValueChanging()) {
					/*
					 * multiply duration by percentage calculated by slider
					 * position
					 */
					mp.seek(duration.multiply(timeSlider.getValue() / 100.0));
					if (atEndOfMedia) {
						/*
						 * if media has arrived its end before the seeking,
						 * adjust the play button content
						 */
						atEndOfMedia = false;
						playButton.setText("||");
					}
				}
			}
		});
		mediaBar.getChildren().add(timeSlider);

		// Add Play label
		playTime = new Label();
		playTime.setPrefWidth(130);
		playTime.setMinWidth(50);
		mediaBar.getChildren().add(playTime);

		// Add the volume label
		Label volumeLabel = new Label("Vol: ");
		mediaBar.getChildren().add(volumeLabel);

		// Add Volume slider
		volumeSlider = new Slider();
		volumeSlider.setPrefWidth(70);
		volumeSlider.setMaxWidth(Region.USE_PREF_SIZE);
		volumeSlider.setMinWidth(30);
		volumeSlider.valueProperty().addListener(new InvalidationListener() {
			public void invalidated(Observable ov) {
				if (volumeSlider.isValueChanging()) {
					mp.setVolume(volumeSlider.getValue() / 100.0);
				}
			}
		});
		mediaBar.getChildren().add(volumeSlider);

		setBottom(mediaBar);
	}

	protected void updateValues() {
		if (playTime != null && timeSlider != null && volumeSlider != null) {
			Platform.runLater(new Runnable() {
				public void run() {
					Duration currentTime = mp.getCurrentTime();
					playTime.setText(formatTime(currentTime, duration));
					timeSlider.setDisable(duration.isUnknown());
					if (!timeSlider.isDisabled()
							&& duration.greaterThan(Duration.ZERO)
							&& !timeSlider.isValueChanging()) {
						timeSlider.setValue(currentTime.divide(
								duration.toMillis()).toMillis() * 100.0);
					}
					if (!volumeSlider.isValueChanging()) {
						volumeSlider.setValue((int) Math.round(mp.getVolume() * 100));
					}
				}
			});
		}
	}

	private static String formatTime(Duration elapsed, Duration duration) {
		int intElapsed = (int) Math.floor(elapsed.toSeconds());
		int elapsedHours = intElapsed / (60 * 60);
		if (elapsedHours > 0) {
			intElapsed -= elapsedHours * 60 * 60;
		}
		int elapsedMinutes = intElapsed / 60;
		int elapsedSeconds = intElapsed - elapsedHours * 60 * 60
				- elapsedMinutes * 60;

		if (duration.greaterThan(Duration.ZERO)) {
			int intDuration = (int) Math.floor(duration.toSeconds());
			int durationHours = intDuration / (60 * 60);
			if (durationHours > 0) {
				intDuration -= durationHours * 60 * 60;
			}
			int durationMinutes = intDuration / 60;
			int durationSeconds = intDuration - durationHours * 60 * 60
					- durationMinutes * 60;
			if (durationHours > 0) {
				return String.format("%d:%02d:%02d/%d:%02d:%02d", elapsedHours,
						elapsedMinutes, elapsedSeconds, durationHours,
						durationMinutes, durationSeconds);
			} else {
				return String.format("%02d:%02d/%02d:%02d", elapsedMinutes,
						elapsedSeconds, durationMinutes, durationSeconds);
			}
		} else {
			if (elapsedHours > 0) {
				return String.format("%d:%02d:%02d", elapsedHours,
						elapsedMinutes, elapsedSeconds);
			} else {
				return String.format("%02d:%02d", elapsedMinutes,
						elapsedSeconds);
			}
		}
	}
}
小明再现江湖 2013-11-28
  • 打赏
  • 举报
回复
引用 18 楼 hbwhwang 的回复:
这个代码能播MP3

public class MP3Player {
	public void testPlay(String filename)
	{
	  try {
	    File file = new File(filename);
	    AudioInputStream in= AudioSystem.getAudioInputStream(file);
	    AudioInputStream din = null;
	    AudioFormat baseFormat = in.getFormat();
	    
	    AudioFileFormat baseFileFormat =  AudioSystem.getAudioFileFormat(file);
	    System.out.println(baseFileFormat);
	    System.out.println(baseFileFormat.properties());

	    AudioFormat decodedFormat = new AudioFormat(
	    		AudioFormat.Encoding.PCM_SIGNED,
	    		baseFormat.getSampleRate(),
	    		16,
	    		baseFormat.getChannels(),
	    		baseFormat.getChannels() * 2,
	    		baseFormat.getSampleRate(),
	    		false);
	    din = AudioSystem.getAudioInputStream(decodedFormat, in);
	    // Play now. 
	    rawplay(decodedFormat, din);
	    in.close();
	  } catch (Exception e){
		  
	  }
	} 

	private void rawplay(AudioFormat targetFormat, AudioInputStream din) throws IOException,LineUnavailableException
	{
	  byte[] data = new byte[4096];
	  SourceDataLine line = getLine(targetFormat); 
	  if (line != null)
	  {
	    // Start
	    line.start();
	    int nBytesRead = 0;
	    int nBytesWritten = 0;
	    while (nBytesRead != -1)
	    {
	        nBytesRead = din.read(data, 0, data.length);
	        if (nBytesRead != -1) 
	        	nBytesWritten = line.write(data, 0, nBytesRead);
	    }
	    // Stop
	    line.drain();
	    line.stop();
	    line.close();
	    din.close();
	  } 
	}

	private SourceDataLine getLine(AudioFormat audioFormat) throws LineUnavailableException {
	  SourceDataLine res = null;
	  DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
	  res = (SourceDataLine) AudioSystem.getLine(info);
	  res.open(audioFormat);
	  return res;
	} 

	public static String toHexString(byte[] b){
		if (b==null)
			return null;
		StringBuilder sb=new StringBuilder();
		for (byte x:b){
			String tt=Integer.toHexString(x&0xff);
			sb.append(tt).append("00".substring(tt.length()));
		}
		return sb.toString();
	}
	
	public static byte[] md5(String str){
		MessageDigest md;
		byte b[]=null;
		try {
			md = MessageDigest.getInstance("MD5");
			md.update(str.getBytes());
			b = md.digest();
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return b;
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		MP3Player player=new MP3Player();
		player.testPlay("e:/temp/1111.mp3");
	}

}
需要导入的包呢???能给我吗?
戒律和尚 2013-04-08
  • 打赏
  • 举报
回复
不能播放MP3格式的啊
Faneney 2012-11-09
  • 打赏
  • 举报
回复
天啊,我都晕了~!亲们,晚上的时候我再试试,今天应该能结贴~
Faneney 2012-11-07
  • 打赏
  • 举报
回复
引用 2 楼 ticmy 的回复:
http://code.google.com/p/yoyoplayer/
这个。。我下载了一个,怎么全是jar?
Faneney 2012-11-07
  • 打赏
  • 举报
回复
引用 1 楼 dr8737010 的回复:
要搞这方面。奉劝你先学学Win32 API.
Win32 API 是什么?我只是需要一段如何调用本地播放器播放音乐的代码就可以,能实现就行
hezhiqili 2012-11-07
  • 打赏
  • 举报
回复
大神们 学习了
hbwhwang 2012-11-07
  • 打赏
  • 举报
回复
这个代码能播MP3

public class MP3Player {
	public void testPlay(String filename)
	{
	  try {
	    File file = new File(filename);
	    AudioInputStream in= AudioSystem.getAudioInputStream(file);
	    AudioInputStream din = null;
	    AudioFormat baseFormat = in.getFormat();
	    
	    AudioFileFormat baseFileFormat =  AudioSystem.getAudioFileFormat(file);
	    System.out.println(baseFileFormat);
	    System.out.println(baseFileFormat.properties());

	    AudioFormat decodedFormat = new AudioFormat(
	    		AudioFormat.Encoding.PCM_SIGNED,
	    		baseFormat.getSampleRate(),
	    		16,
	    		baseFormat.getChannels(),
	    		baseFormat.getChannels() * 2,
	    		baseFormat.getSampleRate(),
	    		false);
	    din = AudioSystem.getAudioInputStream(decodedFormat, in);
	    // Play now. 
	    rawplay(decodedFormat, din);
	    in.close();
	  } catch (Exception e){
		  
	  }
	} 

	private void rawplay(AudioFormat targetFormat, AudioInputStream din) throws IOException,LineUnavailableException
	{
	  byte[] data = new byte[4096];
	  SourceDataLine line = getLine(targetFormat); 
	  if (line != null)
	  {
	    // Start
	    line.start();
	    int nBytesRead = 0;
	    int nBytesWritten = 0;
	    while (nBytesRead != -1)
	    {
	        nBytesRead = din.read(data, 0, data.length);
	        if (nBytesRead != -1) 
	        	nBytesWritten = line.write(data, 0, nBytesRead);
	    }
	    // Stop
	    line.drain();
	    line.stop();
	    line.close();
	    din.close();
	  } 
	}

	private SourceDataLine getLine(AudioFormat audioFormat) throws LineUnavailableException {
	  SourceDataLine res = null;
	  DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
	  res = (SourceDataLine) AudioSystem.getLine(info);
	  res.open(audioFormat);
	  return res;
	} 

	public static String toHexString(byte[] b){
		if (b==null)
			return null;
		StringBuilder sb=new StringBuilder();
		for (byte x:b){
			String tt=Integer.toHexString(x&0xff);
			sb.append(tt).append("00".substring(tt.length()));
		}
		return sb.toString();
	}
	
	public static byte[] md5(String str){
		MessageDigest md;
		byte b[]=null;
		try {
			md = MessageDigest.getInstance("MD5");
			md.update(str.getBytes());
			b = md.digest();
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return b;
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		MP3Player player=new MP3Player();
		player.testPlay("e:/temp/1111.mp3");
	}

}
akemi_homura 2012-11-07
  • 打赏
  • 举报
回复
引用 16 楼 akemi_homura 的回复:
比方我的音乐在D:/music文件夹下 这样设置就行了
然后程序会扫描该文件夹,能够播放的音乐格式的文件会被加载并播放。
akemi_homura 2012-11-07
  • 打赏
  • 举报
回复
比方我的音乐在D:/music文件夹下 这样设置就行了
akemi_homura 2012-11-07
  • 打赏
  • 举报
回复
引用 9 楼 Faneney 的回复:
引用 6 楼 akemi_homura 的回复:引用 5 楼 akemi_homura 的回复:我听歌用的播放器就是自己用java swing写的。我在百度网盘http://pan.baidu.com/share/link?shareid=110575&amp;amp;uk=2165635302放了一份,楼主可以先看下。我这个需要32位的java虚拟机,不支持64……
那个路径是你MP3音乐所在的路径。
依山_慕雪 2012-11-07
  • 打赏
  • 举报
回复
好像只能播放wav格式的音频
syscnsam 2012-11-07
  • 打赏
  • 举报
回复
引用 4 楼 Faneney 的回复:
引用 2 楼 ticmy 的回复:http://code.google.com/p/yoyoplayer/这个。。我下载了一个,怎么全是jar?
在dos下输入 java -jar 目下的的YOYOPlayer.jar
依山_慕雪 2012-11-07
  • 打赏
  • 举报
回复
找jdk目录lib目录下面有个rt.jar加进去就行了
依山_慕雪 2012-11-07
  • 打赏
  • 举报
回复
import sun.audio.AudioStream; import sun.audio.ContinuousAudioDataStream; 这个是在jdk里面的
依山_慕雪 2012-11-07
  • 打赏
  • 举报
回复
引用 8 楼 Faneney 的回复:
引用 7 楼 li164589371 的回复:import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import sun.audio.AudioStream;
import sun.audio.ContinuousAud……


报错是要把构建路劲改一下,你用的是jre要改成jdk
Faneney 2012-11-07
  • 打赏
  • 举报
回复
引用 6 楼 akemi_homura 的回复:
引用 5 楼 akemi_homura 的回复:我听歌用的播放器就是自己用java swing写的。我在百度网盘http://pan.baidu.com/share/link?shareid=110575&amp;uk=2165635302放了一份,楼主可以先看下。我这个需要32位的java虚拟机,不支持64位java虚拟机。需要告诉楼主的是,我按照自己的需求来写……
下载了,一个可执行文件,可是路径弄上去没反应哇?
Faneney 2012-11-07
  • 打赏
  • 举报
回复
引用 7 楼 li164589371 的回复:
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import sun.audio.AudioStream; import sun.audio.ContinuousAudioDataStream; /** * Copyright……
为嘛把代码弄过去会报错?还要建立类?
依山_慕雪 2012-11-07
  • 打赏
  • 举报
回复
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import sun.audio.AudioStream; import sun.audio.ContinuousAudioDataStream; /** * Copyright (C), 2006-2010, ChengDu info. Co., Ltd. * FileName: Music.java * 此类为音乐类,用于播放各种音乐 * * @author ls * @Date 2010-4-1 * @version 1.00 */ public class GameMusic extends Thread { public final static String WELCOME = "music/dancer.wav"; public final static String EV = "music/evillaugh.wav"; public final static String FLOOP = "music/floop.wav"; public final static String SIREN = "music/siren.wav"; public final static String READY = "music/readysetplant.wav"; public final static String SET = "music/grassstep.wav"; public final static String FIRE = "music/firepea.wav"; public final static String KERN= "music/kernelpult.wav"; public final static String SHOVER = "music/gravebutton.wav"; public final static String PUFF = "music/puff.wav"; public final static String EXPLOSION = "music/explosion.wav"; public final static String END= "music/scream.wav"; private static AudioStream play_music; private static ContinuousAudioDataStream musicStream; /** * Method: Music Desctiptoin: 构造方法 * * @param musicFile * 音乐文件路径 * @param time * 音乐播放时间 */ public GameMusic(String musicFile) {} /** * 播放单音音频 * @param musicFile 单音音频文件路径 */ public static void playSingleMusic(String musicFile) { FileInputStream fin = null; try { fin = new FileInputStream(musicFile);//创建文件读入流 play_music = new sun.audio.AudioStream(fin);//创建音频流 sun.audio.AudioPlayer.player.start(play_music);// 播放音乐 } catch (Exception e) { System.out.println(e); } } /** * 循环播放音频 * @param musicFile */ public static void playLoopMusic(String musicFile){ stopLoopMusic(); try { FileInputStream musicInputStream = new FileInputStream(musicFile); sun.audio.AudioStream play_Loopmusic = new sun.audio.AudioStream(musicInputStream); musicStream = new ContinuousAudioDataStream(play_Loopmusic.getData()); sun.audio.AudioPlayer.player.start(musicStream); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 停止播放循环音频 */ public static void stopLoopMusic() { if(musicStream != null){ sun.audio.AudioPlayer.player.stop(musicStream); try { musicStream.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 停止播放单音音频 * */ public static void stopSingleMusic() { sun.audio.AudioPlayer.player.stop(play_music); } // public static void main(String[] args) { // GameMusic.playSingleMusic("music/zombaquarium_die.wav"); // } } 代码直接贴给你,以前做swing的植物大战僵尸用的
akemi_homura 2012-11-07
  • 打赏
  • 举报
回复
引用 5 楼 akemi_homura 的回复:
我听歌用的播放器就是自己用java swing写的。我在百度网盘http://pan.baidu.com/share/link?shareid=110575&uk=2165635302放了一份,楼主可以先看下。我这个需要32位的java虚拟机,不支持64位java虚拟机。
需要告诉楼主的是,我按照自己的需求来写的 能放几种格式的音乐,当做只能放MP3吧 可以放放MPG等格式的视频。好吧。功能简单的我都想把回帖删了。。不说了。
加载更多回复(3)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧