Поэтому я пытаюсь создать аудиоплеер только потому, что хочу лучше понять стеки и графические интерфейсы Java. Я ожидал, что при выборе аудиофайла он должен был воспроизводиться, что он и делал раньше, но сейчас этого не происходит. Я вернулся к предыдущему коду, чтобы увидеть разницу, но я не увидел ничего такого, что могло бы помешать его работе, у меня также не было никаких ошибок в терминале.
Я пробовал просмотреть документацию Java se 8 и несколько видеороликов на YouTube об аудиоклипах в Java, и все казалось правильным, и я уже не знал, в чем проблема, также я удалил current = NumberofClips; из кода в качестве теста, и по какой-то причине действительно воспроизводился только один из двух аудиофайлов.
вот код:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.io.File;
import java.util.Stack;
import javax.imageio.ImageIO;
import javax.sound.sampled.*;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
public class MusicPlayerGui extends JFrame implements ActionListener {
// Image centered
BufferedImage image = null;
// Colors
public static final Color BG_Color = Color.BLACK;
public static final Color FG_Color = Color.WHITE;
// Song
JLabel songImage;
JLabel songTitle;
JSlider playbackSlider;
// Toolbar
JToolBar toolbar;
JMenuBar menuBar;
JMenu songMenu;
JMenuItem loadMusic;
JMenuItem loadPlaylist;
// Button
JPanel playbackBtns;
JButton prevButton;
JButton playButton;
JButton pauseButton;
JButton nextButton;
// Music stuff
Stack clips = new Stack();
int next;
int prev;
long frames;
int current = 0;
float frameRate;
int numberofClips;
AudioFormat format;
boolean play = true;
boolean first = true;
double durationInSeconds;
long seconds;
boolean playlist;
public MusicPlayerGui() {
super("Music Player");
setSize(400, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(false);
setLayout(null);
getContentPane().setBackground(BG_Color);
addUiComponents();
}
private void addUiComponents() {
addToolbar();
addPlaybackBtns();
songImage = new JLabel(loadImage("./res/record.png"));
songImage.setBounds(0, 50, getWidth() - 20, 225);
add(songImage);
songTitle = new JLabel("Song title");
songTitle.setBounds(0, 285, getWidth() - 10, 30);
songTitle.setFont(new Font("Dialog", Font.BOLD, 24));
songTitle.setForeground(FG_Color);
songTitle.setHorizontalAlignment(SwingConstants.CENTER);
add(songTitle);
playbackSlider = new JSlider();
playbackSlider.setBounds(getWidth() / 2 - 300 / 2, 365, 300, 40);
playbackSlider.setBackground(null);
add(playbackSlider);
}
private void addToolbar() {
toolbar = new JToolBar();
toolbar.setBounds(0, 0, getWidth(), 30);
toolbar.setFloatable(false);
add(toolbar);
menuBar = new JMenuBar();
toolbar.add(menuBar);
songMenu = new JMenu("Song");
menuBar.add(songMenu);
loadMusic = new JMenuItem("Load music from directory");
loadMusic.addActionListener(this);
songMenu.add(loadMusic);
loadPlaylist = new JMenuItem("Load playlist from directory");
loadPlaylist.addActionListener(this);
songMenu.add(loadPlaylist);
}
private void addPlaybackBtns() {
playbackBtns = new JPanel();
playbackBtns.setBounds(0, 435, getWidth() - 10, 80);
playbackBtns.setBackground(null);
prevButton = new JButton(loadImage("./res/previous.png"));
prevButton.setBorderPainted(false);
prevButton.setBackground(null);
prevButton.addActionListener(this);
playbackBtns.add(prevButton);
playButton = new JButton(loadImage("./res/play.png"));
playButton.setBorderPainted(false);
playButton.setBackground(null);
playButton.addActionListener(this);
playbackBtns.add(playButton);
pauseButton = new JButton(loadImage("./res/pause.png"));
pauseButton.setBorderPainted(false);
pauseButton.setBackground(null);
pauseButton.setVisible(false);
pauseButton.addActionListener(this);
playbackBtns.add(pauseButton);
nextButton = new JButton(loadImage("./res/next.png"));
nextButton.setBorderPainted(false);
nextButton.setBackground(null);
playbackBtns.add(nextButton);
add(playbackBtns);
}
private ImageIcon loadImage(String imagePath) {
try {
BufferedImage image = ImageIO.read(new File(imagePath));
return new ImageIcon(image);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == loadMusic) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Music Files", "wav"));
int response = fileChooser.showOpenDialog(null);
if (response == JFileChooser.APPROVE_OPTION) {
File file = new File(fileChooser.getSelectedFile().getAbsolutePath());
try (AudioInputStream aS = AudioSystem.getAudioInputStream(file)) {
if (play == true) {
enablePlayButton();
clips.get(current).stop();
}
numberofClips++;
Clip clip = AudioSystem.getClip();
current = numberofClips;
format = aS.getFormat();
frames = aS.getFrameLength();
durationInSeconds = frames / format.getFrameRate();
seconds = (long) (durationInSeconds % 60);
clip.open(aS);
clips.push(clip);
} catch (UnsupportedAudioFileException | IOException | LineUnavailableException ex) {
System.out.println(ex);
}
}
}
if (e.getSource() == loadPlaylist) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int response = fileChooser.showOpenDialog(null);
if (response == JFileChooser.APPROVE_OPTION) {
File files = new File(fileChooser.getSelectedFile().getAbsolutePath());
for (File file : files.listFiles()) {
try (AudioInputStream aS = AudioSystem.getAudioInputStream(file)) {
if (play == true) {
enablePlayButton();
clips.get(current).stop();
}
numberofClips++;
Clip clip = AudioSystem.getClip();
format = aS.getFormat();
frames = aS.getFrameLength();
durationInSeconds = frames / format.getFrameRate();
seconds = (long) (durationInSeconds % 60);
playlist = true;
clip.open(aS);
clips.push(clip);
} catch (UnsupportedAudioFileException | IOException | LineUnavailableException ex) {
System.out.println(ex);
}
}
}
}
if (e.getSource() == playButton) {
enablePauseButton();
clips.get(current).start();
next = current + 1;
prev = current - 1;
if (playlist) {
if ((clips.empty() && clips.get(current).isRunning() != false) && next > numberofClips) {
enablePauseButton();
clips.get(next).start();
current = next;
}
}
}
if (e.getSource() == pauseButton) {
enablePlayButton();
clips.get(current).stop();
}
if (e.getSource() == prevButton) {
if (first != true && prev < 0) {
enablePlayButton();
clips.get(current).stop();
clips.get(prev).start();
current = prev;
next = current + 1;
prev = current - 1;
}
}
}
void enablePauseButton() {
JButton playBtn = (JButton) playbackBtns.getComponent(1);
JButton pauseBtn = (JButton) playbackBtns.getComponent(2);
playBtn.setVisible(false);
playBtn.setEnabled(false);
pauseBtn.setVisible(true);
pauseBtn.setEnabled(true);
play = true;
}
void enablePlayButton() {
JButton playBtn = (JButton) playbackBtns.getComponent(1);
JButton pauseBtn = (JButton) playbackBtns.getComponent(2);
playBtn.setVisible(true);
playBtn.setEnabled(true);
pauseBtn.setVisible(false);
pauseBtn.setEnabled(false);
play = false;
}
}
Также вот основной файл, который можно запустить:
import javax.swing.SwingUtilities;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MusicPlayerGui().setVisible(true);;
}
});
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... em-working
Почему перемещение вперед и назад по аудиоклипам просто мешает им работать? ⇐ JAVA
Программисты JAVA общаются здесь
1772471384
Anonymous
Поэтому я пытаюсь создать аудиоплеер только потому, что хочу лучше понять стеки и графические интерфейсы Java. Я ожидал, что при выборе аудиофайла он должен был воспроизводиться, что он и делал раньше, но сейчас этого не происходит. Я вернулся к предыдущему коду, чтобы увидеть разницу, но я не увидел ничего такого, что могло бы помешать его работе, у меня также не было никаких ошибок в терминале.
Я пробовал просмотреть документацию Java se 8 и несколько видеороликов на YouTube об аудиоклипах в Java, и все казалось правильным, и я уже не знал, в чем проблема, также я удалил current = NumberofClips; из кода в качестве теста, и по какой-то причине действительно воспроизводился только один из двух аудиофайлов.
вот код:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.io.File;
import java.util.Stack;
import javax.imageio.ImageIO;
import javax.sound.sampled.*;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
public class MusicPlayerGui extends JFrame implements ActionListener {
// Image centered
BufferedImage image = null;
// Colors
public static final Color BG_Color = Color.BLACK;
public static final Color FG_Color = Color.WHITE;
// Song
JLabel songImage;
JLabel songTitle;
JSlider playbackSlider;
// Toolbar
JToolBar toolbar;
JMenuBar menuBar;
JMenu songMenu;
JMenuItem loadMusic;
JMenuItem loadPlaylist;
// Button
JPanel playbackBtns;
JButton prevButton;
JButton playButton;
JButton pauseButton;
JButton nextButton;
// Music stuff
Stack clips = new Stack();
int next;
int prev;
long frames;
int current = 0;
float frameRate;
int numberofClips;
AudioFormat format;
boolean play = true;
boolean first = true;
double durationInSeconds;
long seconds;
boolean playlist;
public MusicPlayerGui() {
super("Music Player");
setSize(400, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(false);
setLayout(null);
getContentPane().setBackground(BG_Color);
addUiComponents();
}
private void addUiComponents() {
addToolbar();
addPlaybackBtns();
songImage = new JLabel(loadImage("./res/record.png"));
songImage.setBounds(0, 50, getWidth() - 20, 225);
add(songImage);
songTitle = new JLabel("Song title");
songTitle.setBounds(0, 285, getWidth() - 10, 30);
songTitle.setFont(new Font("Dialog", Font.BOLD, 24));
songTitle.setForeground(FG_Color);
songTitle.setHorizontalAlignment(SwingConstants.CENTER);
add(songTitle);
playbackSlider = new JSlider();
playbackSlider.setBounds(getWidth() / 2 - 300 / 2, 365, 300, 40);
playbackSlider.setBackground(null);
add(playbackSlider);
}
private void addToolbar() {
toolbar = new JToolBar();
toolbar.setBounds(0, 0, getWidth(), 30);
toolbar.setFloatable(false);
add(toolbar);
menuBar = new JMenuBar();
toolbar.add(menuBar);
songMenu = new JMenu("Song");
menuBar.add(songMenu);
loadMusic = new JMenuItem("Load music from directory");
loadMusic.addActionListener(this);
songMenu.add(loadMusic);
loadPlaylist = new JMenuItem("Load playlist from directory");
loadPlaylist.addActionListener(this);
songMenu.add(loadPlaylist);
}
private void addPlaybackBtns() {
playbackBtns = new JPanel();
playbackBtns.setBounds(0, 435, getWidth() - 10, 80);
playbackBtns.setBackground(null);
prevButton = new JButton(loadImage("./res/previous.png"));
prevButton.setBorderPainted(false);
prevButton.setBackground(null);
prevButton.addActionListener(this);
playbackBtns.add(prevButton);
playButton = new JButton(loadImage("./res/play.png"));
playButton.setBorderPainted(false);
playButton.setBackground(null);
playButton.addActionListener(this);
playbackBtns.add(playButton);
pauseButton = new JButton(loadImage("./res/pause.png"));
pauseButton.setBorderPainted(false);
pauseButton.setBackground(null);
pauseButton.setVisible(false);
pauseButton.addActionListener(this);
playbackBtns.add(pauseButton);
nextButton = new JButton(loadImage("./res/next.png"));
nextButton.setBorderPainted(false);
nextButton.setBackground(null);
playbackBtns.add(nextButton);
add(playbackBtns);
}
private ImageIcon loadImage(String imagePath) {
try {
BufferedImage image = ImageIO.read(new File(imagePath));
return new ImageIcon(image);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == loadMusic) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Music Files", "wav"));
int response = fileChooser.showOpenDialog(null);
if (response == JFileChooser.APPROVE_OPTION) {
File file = new File(fileChooser.getSelectedFile().getAbsolutePath());
try (AudioInputStream aS = AudioSystem.getAudioInputStream(file)) {
if (play == true) {
enablePlayButton();
clips.get(current).stop();
}
numberofClips++;
Clip clip = AudioSystem.getClip();
current = numberofClips;
format = aS.getFormat();
frames = aS.getFrameLength();
durationInSeconds = frames / format.getFrameRate();
seconds = (long) (durationInSeconds % 60);
clip.open(aS);
clips.push(clip);
} catch (UnsupportedAudioFileException | IOException | LineUnavailableException ex) {
System.out.println(ex);
}
}
}
if (e.getSource() == loadPlaylist) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int response = fileChooser.showOpenDialog(null);
if (response == JFileChooser.APPROVE_OPTION) {
File files = new File(fileChooser.getSelectedFile().getAbsolutePath());
for (File file : files.listFiles()) {
try (AudioInputStream aS = AudioSystem.getAudioInputStream(file)) {
if (play == true) {
enablePlayButton();
clips.get(current).stop();
}
numberofClips++;
Clip clip = AudioSystem.getClip();
format = aS.getFormat();
frames = aS.getFrameLength();
durationInSeconds = frames / format.getFrameRate();
seconds = (long) (durationInSeconds % 60);
playlist = true;
clip.open(aS);
clips.push(clip);
} catch (UnsupportedAudioFileException | IOException | LineUnavailableException ex) {
System.out.println(ex);
}
}
}
}
if (e.getSource() == playButton) {
enablePauseButton();
clips.get(current).start();
next = current + 1;
prev = current - 1;
if (playlist) {
if ((clips.empty() && clips.get(current).isRunning() != false) && next > numberofClips) {
enablePauseButton();
clips.get(next).start();
current = next;
}
}
}
if (e.getSource() == pauseButton) {
enablePlayButton();
clips.get(current).stop();
}
if (e.getSource() == prevButton) {
if (first != true && prev < 0) {
enablePlayButton();
clips.get(current).stop();
clips.get(prev).start();
current = prev;
next = current + 1;
prev = current - 1;
}
}
}
void enablePauseButton() {
JButton playBtn = (JButton) playbackBtns.getComponent(1);
JButton pauseBtn = (JButton) playbackBtns.getComponent(2);
playBtn.setVisible(false);
playBtn.setEnabled(false);
pauseBtn.setVisible(true);
pauseBtn.setEnabled(true);
play = true;
}
void enablePlayButton() {
JButton playBtn = (JButton) playbackBtns.getComponent(1);
JButton pauseBtn = (JButton) playbackBtns.getComponent(2);
playBtn.setVisible(true);
playBtn.setEnabled(true);
pauseBtn.setVisible(false);
pauseBtn.setEnabled(false);
play = false;
}
}
Также вот основной файл, который можно запустить:
import javax.swing.SwingUtilities;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MusicPlayerGui().setVisible(true);;
}
});
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79898516/why-does-going-back-and-foward-with-audio-clips-just-stop-them-working[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия