Guest User

Untitled

a guest
May 24th, 2018
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.01 KB | None | 0 0
  1. import java.io.*;
  2. import java.awt.*;
  3. import java.util.*;
  4. import javax.swing.*;
  5. import java.awt.event.*;
  6. import javax.swing.event.*;
  7. import javax.sound.sampled.*;
  8. import javax.swing.filechooser.*;
  9. import java.util.concurrent.TimeUnit;
  10. public class musica extends JFrame implements ActionListener, ChangeListener{
  11. private JButton reproducir, pausar, detener, adelantar, retroceder;
  12. private JPanel panel_de_botones;
  13. private JSlider volumen;
  14. private JProgressBar barra_de_progreso;
  15. private FloatControl control;
  16. private Clip clip;
  17. private Thread proceso_paralelo;
  18. private String[] archivos;
  19. private int posicion = 0;
  20. private long microsegundos = 0;
  21. private float decibeles_volumen = -30.0f;
  22. private String directorio;
  23. /*metodo de la interfaz grafica*/
  24. public musica(String args){
  25. setTitle("Reproductor de Musica");
  26. /*panel de botones*/
  27. panel_de_botones = new JPanel();
  28. reproducir = new JButton("►"); pausar = new JButton("||"); detener = new JButton("■"); retroceder = new JButton("|◄"); adelantar = new JButton("►|");
  29. volumen = new JSlider(-60, 6, (int)decibeles_volumen);
  30. reproducir.addActionListener(this);
  31. pausar.addActionListener(this);
  32. detener.addActionListener(this);
  33. retroceder.addActionListener(this);
  34. adelantar.addActionListener(this);
  35. volumen.addChangeListener(this);
  36. panel_de_botones.add(reproducir);
  37. panel_de_botones.add(pausar);
  38. panel_de_botones.add(detener);
  39. panel_de_botones.add(retroceder);
  40. panel_de_botones.add(adelantar);
  41. panel_de_botones.add(volumen);
  42. /*reproductor de musica*/
  43. barra_de_progreso = new JProgressBar(0,100);
  44. barra_de_progreso.setStringPainted(true);
  45. /*posicionamiento de objetos*/
  46. GridLayout layout = new GridLayout(2, 2, 0, 0);
  47. setLayout(layout);
  48. add(panel_de_botones);
  49. add(barra_de_progreso);
  50. /*listar*/
  51. String ruta = args;
  52. File archivo = new File(ruta);
  53. //ruta de directorio
  54. if(archivo.isDirectory()){
  55. directorio = ruta;
  56. String[] lista = archivo.list();
  57. ArrayList<String> wav = new ArrayList<String>();
  58. for(int x=0;x<(lista.length);x++){if(lista[x].matches(".*\.(wav|WAV)")){wav.add(lista[x]);}}
  59. archivos = wav.toArray(new String[wav.size()]);
  60. reproductor(new File(directorio+File.separator+archivos[0]));
  61. posicion = 0;
  62. }
  63. //ruta de archivo
  64. else{
  65. String nombre = archivo.getName();
  66. directorio = archivo.getParent();
  67. archivo = new File(directorio);
  68. String[] lista = archivo.list();
  69. ArrayList<String> wav = new ArrayList<String>();
  70. for(int x=0;x<(lista.length);x++){if(lista[x].matches(".*\.(wav|WAV)")){wav.add(lista[x]);}}
  71. archivos = wav.toArray(new String[wav.size()]);
  72. for(int x=0;x<(archivos.length);x++){if(archivos[x].equals(nombre)){posicion = x;}}
  73. reproductor(new File(directorio+File.separator+archivos[posicion]));
  74. }
  75. reproducir.setEnabled(false);
  76. decibeles_volumen = -30;
  77. }
  78. /*metodo principal*/
  79. public static void main(String[] args){
  80. JFrame.setDefaultLookAndFeelDecorated(true);
  81. JDialog.setDefaultLookAndFeelDecorated(true);
  82. if(args.length==1){
  83. File archivo = new File(args[0]);
  84. if(!archivo.exists()){System.exit(0);}
  85. musica interfaz = new musica(args[0]);
  86. interfaz.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  87. interfaz.setSize(480,100);
  88. interfaz.setLocationRelativeTo(null);
  89. interfaz.setResizable(false);
  90. interfaz.setVisible(true);
  91. }
  92. else{
  93. try{
  94. JFileChooser selectordearchivo = new JFileChooser();
  95. selectordearchivo.setFileSelectionMode(JFileChooser.FILES_ONLY);
  96. selectordearchivo.addChoosableFileFilter(new FileNameExtensionFilter("Music", "wav"));
  97. selectordearchivo.setAcceptAllFileFilterUsed(false);
  98. int estado = selectordearchivo.showOpenDialog(null);
  99. if(estado==JFileChooser.APPROVE_OPTION){
  100. File archivo = selectordearchivo.getSelectedFile();
  101. if(!archivo.exists()){System.exit(0);}
  102. musica interfaz = new musica(archivo.toString());
  103. interfaz.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  104. interfaz.setSize(480,100);
  105. interfaz.setLocationRelativeTo(null);
  106. interfaz.setResizable(false);
  107. interfaz.setVisible(true);
  108. }
  109. else{System.exit(0);}
  110. }catch(Exception ex){JOptionPane.showMessageDialog(null,"No se encontro Musica","ADVERTENCIA!!!",2);}
  111. }
  112. }
  113. }
  114.  
  115. /*metodos para reproducir*/
  116. public void reproductor(File audio){
  117. proceso_paralelo = new Thread("Hilo de procesos"){
  118. public void run(){
  119. try{
  120. /*reproductor*/
  121. AudioInputStream inputStream = AudioSystem.getAudioInputStream(audio);
  122. clip = AudioSystem.getClip();
  123. clip.open(inputStream);
  124. barra_de_progreso.setMaximum((int) TimeUnit.MICROSECONDS.toSeconds(clip.getMicrosecondLength()) );
  125. /*controlador del volumen*/
  126. control = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
  127. float max = control.getMaximum();
  128. float min = control.getMinimum();
  129. volumen.setMaximum((int)max);
  130. volumen.setMinimum((int)-60);
  131. /*volumen por default*/
  132. volumen.setValue((int)decibeles_volumen);
  133. control.setValue(volumen.getValue());
  134. /*posicion de reproduccion si fue pausado*/
  135. clip.setMicrosecondPosition(microsegundos);
  136. clip.start();
  137. /*barra de progreso con contador de tiempo*/
  138. while(clip.getMicrosecondLength() != clip.getMicrosecondPosition()){
  139. Thread.sleep(200);
  140. barra_de_progreso.setString(String.format("%d:%d:%d",TimeUnit.MICROSECONDS.toHours(clip.getMicrosecondPosition()) /*- TimeUnit.DAYS.toHours(TimeUnit.MICROSECONDS.toDays(difference))*/ ,TimeUnit.MICROSECONDS.toMinutes(clip.getMicrosecondPosition()) - TimeUnit.HOURS.toMinutes(TimeUnit.MICROSECONDS.toHours(clip.getMicrosecondPosition())), TimeUnit.MICROSECONDS.toSeconds(clip.getMicrosecondPosition()) - TimeUnit.MINUTES.toSeconds(TimeUnit.MICROSECONDS.toMinutes(clip.getMicrosecondPosition()))));
  141. barra_de_progreso.setValue((int) TimeUnit.MICROSECONDS.toSeconds(clip.getMicrosecondPosition()));
  142. }
  143. /*fin del primer sound track*/
  144. clip.stop();
  145. clip.close();
  146. barra_de_progreso.setValue(0);
  147. barra_de_progreso.setString(String.format("0:0:0"));
  148. /*auto reproduccion de la siguiente melodia*/
  149. if(posicion==(archivos.length-1)){posicion = 0;}
  150. else{posicion = posicion + 1;}
  151. reproductor(new File(directorio+File.separator+archivos[posicion]));
  152. }catch(Exception e){JOptionPane.showMessageDialog(null,"No se pudo reproducir","ERROR",0);}
  153. }
  154. };
  155. proceso_paralelo.start();
  156. }
  157. /*evento de accionamiento del slider*/
  158. public void stateChanged(ChangeEvent ce){
  159. if(ce.getSource()==volumen){
  160. decibeles_volumen = ((int)volumen.getValue());
  161. control.setValue(volumen.getValue());
  162. }
  163. }
  164. /*evento de accionamiento del boton*/
  165. public void actionPerformed(ActionEvent ae){
  166. if(ae.getSource()==retroceder){
  167. reproducir.setEnabled(false);
  168. pausar.setEnabled(true);
  169. detener.setEnabled(true);
  170. clip.stop();
  171. clip.close();
  172. barra_de_progreso.setValue(0);
  173. barra_de_progreso.setString(String.format("0:0:0"));
  174. proceso_paralelo.stop();
  175. /*algoritmo de playlist ciclica de la carpeta*/
  176. microsegundos = 0;
  177. if(posicion==0){posicion = archivos.length - 1;}
  178. else{posicion = posicion - 1;}
  179. reproductor(new File(directorio+File.separator+archivos[posicion]));
  180. }
  181. if(ae.getSource()==adelantar){
  182. reproducir.setEnabled(false);
  183. pausar.setEnabled(true);
  184. detener.setEnabled(true);
  185. clip.stop();
  186. clip.close();
  187. barra_de_progreso.setValue(0);
  188. barra_de_progreso.setString(String.format("0:0:0"));
  189. proceso_paralelo.stop();
  190. /*algoritmo de playlist ciclica de la carpeta*/
  191. microsegundos = 0;
  192. if(posicion==(archivos.length-1)){posicion = 0;}
  193. else{posicion = posicion + 1;}
  194. reproductor(new File(directorio+File.separator+archivos[posicion]));
  195. }
  196. if(ae.getSource()==pausar){
  197. /*interfaz grafica de botones*/
  198. reproducir.setEnabled(true);
  199. pausar.setEnabled(false);
  200. detener.setEnabled(true);
  201. /*reproductor de musica*/
  202. microsegundos = clip.getMicrosecondPosition();
  203. clip.stop();
  204. clip.close();
  205. proceso_paralelo.stop();
  206. barra_de_progreso.setValue((int) TimeUnit.MICROSECONDS.toSeconds(microsegundos));
  207. }
  208. if(ae.getSource()==reproducir){
  209. /*interfaz grafica de botones*/
  210. reproducir.setEnabled(false);
  211. pausar.setEnabled(true);
  212. detener.setEnabled(true);
  213. /*reproductor de musica*/
  214. reproductor(new File(directorio+File.separator+archivos[posicion]));
  215. }
  216. if(ae.getSource()==detener){
  217. /*reproductor de musica*/
  218. microsegundos = 0;
  219. barra_de_progreso.setValue(0);
  220. barra_de_progreso.setString(String.format("0:0:0"));
  221. clip.stop();
  222. clip.close();
  223. proceso_paralelo.stop();
  224. /*interfaz grafica de botones*/
  225. reproducir.setEnabled(true);
  226. pausar.setEnabled(false);
  227. detener.setEnabled(false);
  228. }
  229. }
Add Comment
Please, Sign In to add comment