GWも終わってしまいましたね。皆さんはいかがお過ごしでしたでしょうか。
私は久しぶりに学生時代の友人と会ったり、格ゲーのイベントに行ったりとそれなりに充実したGWを送れました。
そんなGWでしたが、暇な日にふと思いついたので一つアプレットを作ってみました。
概要としては、キーボードでドラムを鳴らすお遊びアプレットです。(命名:KeyboarDrum)
また、このブログは初心者の方や、未経験の方もよく見ていただいているとのことなので、なるべくわかりやすいシンプルな内容にするというコンセプトで作ってみました。
といっても私もまだ初心者なんですけどね。
開発環境はEclipse 4.7 OxygenでJavaSE-1.8を使用しています。
import java.applet.Applet;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
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;
public class KeyboarDrum extends Applet implements KeyListener{
public enum Drum{
BassDrum("C:\\BD.wav",'f'),
SnareDrum("C:\\SD.wav",'d'),
HiHat("C:\\HH.wav",'j'),
;
private String path;
private char triggerKey;
private Drum(String path, char triggerKey) {
this.path = path;
this.triggerKey = triggerKey;
}
public String getPath(){
return path;
}
public char getTriggerKey(){
return triggerKey;
}
}
@Override
public void init(){
addKeyListener(this);
}
@Override
public void keyTyped(KeyEvent e) {
TODO
char key = e.getKeyChar();
if (key == Drum.BassDrum.triggerKey){
playSound(Drum.BassDrum.path);
System.out.print("ドン");
}else if(key == Drum.SnareDrum.triggerKey ){
playSound(Drum.SnareDrum.path);
System.out.print("タッ");
}else if(key == Drum.HiHat.triggerKey){
playSound(Drum.HiHat.path);
System.out.print("チャ");
}
}
@Override
public void keyPressed(KeyEvent e) {
TODO
}
@Override
public void keyReleased(KeyEvent e) {
TODO
}
public void playSound(String audioFilePath){
AudioInputStream stream;
try {
stream = AudioSystem.getAudioInputStream(new File((audioFilePath)));
AudioFormat format = stream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
Clip clip = (Clip) AudioSystem.getLine(info);
clip.open(stream);
clip.start();
stream.close();
} catch (Exception e) {
TODO
e.printStackTrace();
}
}
}
やっている内容は単純で、列挙型(enum)でドラムを鳴らすにあたっての情報を格納しておき、キーが押されたとき(keyTyped())どのキーを押したかによって再生処理(playSound())に渡す引数を決定し、対応している音を鳴らすという内容です。
それで、作ったのはいいんですが、はてなブログに直接動画を貼り付ける機能がいつの間にか廃止になってたみたいなので、GIFで動作を張っておきます(肝心の音が……)
初心者の方やこれから勉強しようと思っている未経験の方は、小難しいことは一旦置いておいて、まずはこういった楽しめるプログラムを作ってプログラミングの楽しさを知るのがいいんじゃないかなと思います。
以上、こういった遊びプログラムでモチベを上げつつ、逐次勉強をしていこうと思っています。