public void mouseDragged(MouseEvent e) { if (lecteur != null) { if (e.getSource() == deplacement) { if (e.getModifiers() == MouseEvent.BUTTON1_MASK) { lecteur.setMediaTime( new Time( (double) (deplacement.getValue() * lecteur.getDuration().getSeconds() / 100))); } } } }
/** * 快进 * * @param progress */ private void seekTo(int progress) { try { if (mediaPlayer != null) { // float playedRate = (float) progress / songInfo.getDuration(); // mediaPlayer.seekTo(playedRate); // mediaPlayer.stop(); double totalTime = mediaPlayer.getDuration().getSeconds(); double rate = progress * 1.00 / songInfo.getDuration(); mediaPlayer.setMediaTime(new Time(totalTime * rate)); // mediaPlayer.start(); MediaManage.getMediaManage().setPlayStatus(MediaManage.PLAYING); } } catch (Exception e) { e.printStackTrace(); } }
// returns the length of the track in the form of seconds public double getTime() { return player.getDuration().getSeconds(); }
/** * 播放歌曲 * * @param songInfo */ private void playInfoMusic(SongInfo msongInfo) { this.songInfo = msongInfo; if (songInfo == null) { SongMessage msg = new SongMessage(); msg.setType(SongMessage.SERVICEERRORMUSIC); msg.setErrorMessage(SongMessage.ERRORMESSAGEPLAYSONGNULL); ObserverManage.getObserver().setMessage(msg); return; } File songFile = new File(songInfo.getFilePath()); if (!songFile.exists()) { logger.error("播放文件不存在!"); // 下一首 SongMessage songMessage = new SongMessage(); songMessage.setType(SongMessage.NEXTMUSIC); ObserverManage.getObserver().setMessage(songMessage); return; } try { if (mediaPlayer == null) { // mediaPlayer = new MediaPlayer(); // // mediaPlayer.setDataSource(songInfo.getFilePath()); // // // // float playedRate = (float) songInfo.getPlayProgress() // // / songInfo.getDuration(); // // mediaPlayer.seekTo(playedRate); // mediaPlayer.setMediaLocator(new MediaLocator(songInfo // .getFilePath())); File file = new File(songInfo.getFilePath()); mediaPlayer = Manager.createRealizedPlayer(new MediaLocator(file.toURL())); initVolume(); mediaPlayer.prefetch(); // 获取媒体数据 double totalTime = mediaPlayer.getDuration().getSeconds(); double rate = songInfo.getPlayProgress() * 1.00 / songInfo.getDuration(); mediaPlayer.setMediaTime(new Time(totalTime * rate)); mediaPlayer.prefetch(); mediaPlayer.start(); } } catch (Exception e) { logger.error("不能播放此文件:" + songInfo.getFilePath()); e.printStackTrace(); SongMessage songMessage = new SongMessage(); songMessage.setType(SongMessage.NEXTMUSIC); ObserverManage.getObserver().setMessage(songMessage); } if (mediaPlayer != null) { mediaPlayer.addControllerListener( new ControllerListener() { @Override public void controllerUpdate(ControllerEvent e) { // 当媒体播放结束时 if (e instanceof EndOfMediaEvent) { mediaPlayer.setMediaTime(new Time(0)); mediaPlayer = null; SongMessage songMessage = new SongMessage(); songMessage.setType(SongMessage.NEXTMUSIC); ObserverManage.getObserver().setMessage(songMessage); } } }); // mediaPlayer.setOnCompletionListener(new OnCompletionListener() { // // @Override // public void onProgressChanged() { // // float playedRate = mediaPlayer.getPlayedRate(); // // long playProgress = (long) (songInfo.getDuration() * playedRate); // // if (songInfo != null) { // songInfo.setPlayProgress(playProgress); // SongMessage msg = new SongMessage(); // msg.setSongInfo(songInfo); // msg.setType(SongMessage.SERVICEPLAYINGMUSIC); // ObserverManage.getObserver().setMessage(msg); // } // } // // @Override // public void onCompletion() { // // SongMessage songMessage = new SongMessage(); // songMessage.setType(SongMessage.NEXTMUSIC); // ObserverManage.getObserver().setMessage(songMessage); // } // }); } if (lrcThread == null) { lrcThread = new Thread(new LrcRunable()); lrcThread.start(); } }
public void actionPerformed(ActionEvent e) { if (e.getSource() == play_time) { dure.setText(toString(lecteur.getMediaTime()) + " - " + toString(lecteur.getDuration())); deplacement.setValue( (int) (lecteur.getMediaTime().getSeconds() / lecteur.getDuration().getSeconds() * 100)); if (lecteur.getMediaTime().getSeconds() == lecteur.getDuration().getSeconds()) { lecteur.stop(); lecteur.close(); lecteur = null; deplacement.setValue(0); dure.setText("00:00 - " + toString(lecteur.getDuration())); play_time.stop(); } } if (e.getSource() == open) { fc = new JFileChooser(); fc.setAcceptAllFileFilterUsed(false); fc.showOpenDialog(this); if (fc.getDialogType() == JFileChooser.APPROVE_OPTION) { fichier = fc.getSelectedFile(); name.setText(fichier.getName().substring(0, (int) fichier.getName().length() - 4)); } } if (e.getSource() == play) { try { if (fichier != null) { if (lecteur == null) { lecteur = Manager.createPlayer(fichier.toURL()); lecteur.start(); play_time.start(); } if (enPause == true) { lecteur.start(); play_time.start(); enPause = false; } } } catch (Exception ex) { ex.printStackTrace(); } } if (e.getSource() == pause) { if (enPause == false && lecteur != null) { lecteur.stop(); play_time.stop(); enPause = true; } } if (e.getSource() == stop) { if (enPause == false && lecteur != null) { lecteur.stop(); lecteur.close(); lecteur = null; play_time.stop(); dure.setText("00:00 - 00:00"); deplacement.setValue(0); } } }
public static void play(Playlist playlist, int indexofmedia) throws Exception { // la valeur x est utilis�e pour le positionnement du JScroolPane de la // JTable // la valeur qu'elle cotient � �t� choisit par des experiences que nous // avons r�alis�s instance.setsStates(SunoneStates.IN_PLAY); int x = (4 * 414) / 23; // recup�ration du chemin d'une musique dans la playlist // la m�thode open file est d�finie dans la classe FileEdited permet juste // de lire et renvoyer le chemin d'un fichier BufferedReader br = FileEdited.openFile(playlist.getName(), indexofmedia); String s = br.readLine(); br.close(); CURRENTMEDIA = s; do { // debut la grande boucle qui boucle jusqu'� la fin du fin de la playlist // et r�p�te eventuellement lorsque Repeter la playlist(REPEATPLAYLIST) est // activ�e while (s != null) { // boucle de lecture jusqu'� la fin du fichier afin de reinitialiser // les param�tres pour la lecture avant de tester repeatPlaylist. if (s != null) // debut du trraitement pour chaque fichier multimedia // dont le chemin a �t� lu dans la playlist. { // localisation du m�dia gr�ce � la classe Medialocator de JMF // cette methode permet d'encapsuler le media elle permet nous permet // donc // de faire abstraction du format du fichier utili� ( qu'il soit // mp3,mpg, avi ou autres) MediaLocator mediaLocator = new MediaLocator((new File(s).toURL()).toString()); do { // debut de la boucle dont la condition de sortit est que repeter // musique // ne soit pas activ�.si REPEATMEDIA est activ� il repete la m�me // musique. try { // creation du player. c'est sur lui que le traitement se fait // on utilise la classe Manager qui est le gestionnaire permettant // return // un player (qui est en fait une thread) et c'est sur elle que // les op�rations de lecture se feront. player = Manager.createPlayer(mediaLocator); // ajout du listener qui permet d'�couter les differents phases // par lesquels passent // le player: de la realisation au debut de la lecture comme nous // le verons dans son code player.addControllerListener( new ControllerAdapter() { double dureeTotale = 0; // permet d'�couter la fin de la r�alisation du media cet �tat // ne peut �tre atteint que lorsque // la m�thode realise() a �t� appel� auparavant. // lorsque la r�alisation se termine par exemple par exemple, on // peut retirer plusieurs // propri�t� du media. Comme la dur�e totale public void realizeComplete(RealizeCompleteEvent re) { // recuperation de la dur�e du media. dureeTotale = player.getDuration().getSeconds(); try { if (PLAYSTATUS != NEXTWASPAUSE) { // quelques initialisations des labels centraux de // l'interface graphique // aussi bien celui du nom de l'artiste que celui de la // dur�e totale de la musique GUI.getInstance().jLabel6.setText("00:00/00:00"); GUI.getInstance().jLabel.setText(getArtistName(CURRENTMEDIA)); GUI.getInstance().jSlider1.setValue(0); } } catch (Exception e) { } GUI.getInstance().jSlider1.setMaximum((int) dureeTotale); player.prefetch(); } public void prefetchComplete(PrefetchCompleteEvent pe) { GUI.getInstance().reinitialiseComposantsLecteur(); GUI.getInstance().mediaVisuel = player.getVisualComponent(); if (GUI.getInstance().mediaVisuel != null) GUI.getInstance() .mediaVisuel .addMouseListener( new MouseListener() { public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { if (fullScrean == 0) { fullScrean = 1; GUI.getInstance().fullScrean = GUI.getInstance().getFullScrean(); Toolkit kit = Toolkit.getDefaultToolkit(); Dimension screen = kit.getScreenSize(); GUI.getInstance().fullScrean.setSize(screen); GUI.getInstance() .fullScrean .add(GUI.getInstance().mediaVisuel); GUI.getInstance().setVisible(false); GUI.getInstance().fullScrean.setAlwaysOnTop(true); GUI.getInstance().fullScrean.setVisible(true); } else { fullScrean = 0; GUI.getInstance() .videoPanel .add( GUI.getInstance().mediaVisuel, BorderLayout.CENTER); GUI.getInstance().fullScrean.setVisible(false); GUI.getInstance().setVisible(true); GUI.getInstance().fullScrean = null; } } } public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} }); player.getGainControl().setDB(-70 + GUI.getInstance().jSlider.getValue()); if (GUI.getInstance().mediaVisuel != null) { GUI.getInstance() .jContentPane .add(GUI.getInstance().getJPanel4(), BorderLayout.CENTER); GUI.getInstance() .videoPanel .add(GUI.getInstance().mediaVisuel, BorderLayout.CENTER); GUI.getInstance().videoPanel.setVisible(true); GUI.getInstance().videoPanel.setTitle("SunOne"); GUI.getInstance().videoPanel.pack(); if (GUI.getInstance().fullScrean != null) { GUI.getInstance().fullScrean.add(GUI.getInstance().mediaVisuel); GUI.getInstance().fullScrean.setVisible(true); } } player.start(); } }); player.realize(); while (player.getState() != Player.Started) { Thread.sleep(70); } String timeTotal = conversion((int) player.getDuration().getSeconds()); GUI.getInstance().jTable.setValueAt(timeTotal, CURRENTINDEXMEDIA, 2); GUI.getInstance().jTable.setValueAt(GUI.fleche, CURRENTINDEXMEDIA, 0); if (CURRENTINDEXMEDIA != 0) GUI.getInstance().jTable.setValueAt(" ", CURRENTINDEXMEDIA - 1, 0); GUI.getInstance() .jScrollPane .getVerticalScrollBar() .setValue(((4 * 414) / 23) * (CURRENTINDEXMEDIA / 4)); x += x; scrollIncrement = 0; if (PLAYSTATUS == NEXTWASPAUSE) { player.setMediaTime(TIME); PLAYSTATUS = -1; } while (player.getState() == Player.Started) { Thread.sleep(1000); int i = (int) player.getMediaTime().getSeconds(); GUI.getInstance().jSlider1.setValue(i); GUI.getInstance().jLabel6.setText(conversion(i) + "/" + timeTotal); } } catch (NoPlayerException noplayeur) { noplayeur.printStackTrace(); } catch (IOException io) { io.printStackTrace(); } } while (REPEATMEDIA == ACTIVE); } CURRENTINDEXMEDIA = CURRENTINDEXMEDIA + 1; br = FileEdited.openFile(playlist.getName(), CURRENTINDEXMEDIA); s = br.readLine(); br.close(); CURRENTMEDIA = s; } // fin de while on a atteint la fin du fichier // est assez important car il faut reinitialiser les param�tres et tester // si repeat eat actif // c'est � dire se replacer au debut du fichier. br = FileEdited.openFile(playlist.NAME, 0); s = br.readLine(); br.close(); CURRENTMEDIA = s; CURRENTINDEXMEDIA = 0; } while (REPEATPLAYLIST == ACTIVE); // fin de la grande boucle qui tete repeat // playlist }