前提・実現したいこと
<質問内容>
Javaでコード入力(String)を行い、決められたコードが入力されたらwavファイルで該当するギター音を鳴らすというシステムを作っています。(例:"F"を入力したらFコードの音を鳴らす)Mp3Playerというクラスを使ってますが実際鳴らしたいのはwavファイルです。紛らわしくてすいません。
if文を作っている最中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
//実行結果//
WAVE
AU
AIFF
コードを入力してください>
F
Fコードを鳴らします
//以下エラー//
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "javax.sound.sampled.AudioInputStream.close()" because "ais" is null
at application.Mp3Player.main(Mp3Player.java:53)
該当のソースコード
コード //Mp3Playerクラス// package application; import java.util.Scanner; import java.io.File; import java.io.IOException; import javax.sound.sampled.AudioFileFormat.Type; 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; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.UnsupportedAudioFileException; public class Mp3Player { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("===== サポートしている形式 ====="); Type[] typeArray = AudioSystem.getAudioFileTypes(); for(Type type : typeArray) { System.out.println(type.toString()); } AudioInputStream ais = null; try { System.out.println("コードを入力してください> "); String code = scanner.next(); System.out.println(code+"コードを鳴らします"); if(code=="F") { ais = AudioSystem.getAudioInputStream(new File("C:\Users\dolva\Desktop\卒研フォルダ\音素材\F.wav")); AudioFormat af = ais.getFormat(); DataLine.Info info = new DataLine.Info(Clip.class, af); Clip clip = (Clip)AudioSystem.getLine(info); clip.open(ais); clip.start(); clip.loop(0); clip.flush(); while(clip.isActive()) { Thread.sleep(100); } } } catch (UnsupportedAudioFileException | IOException | LineUnavailableException | InterruptedException e) { e.printStackTrace(); }finally { try { ais.close(); } catch (IOException e) { e.printStackTrace(); System.exit(0); } } } } //main// package application; import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.layout.AnchorPane; import javafx.fxml.FXMLLoader; public class Main extends Application { @Override public void start(Stage primaryStage) { try { AnchorPane root = (AnchorPane)FXMLLoader.load(getClass().getResource("Sample.fxml")); Scene scene = new Scene(root,400,400); scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); primaryStage.setScene(scene); primaryStage.show(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { launch(args); } }
言語名: java
試したこと
・ifの作業範囲に問題があるのでは?、と考え、}の位置を色々と変えてみたが直らず。
・以下のサイトを参照して、VM引数を追加しましたが直らず。
https://qiita.com/sya-ri/items/83295cc3fd5530dd822c
・
補足情報(FW/ツールのバージョンなど)
javafx導入済み。
windows10 バージョン:20H2
eclipse
if文を外して普通に実行するとF.wavの音声がちゃんと流れます。
Fしか用意していませんが、if(switchでも良い)で分岐して、多くのコードを鳴らすシステムにしたいです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー