Beads NullPointerException перед началом программы? - PullRequest
0 голосов
/ 19 сентября 2019

Я пишу проигрыватель случайных циклов в Processing с использованием библиотеки Beads и импортирую некоторые из моих собственных циклов.Каждый раз, когда я запускаю код, он дает мне исключение NullPointerException.Файлы находятся в том же каталоге, что и эскиз, и все имена файлов написаны правильно.Я пытался использовать внутренний отладчик, и он всегда ломается, даже когда я устанавливаю точку останова в первой строке.(Я также попытался перезагрузить компьютер на случай, если это будет исправлено. Это не помогло.)

Это мой код (не весь, а только соответствующий материал).Имя класса - Randomizer.

import beads.*;
import org.jaudiolibs.beads.*;
import java.util.Random;

// samples
SamplePlayer rhythm1; 
SamplePlayer rhythm2;
SamplePlayer rhythm3;
SamplePlayer rhythm4;
SamplePlayer currentRhythm;

//files
String r1file;
String r2file;
String r3file;
String r4file;

//arrays
ArrayList rhythmArray;

AudioContext ac; // to hear output
Gain gain; // to change volume

void setup() { 
  size(300, 300); 
  background(255);
  r1file = sketchPath("") + "Rhythm1_80BPM.wav";
  r2file = sketchPath("") + "Rhythm2_80BPM.wav";
  r3file = sketchPath("") + "Rhythm3_80BPM.wav";
  r4file = sketchPath("") + "Rhythm4_80BPM.wav";
  // set up arrays
  rhythmArray  = new ArrayList<SamplePlayer>();
  try {
    rhythm1 = new SamplePlayer(ac, new Sample(r1file));
    rhythm2 = new SamplePlayer(ac, new Sample(r2file));
    rhythm3 = new SamplePlayer(ac, new Sample(r3file));
    rhythm4 = new SamplePlayer(ac, new Sample(r4file));
  }
  catch(IOException e) {
    e.printStackTrace();
    exit();
  } 
  //instantiate arraylists
  rhythmArray.add(rhythm1);
  rhythmArray.add(rhythm2);
  rhythmArray.add(rhythm3);
  rhythmArray.add(rhythm4);
}

void draw() { 
  button();
}

void mouseClicked() {
  if (mouseX>113 && mouseX<193 && mouseY>140 && mouseY<220) randomise();
}

Это трассировка стека.

java.lang.NullPointerException
    at beads.UGen.setOutsToPause(Unknown Source)
    at beads.UGen.pause(Unknown Source)
    at beads.Static.<init>(Unknown Source)
    at beads.SamplePlayer.<init>(Unknown Source)
    at beads.SamplePlayer.<init>(Unknown Source)
    at Randomiser.setup(Randomiser.java:81)
    at processing.core.PApplet.handleDraw(PApplet.java:2425)
    at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1547)
    at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:313)

Спасибо за вашу помощь !!

1 Ответ

0 голосов
/ 21 сентября 2019

Итак, я выяснил свою проблему.

Во-первых, мой AudioContext не был инициализирован в функции setup (), которая приводила в замешательство компилятор, так как он ссылался на ac, когда я инициализировал r1file, r2file,r3file и r4file в настройках ().Я исправил это, переместив инициализацию переменного тока в начало функции setup ().

Во-вторых, я использовал файлы MP3, а не файлы WAV, которые Beads не переносит.Я преобразовал MP3 в WAV и импортировал их снова, что полностью решило проблему.

Все в функции setup () одинаково, за исключением этого раздела:

void setup() { 
  ac = new AudioContext();
  size(300, 300); 
  background(255);
  r1file = sketchPath("") + "Rhythm1_80BPM.wav";
  r2file = sketchPath("") + "Rhythm2_80BPM.wav";
  r3file = sketchPath("") + "Rhythm3_80BPM.wav";
  r4file = sketchPath("") + "Rhythm4_80BPM.wav";
...