質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

9613閲覧

JavaのゲームにBGMを実装したい

kei0005

総合スコア19

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/02/01 23:38

現在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の再生とその他の処理を並行して行えるように実装したいです。
なにか解決策などはありましたらご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

AudioClipを使ったほうが楽です。
https://nompor.com/2017/12/13/post-1940/
このページにも書いてありますが、Java9からは動かないのでページ内のJava9用のほうを見てください。

投稿2018/02/02 00:29

masaya_ohashi

総合スコア9206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

別スレッドを起動してはいかが?

大体が
ゲーム用のスレッド
BGM用のスレッド
SE用のスレッド
(CV用のスレッド)

を別々にする作りですよ

ならしてからイベントを進めるなら混ぜますが

投稿2018/02/01 23:44

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問