現在Javaでモグラたたきのゲームを制作している初心者です。モグラをたたいた瞬間にハンマーの「ピコ」というSEが欲しいのでネットのコピペで以下のようクラスを作ってみました。
Test.java
Java
1import java.io.File; 2import java.io.IOException; 3import java.net.MalformedURLException; 4 5import javax.sound.sampled.AudioFormat; 6import javax.sound.sampled.AudioInputStream; 7import javax.sound.sampled.AudioSystem; 8import javax.sound.sampled.DataLine; 9import javax.sound.sampled.LineUnavailableException; 10import javax.sound.sampled.SourceDataLine; 11import javax.sound.sampled.UnsupportedAudioFileException; 12 13public class Test { 14 //public static void main(String[] args) throws InterruptedException { 15 File path = new File("SE.wav");{ 16 17 //指定されたURLのオーディオ入力ストリームを取得 18 try (AudioInputStream ais = AudioSystem.getAudioInputStream(path)) { 19 20 //ファイルの形式取得 21 AudioFormat af = ais.getFormat(); 22 23 //単一のオーディオ形式を含む指定した情報からデータラインの情報オブジェクトを構築 24 DataLine.Info dataLine = new DataLine.Info(SourceDataLine.class,af); 25 26 //指定された Line.Info オブジェクトの記述に一致するラインを取得 27 SourceDataLine s = (SourceDataLine)AudioSystem.getLine(dataLine); 28 29 //再生準備完了 30 s.open(); 31 32 //ラインの処理を開始 33 s.start(); 34 35 //読み込みサイズ 36 byte[] data = new byte[s.getBufferSize()]; 37 38 //読み込んだサイズ 39 int size = -1; 40 41 //再生処理のループ 42 while(true) { 43 //オーディオデータの読み込み 44 size = ais.read(data); 45 if ( size == -1 ) { 46 //すべて読み込んだら終了 47 break; 48 } 49 //ラインにオーディオデータの書き込み 50 s.write(data, 0, size); 51 } 52 53 //残ったバッファをすべて再生するまで待つ 54 s.drain(); 55 56 //ライン停止 57 // s.stop(); 58 59 //リソース解放 60 // s.close(); 61 62 } catch (MalformedURLException e) { 63 e.printStackTrace(); 64 } catch (UnsupportedAudioFileException e) { 65 e.printStackTrace(); 66 } catch (IOException e) { 67 e.printStackTrace(); 68 } catch (LineUnavailableException e) { 69 e.printStackTrace(); 70 } 71 72} 73//}
これでモグラたたきのゲーム本体のソースコードに
Test SE =new Test();
を追加してSEを追加したいと考えたのですが、これだとSEの再生が終わるまで他の処理が実行されませんでした(モグラが消える、スコアが増えるなどの処理)。
挿入する位置を変えてみても同様にSEが鳴ってからモグラが消える、という処理順番でした。SEの再生とその他の処理を並行して行えるように実装したいです。
なにか解決策などはありましたらご教授お願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。