java wav播放器添加暂停并继续

编程入门 行业动态 更新时间:2024-10-23 20:26:39
本文介绍了java wav播放器添加暂停并继续的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有这个代码从播放和停止的文件夹播放wav文件。如何添加暂停并继续?

I have this code which plays wav files from a folder with play and stop. How can I add pause and continue?

import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import java.applet.AudioClip; import java.URL; public class JukeBox extends JFrame { private JComboBox musicCombo; private JButton stopButton, playButton; private AudioClip[] music; private AudioClip current; public JukeBox(String title) { super(title); getContentPane().add(new JukeBoxControls()); } public static void main(String [] args) { JukeBox myf = new JukeBox ("WAV COMBOBOX"); myf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); myf.pack(); myf.setVisible(true); } private class JukeBoxControls extends JPanel { public JukeBoxControls() { URL url1, url2, url3, url4, url5; url1 = url2 = url3 = url4 = url5 = null; try { url1 = new URL ("file", "localhost", "beep-01a.wav"); url2 = new URL ("file", "localhost", "beep-02.wav"); url3 = new URL ("file", "localhost", "beep-03.wav"); url4 = new URL ("file", "localhost", "beep-04.wav"); url5 = new URL ("file", "localhost", "beep-05.wav"); } catch (Exception exception) {} music = new AudioClip[7]; music[0] = null; music[1] = JApplet.newAudioClip (url1); music[2] = JApplet.newAudioClip (url2); music[3] = JApplet.newAudioClip (url3); music[4] = JApplet.newAudioClip (url4); music[5] = JApplet.newAudioClip (url5); JLabel titleLabel = new JLabel ("WAV COMBOBOX"); titleLabel.setAlignmentX (Component.CENTER_ALIGNMENT); String[] musicNames = {"vyberte...", "sound 1", "sound 2", "sound 3", "sound 4", "sound 5"}; musicCombo = new JComboBox (musicNames); musicCombo.setAlignmentX (Component.CENTER_ALIGNMENT); playButton = new JButton ("Play", new ImageIcon ("play.gif")); playButton.setBackground (Color.white); stopButton = new JButton ("Stop", new ImageIcon ("stop.png")); stopButton.setBackground (Color.white); JPanel buttons = new JPanel(); buttons.setLayout (new BoxLayout (buttons, BoxLayout.X_AXIS)); buttons.add (playButton); buttons.add (Box.createRigidArea (new Dimension(5,0))); buttons.add (stopButton); setPreferredSize (new Dimension (350, 200)); setLayout (new BoxLayout (this, BoxLayout.Y_AXIS)); add (Box.createRigidArea (new Dimension(0,5))); add (titleLabel); add (Box.createRigidArea (new Dimension(0,5))); add (musicCombo); add (Box.createRigidArea (new Dimension(0,5))); add (buttons); add (Box.createRigidArea (new Dimension(0,5))); musicCombo.addActionListener (new ComboListener()); stopButton.addActionListener (new ButtonListener()); playButton.addActionListener (new ButtonListener()); current = null; } } private class ComboListener implements ActionListener { public void actionPerformed (ActionEvent event) { if (current != null) current.stop(); current = music[musicCombo.getSelectedIndex()]; } } private class ButtonListener implements ActionListener { public void actionPerformed (ActionEvent event) { if (current != null) current.stop(); if (event.getSource() == playButton) if (current != null) current.play(); } } }

推荐答案

如果您使用 javax.sound.sampled.Clip 和支持API而不是 java.applet.AudioClip ,你可以获得更多的音频剪辑控制权,例如......

If you were to use javax.sound.sampled.Clip and the supporting API instead of java.applet.AudioClip, you would gain much more control over the audio clip, for example...

import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.Clip; import javax.sound.sampled.DataLine; import javax.sound.sampled.LineEvent; import javax.sound.sampled.LineEvent.Type; import javax.sound.sampled.LineListener; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.UnsupportedAudioFileException; import javax.swing.Action; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; public class SimplyPlayer { public static void main(String[] args) { new SimplyPlayer(); } public SimplyPlayer() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new TestPane()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class TestPane extends JPanel { private Clip clip; private JTextField audioFile; private JButton play; private JButton stop; private int lastFrame; public TestPane() { setLayout(new GridBagLayout()); audioFile = new JTextField(20); play = new JButton(">"); stop = new JButton("[]"); JPanel controls = new JPanel(); controls.add(play); controls.add(stop); GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.weightx = 1; gbc.fill = GridBagConstraints.HORIZONTAL; add(audioFile, gbc); gbc.gridy++; add(controls, gbc); play.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (clip == null) { try { loadClip(new File(audioFile.getText())); clip.start(); clip.addLineListener(new LineListener() { @Override public void update(LineEvent event) { if (event.getType().equals(Type.START)) { play.setText("||"); } else if (event.getType().equals(Type.OPEN)) { System.out.println("Open"); } else if (event.getType().equals(Type.STOP)) { play.setText(">"); } else if (event.getType().equals(Type.CLOSE)) { play.setText(">"); } } }); play.setText("||"); } catch (LineUnavailableException | IOException | UnsupportedAudioFileException ex) { ex.printStackTrace(); JOptionPane.showMessageDialog(TestPane.this, "Failed to load audio clip", "Error", JOptionPane.ERROR_MESSAGE); } } else { if (clip.isRunning()) { lastFrame = clip.getFramePosition(); clip.stop(); } else { if (lastFrame < clip.getFrameLength()) { clip.setFramePosition(lastFrame); } else { clip.setFramePosition(0); } clip.start(); } } } }); stop.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (clip != null) { lastFrame = 0; clip.stop(); } } }); } protected void loadClip(File audioFile) throws LineUnavailableException, IOException, UnsupportedAudioFileException { AudioInputStream audioStream = AudioSystem.getAudioInputStream(audioFile); AudioFormat format = audioStream.getFormat(); DataLine.Info info = new DataLine.Info(Clip.class, format); this.clip = (Clip) AudioSystem.getLine(info); this.clip.open(audioStream); } } }

基本上,在播放并按暂停按钮时, ActionListener 获取当前播放帧并停止剪辑,当您单击播放按钮 ActionListener 将剪辑设置为当前帧并恢复播放

Basically, when playing and you press the "pause" button, the ActionListener gets the current playback frame and stops the clip, when you click the play button ActionListener will set the clip to the current frame and resume playback

更多推荐

java wav播放器添加暂停并继续

本文发布于:2023-07-11 12:19:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1094037.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:播放器   java   wav

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!