###はじめに
JavaFXを用いてアプリケーションを作っています.
その中で,クリック時などに効果音を付けたいと思っています.
再生することはできたのですが,そのラグが大きかったので質問します.
###実現したいこと
ラグを人間が気にならない程度に抑えて,実行できるようにすること.
下記のコードだとクリックしてから再生されるまでの時間が大きすぎます.
理想は,クリックと同時になっていると人間が思えることです.
###ソースコード
効果音を再生するクラス.
Java
1import java.nio.file.Path; 2 3import javafx.scene.media.AudioClip; 4 5public class MySoundPlayer implements Runnable{ 6 private AudioClip clip; 7 8 public MySoundPlayer(Path path){ 9 this.clip = new AudioClip(path.toUri().toString()); 10 } 11 12 @Override 13 public void run(){ 14 try{ 15 this.clip.play(); 16 while(clip.isPlaying()) ; 17 }catch(Exception e){ 18 e.printStackTrace(); 19 } 20 } 21} 22
上記のクラスのテスター.
Java
1import java.nio.file.Paths; 2import javafx.scene.media.AudioClip; 3 4public class SoundTester extends javafx.application.Application{ 5 public static void main(String[] args) throws Exception{ 6 launch(args); 7 } 8 9 @Override 10 public void start(javafx.stage.Stage stage){ 11 javafx.scene.control.Button btnPlay = new javafx.scene.control.Button("再生"); 12 btnPlay.setPrefSize(100,30); 13 btnPlay.setOnAction(event -> { 14 try{ 15 //カレントディレクトリに"click.mp3"が存在すると仮定します. 16 MySoundPlayer mp3player = new MySoundPlayer(Paths.get("click.mp3")); 17 Thread thread = new Thread(mp3player); 18 thread.start(); 19 }catch(Exception e){ 20 e.printStackTrace(); 21 } 22 }); 23 24 javafx.scene.layout.VBox vbox = new javafx.scene.layout.VBox(btnPlay); 25 vbox.setAlignment(javafx.geometry.Pos.CENTER); 26 27 stage.setHeight(100); 28 stage.setWidth(275); 29 stage.setTitle("クリック音テスト"); 30 stage.setScene(new javafx.scene.Scene(vbox)); 31 stage.show(); 32 } 33} 34 35
###質問
0. 現在のラグの原因はなんでしょうか?
0. ラグを人間が気にならないようなレベルにするにはどうすればいいでしょうか.
具体的なソースコードをつけて解答いただけると幸いです.
###補足など
2016/10/18 22:10 質問内容を追加しました.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/10/18 13:16
2016/10/18 15:26