evgeniyosipov

JAudioP.java

Dec 27th, 2014
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.66 KB | None | 0 0
  1. import javax.sound.sampled.AudioFormat;
  2. import javax.sound.sampled.AudioInputStream;
  3. import javax.sound.sampled.AudioSystem;
  4. import javax.sound.sampled.DataLine;
  5. import javax.sound.sampled.SourceDataLine;
  6. import javax.swing.JFileChooser;
  7. import javax.swing.JMenu;
  8. import javax.swing.JFrame;
  9. import javax.swing.JButton;
  10. import javax.swing.JOptionPane;
  11. import java.awt.GridLayout;
  12. import java.awt.event.ActionEvent;
  13. import java.awt.event.ActionListener;
  14. import java.io.File;
  15. import javax.swing.AbstractAction;
  16. import javax.swing.JMenuBar;
  17.  
  18. public class JAudioP extends JFrame implements ActionListener, Runnable {
  19.  
  20.     private Thread thd = null;
  21.     private JButton jb = null;
  22.     private JButton jbbrw = null;
  23.     private String nameBrw = null;
  24.  
  25.     public static void main(String[] args) {
  26.  
  27.         JAudioP jframe = new JAudioP();
  28.         jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  29.         jframe.setVisible(true);
  30.         jframe.setResizable(false);
  31.  
  32.     }
  33.  
  34.     //инициализация интерфейса программы
  35.     JAudioP() {
  36.  
  37.         setTitle("Проигрыватель аудио (wav, au, aiff)");
  38.         setSize(600, 300);
  39.  
  40.         GridLayout gl = new GridLayout(2, 1);
  41.         setLayout(gl);
  42.  
  43.         JMenu fileMenu = new JMenu("Файл");
  44.         JMenu aboutMenu = new JMenu("Информация");
  45.  
  46.         fileMenu.add(new AbstractAction("Выход (Alt + F4)") {
  47.             @Override
  48.             public void actionPerformed(ActionEvent event) {
  49.                 System.exit(0);
  50.             }
  51.         });
  52.  
  53.         aboutMenu.add(new AbstractAction("Об Авторе") {
  54.             @Override
  55.             public void actionPerformed(ActionEvent event) {
  56.                 JOptionPane
  57.                         .showConfirmDialog(
  58.                                 null,
  59.                                 "Евгений Осипов, 2012 год. \n"
  60.                                         + "[email protected], www.fastandclever.ru",
  61.                                 "Об Авторе", JOptionPane.PLAIN_MESSAGE,
  62.                                 JOptionPane.PLAIN_MESSAGE);
  63.             }
  64.         });
  65.  
  66.         jb = new JButton("Play |>");
  67.         jb.addActionListener(this);
  68.  
  69.         jbbrw = new JButton("Выбрать файл");
  70.         jbbrw.addActionListener(new ActionListener() {
  71.             @Override
  72.             public void actionPerformed(ActionEvent e) {
  73.  
  74.                 JFileChooser chooser = new JFileChooser();
  75.                 int returnVal = chooser.showOpenDialog(chooser);
  76.                 if (returnVal == JFileChooser.APPROVE_OPTION) {
  77.                     nameBrw = chooser.getSelectedFile().getPath();
  78.                     jbbrw.setText(nameBrw);
  79.  
  80.             }
  81.             }
  82.             });
  83.  
  84.         JMenuBar menuBar = new JMenuBar();
  85.         setJMenuBar(menuBar);
  86.  
  87.         menuBar.add(fileMenu);
  88.         menuBar.add(aboutMenu);
  89.  
  90.         add(jb);
  91.         add(jbbrw);
  92.  
  93.     }
  94.  
  95.     //слушатель событий кнопки jb
  96.     @Override
  97.     public void actionPerformed(ActionEvent e) {
  98.  
  99.         thd = new Thread(this);
  100.         thd.start();
  101.  
  102.     }
  103.  
  104.     //запуск отдельного потока
  105.     @Override
  106.     public void run() {
  107.  
  108.         try{
  109.             soundPlay(nameBrw);
  110.         }catch(NullPointerException e){
  111.  
  112.             JOptionPane
  113.             .showConfirmDialog(
  114.                     null,
  115.                     "Нужно выбрать wav, au или aiff",
  116.                     "Ошибка", JOptionPane.PLAIN_MESSAGE,
  117.                     JOptionPane.PLAIN_MESSAGE);
  118.             jb.setEnabled(true);
  119.  
  120.         }
  121.  
  122.     }
  123.  
  124.     public void soundPlay(String file) {
  125.         jb.setEnabled(false);
  126.  
  127.         SourceDataLine sdline = null;
  128.         AudioInputStream audioInpStr = null;
  129.         byte[] b = new byte[1024]; //буфер данных
  130.         try {
  131.  
  132.             File f = new File(file);
  133.  
  134.             //входной поток байтов из файла f
  135.             audioInpStr = AudioSystem.getAudioInputStream(f);
  136.  
  137.             //извлечение из потока информацию о способе записи звука
  138.             AudioFormat af = audioInpStr.getFormat();
  139.  
  140.             //информация записыватся в объект info
  141.             DataLine.Info info = new DataLine.Info(SourceDataLine.class, af);
  142.  
  143.             //проверка, приемлем ли такой способ записи звука
  144.             if (!AudioSystem.isLineSupported(info)) {
  145.                 System.err.println("Линия не поддерживается");
  146.                 System.exit(0);
  147.             }
  148.  
  149.             //входная линия
  150.             sdline = (SourceDataLine) AudioSystem.getLine(info);
  151.  
  152.             //открытие линии
  153.             sdline.open(af);
  154.  
  155.             //старт проигрывания
  156.             sdline.start(); // Ждем появления данных в буфере
  157.             int num = 0;
  158.  
  159.             //заполняем буфер
  160.             while ((num = audioInpStr.read(b)) != -1)
  161.                 sdline.write(b, 0, num);
  162.  
  163.             //сбрасывание буфера, проигрывая остаток файла
  164.             sdline.drain();
  165.  
  166.             //закрытие потока
  167.             audioInpStr.close();
  168.         } catch (Exception e) {
  169.             System.err.println(e);
  170.         }
  171.  
  172.         //остановка проигрывания
  173.         sdline.stop();
  174.  
  175.         //закрытие линии
  176.         sdline.close();
  177.         jb.setEnabled(true);
  178.     }
  179.  
  180. }
Advertisement
Add Comment
Please, Sign In to add comment