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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

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

Q&A

解決済

1回答

1287閲覧

javaで入力したコード(wav音声)の分岐に関して

dolva

総合スコア1

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

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

0グッド

0クリップ

投稿2021/09/02 01:21

編集2021/09/03 00:16

前提・実現したいこと

<質問内容>
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でも良い)で分岐して、多くのコードを鳴らすシステムにしたいです。
よろしくお願いいたします。

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

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

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

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

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

y_waiwai

2021/09/02 01:31

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
dolva

2021/09/03 00:17

編集しました。ご指摘ありがとうございます。
guest

回答1

0

ベストアンサー

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "javax.sound.sampled.AudioInputStream.close()" because "ais" is null

aisがnullなのでcloseできないようです。

aisは

AudioInputStream ais = null;

と宣言されており、以下のif文を通過するとインスタンスが生成されます。

if(code=="F") {
ais = AudioSystem.getAudioInputStream(new File("C:\Users\dolva\Desktop\卒研フォルダ\音素材\F.wav"));

実際には、

if(code=="F")

が、trueになることは、ありません。
Stringの比較は、==でなくequalsメソッドを使います。

if文を削除すれば無条件でインスタンスが生成されるのでエラーがでなくなります。

あとは、

try {

ais.close();
}

の部分に

if(ais != null)

を追加しても回避できそうです。

投稿2021/09/02 03:34

momon-ga

総合スコア4826

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

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

dolva

2021/09/04 02:08

equalsは知らなかったです!指定通り、if(ais != null)を追加したらエラー直って動きました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問