2016-04-01 9 views
0

現在、私はSparkfun Guide to Processingを使用して処理を学習しています。これまでの素晴らしい本!しかし今、私は第11章:Minimライブラリを使ってオーディオを録音するチュートリアルに悩まされています。Minimでget.LineInを使用してサンプルを録音するときのヌルポインタ例外

このマニュアルで説明しているように、左または右を押してサンプルを記録しようとすると、Null Pointer Exceptionが発生します。私はここで何が間違っているのか知りたいです。私はそれを解決することに問題があります。私はそれが完全にシンプルなものだと確信していますが、私はそれを見ることができません。この章でダウンロードするサンプルコードがいくつかありますが、この特定のスケッチは含まれていません。

ありがとうございました!

は、ここでNULLポインタ(彼らがクラッシュするスケッチを引き起こしているとは思えなかったとして、私は前に含まれていなかったいくつかの行を含めるように編集)コードです:

==== JavaSound Minim Error ==== 
==== Error obtaining new output stream:/Users/*edited full path*/soundboard/data/right.wav (No such file or directory) 

==== JavaSound Minim Error ==== 
==== Error obtaining new output stream: /Users/*edited full path*/soundboard/data/left.wav (No such file or directory) 

java.lang.NullPointerException 

at ddf.minim.javasound.JSStreamingSampleRecorder.samples(JSStreamingSampleRecorder.java:177) 
at ddf.minim.SignalSplitter.samples(SignalSplitter.java:112) 
at ddf.minim.javasound.JSAudioOutput.run(JSAudioOutput.java:84) 

そして、ここで私はコードですスケッチのために使用:

import ddf.minim.*; 

Minim minim; 
AudioInput mic; 
AudioRecorder left; 
AudioRecorder right; 
AudioSample Pright; 
AudioSample Pleft; 

void setup(){ 
    size(800,900); 
    minim = new Minim(this); 
    mic = minim.getLineIn(); 
    right = minim.createRecorder(mic,"data/right.wav"); 
    left = minim.createRecorder(mic, "data/left.wav"); 
}; 

void draw(){ 

}; 

void keyPressed(){ 

    //begin left record 
    if(keyCode == LEFT){ 
    if(left.isRecording()){ 
     left.endRecord(); 
     left.save(); 
    } 
    else{ 
     left.beginRecord(); 
    }; 
    }; 

    //begin right record 
    if(keyCode == RIGHT){ 
    if(right.isRecording()){ 
     right.endRecord(); 
     right.save(); 
    } 
    else{ 
     right.beginRecord(); 
    }; 
    }; 

    //play the right sample 
    if(keyCode == UP){ 
    Pright = minim.loadSample("right.wav"); 
    Pright.trigger(); 
    }; 

    //play the left sample 
    if(keyCode == DOWN){ 
    Pleft = minim.loadSample("left.wav"); 
    Pleft.trigger(); 
    }; 

}; 
+0

完全なスタックトレースを投稿できますか?スケッチのどの線がNPEを投げるかを知る必要があります。スタックトレースをコピーしたときに、その部分をカットした可能性があります。 –

+0

私は野生の推測をしましょう。 Pright = minim.loadSample( "right.wav");あなたは完全なパスを与えていないので、この行はサウンドファイルを見つけることができません? – Max

+0

@Maxこれは処理です。それはスケッチディレクトリを持っていて、通常はフルパスを与えません。 –

答えて

0

[OK]だから私は少しの手抜きをした後、私はこの1つを取り除くことができました。私の質問に対するコメントのプロンプトをありがとう、彼らはさらに調査するために私に拍車をかけた。

この本では、これを新しいスケッチとして開始するように指示しています。ただし、新しいスケッチを開始すると、処理はに自動的には適用されません。 'data'フォルダを作成します。 Sketch> Add fileを使用してスケッチにファイルを追加する場合にのみ、データフォルダが作成されたように見えます。

void setup(){ 
    size(800,900); 
    minim = new Minim(this); 
    mic = minim.getLineIn(); 
    right = minim.createRecorder(mic,"data/right.wav"); 
    left = minim.createRecorder(mic, "data/left.wav"); 
}; 

上記のコードでは、「右」オブジェクトと「左」オブジェクトでは.wavファイルを保存できませんでした。私は手動でデータフォルダを追加して、ちょっとプレストになっています。私はその作業を持っていたら

別のエラーが思い付いた:

//play the right sample 
    if(keyCode == UP){ 
    Pright = minim.loadSample("right.wav"); 
    Pright.trigger(); 
    }; 

    //play the left sample 
    if(keyCode == DOWN){ 
    Pleft = minim.loadSample("left.wav"); 
    Pleft.trigger(); 
    }; 

あなたが前にUP押すかDOWN 場合は再生するファイルがないので、あなたがあなたのサンプル、プログラムがクラッシュを記録しています。ブール値を追加すると、より特定の 'if'文を書くことができ、プログラムが記録されている場合にのみファイルを再生しようとしました。

下記の完全なコードを参照してください。私はこの特定の本を通じた処理を学んでいる他の人が参考になることを願っています。あなたのすべてのおかげで多くのおかげです。

import ddf.minim.*; 

Minim minim; 
AudioInput mic; 
AudioRecorder left; 
AudioRecorder right; 
AudioSample Pright; 
AudioSample Pleft; 
boolean leftRecorded; 
boolean rightRecorded; 

void setup(){ 
    size(800,900); 
    minim = new Minim(this); 
    mic = minim.getLineIn(); 
    right = minim.createRecorder(mic,"data/right.wav"); 
    left = minim.createRecorder(mic, "data/left.wav"); 
}; 

void draw(){ 
; 
}; 

void keyPressed(){ 

    //begin left record 
    if(keyCode == LEFT){ 
    if(left.isRecording()){ 
     left.endRecord(); 
     left.save(); 
     leftRecorded = true; 
    } 
    else{ 
     left.beginRecord(); 
    }; 
    }; 

    //begin right record 
    if(keyCode == RIGHT){ 
    if(right.isRecording()){ 
     right.endRecord(); 
     right.save(); 
     rightRecorded = true; 
    } 
    else{ 
     right.beginRecord(); 
    }; 
    }; 

    //play the right sample 
    if(keyCode == UP && rightRecorded){ 
    Pright = minim.loadSample("right.wav"); 
    Pright.trigger(); 
    }; 

    //play the left sample 
    if(keyCode == DOWN && leftRecorded){ 
    Pleft = minim.loadSample("left.wav"); 
    Pleft.trigger(); 
    }; 

}; 
関連する問題