Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import javax.sound.sampled.AudioFormat;
- import javax.sound.sampled.AudioInputStream;
- import javax.sound.sampled.AudioSystem;
- import javax.sound.sampled.DataLine;
- import javax.sound.sampled.SourceDataLine;
- import javax.swing.JFileChooser;
- import javax.swing.JMenu;
- import javax.swing.JFrame;
- import javax.swing.JButton;
- import javax.swing.JOptionPane;
- import java.awt.GridLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.io.File;
- import javax.swing.AbstractAction;
- import javax.swing.JMenuBar;
- public class JAudioP extends JFrame implements ActionListener, Runnable {
- private Thread thd = null;
- private JButton jb = null;
- private JButton jbbrw = null;
- private String nameBrw = null;
- public static void main(String[] args) {
- JAudioP jframe = new JAudioP();
- jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- jframe.setVisible(true);
- jframe.setResizable(false);
- }
- //инициализация интерфейса программы
- JAudioP() {
- setTitle("Проигрыватель аудио (wav, au, aiff)");
- setSize(600, 300);
- GridLayout gl = new GridLayout(2, 1);
- setLayout(gl);
- JMenu fileMenu = new JMenu("Файл");
- JMenu aboutMenu = new JMenu("Информация");
- fileMenu.add(new AbstractAction("Выход (Alt + F4)") {
- @Override
- public void actionPerformed(ActionEvent event) {
- System.exit(0);
- }
- });
- aboutMenu.add(new AbstractAction("Об Авторе") {
- @Override
- public void actionPerformed(ActionEvent event) {
- JOptionPane
- .showConfirmDialog(
- null,
- "Евгений Осипов, 2012 год. \n"
- + "[email protected], www.fastandclever.ru",
- "Об Авторе", JOptionPane.PLAIN_MESSAGE,
- JOptionPane.PLAIN_MESSAGE);
- }
- });
- jb = new JButton("Play |>");
- jb.addActionListener(this);
- jbbrw = new JButton("Выбрать файл");
- jbbrw.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- JFileChooser chooser = new JFileChooser();
- int returnVal = chooser.showOpenDialog(chooser);
- if (returnVal == JFileChooser.APPROVE_OPTION) {
- nameBrw = chooser.getSelectedFile().getPath();
- jbbrw.setText(nameBrw);
- }
- }
- });
- JMenuBar menuBar = new JMenuBar();
- setJMenuBar(menuBar);
- menuBar.add(fileMenu);
- menuBar.add(aboutMenu);
- add(jb);
- add(jbbrw);
- }
- //слушатель событий кнопки jb
- @Override
- public void actionPerformed(ActionEvent e) {
- thd = new Thread(this);
- thd.start();
- }
- //запуск отдельного потока
- @Override
- public void run() {
- try{
- soundPlay(nameBrw);
- }catch(NullPointerException e){
- JOptionPane
- .showConfirmDialog(
- null,
- "Нужно выбрать wav, au или aiff",
- "Ошибка", JOptionPane.PLAIN_MESSAGE,
- JOptionPane.PLAIN_MESSAGE);
- jb.setEnabled(true);
- }
- }
- public void soundPlay(String file) {
- jb.setEnabled(false);
- SourceDataLine sdline = null;
- AudioInputStream audioInpStr = null;
- byte[] b = new byte[1024]; //буфер данных
- try {
- File f = new File(file);
- //входной поток байтов из файла f
- audioInpStr = AudioSystem.getAudioInputStream(f);
- //извлечение из потока информацию о способе записи звука
- AudioFormat af = audioInpStr.getFormat();
- //информация записыватся в объект info
- DataLine.Info info = new DataLine.Info(SourceDataLine.class, af);
- //проверка, приемлем ли такой способ записи звука
- if (!AudioSystem.isLineSupported(info)) {
- System.err.println("Линия не поддерживается");
- System.exit(0);
- }
- //входная линия
- sdline = (SourceDataLine) AudioSystem.getLine(info);
- //открытие линии
- sdline.open(af);
- //старт проигрывания
- sdline.start(); // Ждем появления данных в буфере
- int num = 0;
- //заполняем буфер
- while ((num = audioInpStr.read(b)) != -1)
- sdline.write(b, 0, num);
- //сбрасывание буфера, проигрывая остаток файла
- sdline.drain();
- //закрытие потока
- audioInpStr.close();
- } catch (Exception e) {
- System.err.println(e);
- }
- //остановка проигрывания
- sdline.stop();
- //закрытие линии
- sdline.close();
- jb.setEnabled(true);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment