import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.FlowLayout;
import java.awt.event.*;
import java.io.File;
import java.net.MalformedURLException;
import javax.swing.*;
class SoundDemo
{
public static void main(String args[])
{
new MainWindow();
}
}
class MainWindow extends JFrame
{
AudioClip audio;
// 再生中を示すフラグ
boolean is_playing = false;
// ロードされたことを示すフラグ
boolean is_loaded = false;
// 許容される拡張子
final String[] ext_list = {"au", "mid", "wav", "aiff", "rmi"};
public MainWindow()
{
super("Sound Test");
// ルックアンドフィールの変更(Motif)
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
}
catch(Exception e)
{
System.err.println(e);
}
// ウインドウリスナの追加
WindowListener listener = new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
};
addWindowListener(listener);
// ファイルを開くボタンの定義
JButton open_file = new JButton("Open...");
ActionListener listener_open_file = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
// 再生中にオープンが出来ないようにする
if(is_playing)
{
ShowErrorMessage("Please stop music.", "Playing!");
return;
}
try
{
// ファイルを開くダイアログの表示
JFileChooser chooser = new JFileChooser();
if(chooser.showOpenDialog(MainWindow.this) == JFileChooser.APPROVE_OPTION)
{
// サウンドファイルの取得
File file = chooser.getSelectedFile();
if(!CheckFileExt(file.getName()))
{
ShowErrorMessage("This file is invalid type", "Invalid File!");
}
audio = Applet.newAudioClip(file.toURL());
is_loaded = true;
}
}
catch(MalformedURLException me)
{
System.err.println(me);
}
}
};
open_file.addActionListener(listener_open_file);
// プレイボタンの定義
JButton play = new JButton("Play");
ActionListener listener_play = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(!is_loaded)
{
ShowErrorMessage("Please open media file.", "Not Loaded.");
return;
}
is_playing = true;
audio.play();
}
};
play.addActionListener(listener_play);
// ストップボタンの定義
JButton stop = new JButton("Stop");
ActionListener listener_stop = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
is_playing = false;
audio.stop();
}
};
stop.addActionListener(listener_stop);
// ボタンの追加
getContentPane().setLayout(new FlowLayout());
getContentPane().add(open_file);
getContentPane().add(play);
getContentPane().add(stop);
// フレームの表示
pack();
setVisible(true);
}
// 拡張子のチェック
public boolean CheckFileExt(String file_name)
{
int index = file_name.lastIndexOf('.');
String ext = file_name.substring(index + 1, file_name.length());
for(int i=0;i<ext_list.length;i++)
{
if(ext.toLowerCase().compareTo(ext_list[i]) == 0)
{
return(true);
}
}
return(false);
}
// エラーダイアログ
public void ShowErrorMessage(String message, String title)
{
JOptionPane.showMessageDialog(this, message, title, JOptionPane.INFORMATION_MESSAGE);
}
}
Source is here. (ZIP Format,1560Byte,Shift-JIS)