Как добавить осциллограф jsyn в зубчатую пилу Jsyn - PullRequest
0 голосов
/ 24 апреля 2018

для какой-то работы в колледже я делаю Java VST / Synthesizer. У меня есть осцилляторы, производящие звуки и меняющие частоту до желаемых значений, когда необходимо изменить высоту тона, но мне бы хотелось иметь на экране визуальный осциллограф, где есть все возможности для редактирования звука. Как я мог это сделать? Вот код, из которого генерируется и воспроизводится звук SawTooth в случае, если это поможет:

import com.jsyn.JSyn;
import com.jsyn.Synthesizer;
import com.jsyn.unitgen.LineOut;
import com.jsyn.unitgen.SawtoothOscillatorBL;
import com.jsyn.unitgen.UnitOscillator;

public class SawTooth {

    public static Synthesizer synth = JSyn.createSynthesizer();
    public static UnitOscillator osc;
    public static LineOut lineout;

    public static double Frequency = 261.626;
    public static double Amplitude = 0.6;
    public static int Voices = 1;

    public static void Play() {
        synth.start();
        synth.add(osc = new SawtoothOscillatorBL());
        synth.add(lineout = new LineOut());
        osc.output.connect(0, lineout.input, 0);
        osc.output.connect(0, lineout.input, 1);
        osc.frequency.set(Frequency);
        osc.amplitude.set(Amplitude);
        lineout.start();
        System.out.println("Wave Playing");
    }

}

Заранее спасибо

1 Ответ

0 голосов
/ 26 апреля 2018

На GitHub есть пример программы, которая показывает, как добавить область. Включает несколько фейдеров для управления звуком.

https://github.com/philburk/jsyn/blob/master/tests/com/jsyn/examples/SeeGoogleWave.java

Вот основные шаги:

  AudioScope scope = new AudioScope(synth);

  // Add a scope trace that will be driven by an output port.
  scope.addProbe(oscillator.output);

  // Trigger on a rising edge.
  scope.setTriggerMode(AudioScope.TriggerMode.NORMAL);

   // Turn off scope controls if you want a cleaner UI.
  scope.getView().setShowControls(false);

   // Start a thread that will periodically update the scope.
  scope.start();

  // Add the scope's View to your UI
  add(BorderLayout.CENTER, scope.getView());
...