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

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

ただいまの
回答率

88.78%

processingにおけるNullpointerExceptionの改善方法(波形の3D表示および音楽との連動)

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 555

waxogawa

score 12

null pointer exception の改善方法がわかりません。

音を3Dで表示するようなものを構築しようと思い、ネット情報などを頼りに描いてみたのですがどうにも動作しません。

import ddf.minim.analysis.*;
import ddf.minim.*;
import ddf.minim.effects.*;
import ddf.minim.signals.*;
import ddf.minim.spi.*;
import ddf.minim.ugens.*;

final int BUFSIZE = 512;

Minim minim;
AudioPlayer player;

AudioInput in;
FFT fft;

int grid = 50;
float gridWidth;
float [][] zs;

public void settings(){
size(800, 800, P3D);
smooth();

}

void setup() {
minim = new Minim(this);
in = minim.getLineIn(Minim.STEREO, 1024);
fft = new FFT(in.bufferSize(), in.sampleRate());

zs = new float[grid + 1][grid + 1];
for(int w = 0; w< grid; w++){
for(int h = 0; h<grid; h++){
zs[w][h] = 0.0;
}
}
gridWidth = width/float(grid);

player = minim.loadFile("SHINICHI OSAWA  LOVE WILL GUIDE YOU feat. TOMMIE SUNSHINE.mp3");
player.play();
}

void draw(){
lights();

fft.forward(in.mix);

for(int w=grid-1; w>=0; w--){
for(int h = grid - 1; h >= 0; h--){
if(h == 0){
zs[w][h] = fft.getBand(w) * 3;
} else {
zs[w][h] = zs[w][h - 1];
}
}
}  

background(0);
translate(0,0,-300);
rotateX(PI/4.0);
for (int w = 0; w < grid; w++){
for(int h = 0; h < grid; h++){
beginShape();

vertex(w * gridWidth, h * gridWidth, zs[w][h]);
vertex((w + 1) * gridWidth, h * gridWidth, zs[w + 1][h]);
vertex((w + 1) * gridWidth, (h + 1) * gridWidth, zs[w + 1][h + 1]);      
vertex(w * gridWidth, (h + 1) * gridWidth, zs[w][h + 1]);      
endShape(CLOSE);
}
}
}

どうすればよいでしょうか。どうかご教示のほどよろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • thkana

    2019/05/30 21:33

    どこがぬるぽになってるとか、回答者がブログラムを走らせて確かめないといけないのですか?
    あなたはそれを知ってるんじゃないかと思うのですけれど、なぜ質問に書かないのですか?

    キャンセル

  • swordone

    2019/05/30 21:58

    そもそもコードブロックの書き方間違えてる。
    行頭の>をすべて消して、コード部分を選択して<code>を押してください。

    キャンセル

回答 1

0

今頃回答するのもなんですが、誰か検索で来たりするかもしれませんので書いておきます。
ヌルポが出るのは、
AudioInputがない=マイクが刺さっていないから
だと思います。
waxogawaさんがやりたかったのは、mp3の波形だと思われるのでinをplayerに置き換えます。
コメントのところが変更した部分。

import ddf.minim.analysis.*;
import ddf.minim.*;
import ddf.minim.effects.*;
import ddf.minim.signals.*;
import ddf.minim.spi.*;
import ddf.minim.ugens.*;

final int BUFSIZE = 512;

Minim minim;
AudioPlayer player;

//AudioInput in;
FFT fft;

int grid = 50;
float gridWidth;
float [][] zs;

public void settings() {
  size(800, 800, P3D);
  smooth();
}

void setup() {
  minim = new Minim(this);
//  in = minim.getLineIn(Minim.STEREO, 1024);
  player = minim.loadFile("SHINICHI OSAWA  LOVE WILL GUIDE YOU feat. TOMMIE SUNSHINE.mp3");
  player.play();
  fft = new FFT(player.bufferSize(), player.sampleRate());
//  fft = new FFT(in.bufferSize(), in.sampleRate());

  zs = new float[grid + 1][grid + 1];
  for (int w = 0; w< grid; w++) {
    for (int h = 0; h<grid; h++) {
      zs[w][h] = 0.0;
    }
  }
  gridWidth = width/float(grid);

  //player = minim.loadFile("SHINICHI OSAWA  LOVE WILL GUIDE YOU feat. TOMMIE SUNSHINE.mp3");
  //player.play();
}

void draw() {
  lights();

//  fft.forward(in.mix);
  fft.forward(player.mix);

  for (int w=grid-1; w>=0; w--) {
    for (int h = grid - 1; h >= 0; h--) {
      if (h == 0) {
        zs[w][h] = fft.getBand(w) * 3;
      } else {
        zs[w][h] = zs[w][h - 1];
      }
    }
  }  

  background(0);
  translate(0, 0, -300);
  rotateX(PI/4.0);
  for (int w = 0; w < grid; w++) {
    for (int h = 0; h < grid; h++) {
      beginShape();

      vertex(w * gridWidth, h * gridWidth, zs[w][h]);
      vertex((w + 1) * gridWidth, h * gridWidth, zs[w + 1][h]);
      vertex((w + 1) * gridWidth, (h + 1) * gridWidth, zs[w + 1][h + 1]);      
      vertex(w * gridWidth, (h + 1) * gridWidth, zs[w][h + 1]);      
      endShape(CLOSE);
    }
  }
}


実行結果

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る