私のコードについていくつかの入力が必要です。 は基本的に、私はこの方法は、その方法では、クラスB私のコードをデバッグするのに助けが必要
public void init() throws Exception{
energy = 0;
variance = 0;
constant = 0;
isBeat = false;
sensitivity = 0;
dBuffer = new float[sampleRate/bufferSize];
eBuffer = new float[sampleRate/bufferSize];
timer = System.currentTimeMillis();
MusicLoad msc = new MusicLoad();
totalMs = 0;
seeking = true;
//msc.printText();
decode(msc.fileName, 25, 40);
}
でinit()
メソッドを呼び出します、そのクラスA
public void onListItemClick(ListView parent, View v, int position, long id){
musicIndex = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
cursor.moveToPosition(position);
filePath = cursor.getString(musicIndex);
fileName = new File(filePath).getName();
playMusic();//Play the selected music
}
public void playMusic(){
if(mPlayer.isPlaying()){
mPlayer.reset();
}
try{
mPlayer.setDataSource(filePath);
mPlayer.prepare();
mPlayer.start();
BeatDetection beatDetect = new BeatDetection();
beatDetect.init();
}catch (Exception e){
}
}
から音楽をロードするための方法を持っている、それはすべてを初期化し、decode()
メソッドを呼び出し
public void decode(String path, int startMs, int maxMs)
throws IOException, javazoom.jl.decoder.DecoderException {
debug();
File in = new File(path);
InputStream inStream = new BufferedInputStream(new FileInputStream(in), 8 * 1024);
ByteArrayOutputStream outStream = new ByteArrayOutputStream(1024);
try {
Bitstream bitstream = new Bitstream(inStream);
Decoder decoder = new Decoder();
boolean done = false;
while (! done) {
Header frameHeader = bitstream.readFrame();
if (frameHeader == null) {
done = true;
} else {
totalMs += frameHeader.ms_per_frame();
if (totalMs >= startMs) {
seeking = false;
}
if (! seeking) {
SampleBuffer output = (SampleBuffer) decoder.decodeFrame(frameHeader, bitstream);
if (output.getSampleFrequency() != 44100 || output.getChannelCount() != 2) {
throw new javazoom.jl.decoder.DecoderException("mono or non-44100 MP3 not supported", null);
}
short[] pcm = output.getBuffer();
for (short s : pcm) {
outStream.write(s & 0xff);
outStream.write((s >> 8) & 0xff);
}
}
if (totalMs >= (startMs + maxMs)) {
done = true;
}
}
bitstream.closeFrame();
}
byte[] abAudioData = outStream.toByteArray();
calculation(abAudioData);
} catch (BitstreamException e) {
throw new IOException("Bitstream error: " + e);
} catch (DecoderException e) {
Log.w("Decoder error", e);
throw new javazoom.jl.decoder.DecoderException("Error",e);
} finally {
inStream.close();
}
}
すべてのコード行を読み上げても構いません。もし皆さんが気付いたら、最初にdebug()
を入れて、そのメソッドが呼び出されたかどうかを調べてください。この時点で、debug()
が正しく呼び出されます。しかし、File in = new File(path);
の行の後にdebug()
を置くと、debug()
はもう呼び出されません。その時点でコードが停止しているようです。
究極の結果は、問題なく読み込んで再生できます。ただし、decode()
は呼び出されず、エラーはまったくありません。私はこの時点で問題を指摘することに固執しています。だから何か入力があれば私を助けてください。
EDIT: "path"変数をトレースしようとすると、NULLが返され、エラーはNullPointerExceptionになります。クラスAの変数 "fileName"がクラスBに渡されていないようです。
ファイルの定義はどこですか? – Soren
'playMusic()'に例外がスローされたかどうかを確認し、 'e 'を入れてください。キャッチブロック内のprintStackTrace() 'を参照してください。 – Reno
質問を編集しました。 –