実現したいこと
eclipseでwavファイルを再生したいのですが、実行するとcacthの処理になってしまいます。
music.javaというファイルにソースコードを書いており、同一階層に音声ファイルを置いています。
ファイルの置き場所の問題かと思い、
C:\Users\●●●\Downloads\0323.wavのような場所にファイルを置くと
java.io.FileNotFoundException: C:\Users\●●●\Downloads\0323.wav (アクセスが拒否されました。) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java:213) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:152) at java.desktop/com.sun.media.sound.SunFileReader.getAudioInputStream(SunFileReader.java:117) at java.desktop/javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1060) at music.main(music.java:30)
と、権限の問題でエラーになってしまい、ファイルの置き場所に困っています。
よろしくお願いします。
該当のソースコード
import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; 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.LineListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JProgressBar; class music { static Clip clip; static JFrame frame; static JButton playButton, stopButton; static JLabel counterLabel; static JProgressBar pBar; static int playCount, maxLength; public static void main(String[] args) { File file = new File("0323.wav"); if(file.exists()) { try { AudioInputStream stream = AudioSystem.getAudioInputStream(file); AudioFormat format = stream.getFormat(); DataLine.Info info = new DataLine.Info(Clip.class, format); clip = (Clip)AudioSystem.getLine(info); clip.open(stream); maxLength = clip.getFrameLength() - 1; clip.addLineListener(new LineListener() { public void update(LineEvent le) { if(le.getType() == LineEvent.Type.STOP) { if(maxLength * playCount == clip.getLongFramePosition()) { playButton.setEnabled(true); stopButton.setEnabled(false); } } } }); stream.close(); music cp2 = new music(); frame.setVisible(true); while(true) { counterLabel.setText(clip.getLongFramePosition() + "/" + maxLength); pBar.setValue((int)clip.getLongFramePosition() % (maxLength + 1)); try { Thread.sleep(500); } catch(Exception e) { e.printStackTrace(); } } } catch(Exception e) { e.printStackTrace(); } } else { System.out.println("ファイルが見つかりませんでした。"); System.exit(1); } } music() { frame = new JFrame("ClipPlayer2"); playCount = 1; playButton = new JButton("再生"); stopButton = new JButton("停止"); stopButton.setEnabled(false); ActionListener al = new ActionListener() { public void actionPerformed(ActionEvent ae) { if(ae.getSource() == playButton) { playButton.setEnabled(false); stopButton.setEnabled(true); if((long)(clip.getFrameLength() - 1) * playCount == clip.getLongFramePosition()) { clip.stop(); clip.setFramePosition(0); playCount++; } play(); } else { playButton.setEnabled(true); stopButton.setEnabled(false); clip.stop(); } } }; playButton.addActionListener(al); stopButton.addActionListener(al); counterLabel = new JLabel("0", JLabel.RIGHT); pBar = new JProgressBar(0, maxLength); frame.getContentPane().setLayout(new FlowLayout()); frame.add(playButton); frame.add(stopButton); frame.add(counterLabel); frame.add(pBar); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(350,100); frame.setLocationRelativeTo(null); } public void play() { new Thread() { public void run() { clip.start(); } }.start(); } }
回答1件
あなたの回答
tips
プレビュー