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

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

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

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

1回答

6558閲覧

Processing 実行エラー java.lang.reflect.invocationtargetexception

nstsn

総合スコア11

Java

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2019/07/24 06:47

前提・実現したいこと

プログラミング初心者です。
http://94.hatenadiary.jp/entry/2019/02/26/143408
こちらのサイトを参考に、Processingを使ったオーディオビジュアライザアプリケーションを作成しています。
いつからか実行をするとエラーが出るようになったのですが、Processingに初めて触れることもあってどこで間違ったか正直思い浮かばなくて手詰まりしています。

発生している問題・エラーメッセージ

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException RuntimeException: java.lang.reflect.InvocationTargetException at processing.core.PApplet.runSketch(PApplet.java:10845) at processing.core.PApplet.main(PApplet.java:10613) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at processing.core.PApplet.runSketch(PApplet.java:10839) ... 1 more Caused by: java.lang.NullPointerException at tempo.<init>(tempo.java:33) ... 6 more

該当のソースコード

Processing

1import ddf.minim.*; 2import ddf.minim.analysis.*; 3import ddf.minim.effects.*; 4import ddf.minim.signals.*; 5import ddf.minim.spi.*; 6import ddf.minim.ugens.*; 7 8Minim minim; 9AudioPlayer groove; 10boolean ret = groove.isPlaying(); 11PImage img; 12 13 14void setup() 15{ 16 size(1600, 900); 17 minim = new Minim(this); 18 groove = minim.loadFile("sample.wav", 2046); 19 groove.loop(); 20 } 21 22 23void draw() 24{ 25 background(0); 26 int max = groove.bufferSize(); 27 float a = 5; 28 for (int i = 0; i < 360*a; i+=1) 29 { 30 stroke(255); 31 noFill(); 32 ellipse(width/2 + 200*cos(radians(i/(a-1))), 33 height/2 + 100*sin(radians(i/(a-1)))+ groove.mix.get(i)*200, 34 50*groove.mix.get(i), 3); 35 ellipse(width/2 + 400*cos(radians(i/(a-2))), 36 height/2 + 200*sin(radians(i/(a-2)))+ groove.mix.get(i)*200, 37 50*groove.mix.get(i), 3); 38 ellipse(width/2 + 600*cos(radians(i/(a-3))), 39 height/2 + 300*sin(radians(i/(a-3)))+ groove.mix.get(i)*200, 40 50*groove.mix.get(i), 3); 41 } 42 43 String message = "sample.wav is playing."; 44 if (ret == true) { 45 text(message, LEFT, TOP); 46 img = loadImage("pauseBtn.jpeg"); 47 image(img, 20, 100); 48 } else { 49 message = "sample.wav is stopping"; 50 text(message, LEFT, TOP); 51 img = loadImage("playBtn.jpeg"); 52 image(img, 20,100); 53 } 54} 55 56 57void mousePressed() 58{ 59 groove.pause(); 60}

試したこと

エラーメッセージを見ると33行目がnullになっているようなので確認してみた(mix→max?)のですが、情けないながら核心が掴めない状況です。
26行目のmaxの値が使われていないと注意されているのが引っかかるのですが、書き換えても、宣言する場所をグローバルにしても解決することができませんでした。

補足情報(FW/ツールのバージョンなど)

macOS mojave 10.14
Processing 3.5.3

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

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

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

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

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

guest

回答1

0

ベストアンサー

ret = groove.isPlaying();setup()内でやったら、エラーが消えました。
私はこのライブラリは知らないですが、そもそも音楽ファイルを読み込んでいなければ、再生されているか否かなんて判定できない、ということかなぁ、と推測しました。

Processing

1Minim minim; 2AudioPlayer groove; 3boolean ret; 4PImage img; 5 6 7void setup() 8{ 9 size(1600, 900); 10 minim = new Minim(this); 11 groove = minim.loadFile("sample.wav", 2046); 12 ret = groove.isPlaying(); 13 groove.loop(); 14}

投稿2019/07/24 07:09

programming

総合スコア476

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

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

nstsn

2019/07/24 10:08

programmingさんの推測通りだったようです。 理屈も理解することができました。 ご回答ありがとうございました。
thkana

2019/07/24 12:13

MinimはProcessingがVer 2のころは音声を扱うライブラリのスタンダードでした。Ver3では自前のライブラリもあるのでそちらを使うことも多くなっていますが。 ファイルを読み込んでいない、というとまぁそうなんですが、オブジェクトの実体がないとフィールドやメソッドは使えない、というのが基本です。 で、setup()の中でretを設定しても、その後更新されないので期待の動作をしないんじゃないかとも思ったりしますが、それでいいのですか?
programming

2019/07/24 13:16

あ、そういうことだったんですね。 minim = new Minim(this); groove = minim.loadFile("sample.wav", 2046); この箇所でインスタンス化しているので、インスタンス化した後でないと、フィールドやメソッドは使えないということですね。 すると、ret = groove.isPlaying(); は draw() の中に入れないと、retが更新されずにfalseのままな気がします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問