kopia lustrzana https://github.com/jameshball/osci-render
Only start osci-render audio pipeline once a project has been opened, and increase min length increment
rodzic
75e94233f7
commit
10ed91e3a1
|
@ -33,7 +33,7 @@ public class ShapeAudioPlayer implements AudioPlayer<List<Shape>> {
|
||||||
private static final int BUFFER_SIZE = 10;
|
private static final int BUFFER_SIZE = 10;
|
||||||
|
|
||||||
private static final boolean BIG_ENDIAN = false;
|
private static final boolean BIG_ENDIAN = false;
|
||||||
private static final double MIN_LENGTH_INCREMENT = 0.0000000001;
|
private static final double MIN_LENGTH_INCREMENT = 0.000001;
|
||||||
|
|
||||||
// MIDI
|
// MIDI
|
||||||
private final short[][] keyTargetVolumes = new short[MidiNote.NUM_CHANNELS][128];
|
private final short[][] keyTargetVolumes = new short[MidiNote.NUM_CHANNELS][128];
|
||||||
|
|
|
@ -175,6 +175,7 @@ public class Gui extends Application {
|
||||||
|
|
||||||
public void launchMainApplication(MainController controller, String projectPath, Boolean muted) throws Exception {
|
public void launchMainApplication(MainController controller, String projectPath, Boolean muted) throws Exception {
|
||||||
scene.setRoot(root);
|
scene.setRoot(root);
|
||||||
|
controller.initialiseAudioEngine();
|
||||||
controller.openProject(projectPath);
|
controller.openProject(projectPath);
|
||||||
if (muted) {
|
if (muted) {
|
||||||
controller.setVolume(0);
|
controller.setVolume(0);
|
||||||
|
|
|
@ -194,22 +194,8 @@ public class MainController implements Initializable, FrequencyListener, MidiLis
|
||||||
@FXML
|
@FXML
|
||||||
private ComboBox<AudioSample> audioSampleComboBox;
|
private ComboBox<AudioSample> audioSampleComboBox;
|
||||||
|
|
||||||
public MainController() {
|
|
||||||
FrameSource<List<Shape>> frames = new ShapeFrameSource(List.of(new Vector2()));
|
|
||||||
openFiles.add(new byte[0]);
|
|
||||||
frameSources.add(frames);
|
|
||||||
sampleParsers.add(null);
|
|
||||||
frameSourcePaths.add("Empty file");
|
|
||||||
currentFrameSource = 0;
|
|
||||||
this.producer = new FrameProducer<>(audioPlayer, frames);
|
|
||||||
if (defaultDevice == null) {
|
|
||||||
throw new RuntimeException("No default audio device found!");
|
|
||||||
}
|
|
||||||
this.sampleRate = defaultDevice.sampleRate();
|
|
||||||
}
|
|
||||||
// initialises midiButtonMap by mapping MIDI logo SVGs to the slider that they
|
// initialises midiButtonMap by mapping MIDI logo SVGs to the slider that they
|
||||||
// control if they are selected.
|
// control if they are selected.
|
||||||
|
|
||||||
private Map<SVGPath, Slider> initializeMidiButtonMap() {
|
private Map<SVGPath, Slider> initializeMidiButtonMap() {
|
||||||
Map<SVGPath, Slider> midiMap = new HashMap<>();
|
Map<SVGPath, Slider> midiMap = new HashMap<>();
|
||||||
subControllers().forEach(controller -> midiMap.putAll(controller.getMidiButtonMap()));
|
subControllers().forEach(controller -> midiMap.putAll(controller.getMidiButtonMap()));
|
||||||
|
@ -349,7 +335,6 @@ public class MainController implements Initializable, FrequencyListener, MidiLis
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
objController.setAudioProducer(producer);
|
|
||||||
generalController.setMainController(this);
|
generalController.setMainController(this);
|
||||||
luaController.setMainController(this);
|
luaController.setMainController(this);
|
||||||
|
|
||||||
|
@ -532,32 +517,6 @@ public class MainController implements Initializable, FrequencyListener, MidiLis
|
||||||
});
|
});
|
||||||
|
|
||||||
brightnessSlider.valueProperty().addListener((e, old, brightness) -> audioPlayer.setBrightness(brightness.doubleValue()));
|
brightnessSlider.valueProperty().addListener((e, old, brightness) -> audioPlayer.setBrightness(brightness.doubleValue()));
|
||||||
|
|
||||||
objController.updateObjectRotateSpeed();
|
|
||||||
|
|
||||||
executor.submit(producer);
|
|
||||||
Gui.midiCommunicator.addListener(this);
|
|
||||||
AudioInput audioInput = new JavaAudioInput();
|
|
||||||
if (audioInput.isAvailable()) {
|
|
||||||
audioInput.addListener(this);
|
|
||||||
new Thread(audioInput).start();
|
|
||||||
} else {
|
|
||||||
for (CheckBox checkBox : micCheckBoxes()) {
|
|
||||||
if (checkBox != null) {
|
|
||||||
checkBox.setDisable(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
luaController.updateLuaVariables();
|
|
||||||
|
|
||||||
objectServer = new ObjectServer(this::enableObjectServerRendering, this::disableObjectServerRendering);
|
|
||||||
new Thread(objectServer).start();
|
|
||||||
|
|
||||||
webSocketServer = new ByteWebSocketServer();
|
|
||||||
webSocketServer.start();
|
|
||||||
this.buffer = new byte[FRAME_SIZE * SOSCI_NUM_VERTICES * SOSCI_VERTEX_SIZE];
|
|
||||||
new Thread(() -> sendAudioDataToWebSocket(webSocketServer)).start();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLuaVariable(String variableName, Object value) {
|
public void setLuaVariable(String variableName, Object value) {
|
||||||
|
@ -1459,6 +1418,48 @@ public class MainController implements Initializable, FrequencyListener, MidiLis
|
||||||
effectsController.setVolume(volume);
|
effectsController.setVolume(volume);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void initialiseAudioEngine() {
|
||||||
|
FrameSource<List<Shape>> frames = new ShapeFrameSource(List.of(new Vector2()));
|
||||||
|
openFiles.add(new byte[0]);
|
||||||
|
frameSources.add(frames);
|
||||||
|
sampleParsers.add(null);
|
||||||
|
frameSourcePaths.add("Empty file");
|
||||||
|
currentFrameSource = 0;
|
||||||
|
producer = new FrameProducer<>(audioPlayer, frames);
|
||||||
|
objController.setAudioProducer(producer);
|
||||||
|
|
||||||
|
if (defaultDevice == null) {
|
||||||
|
throw new RuntimeException("No default audio device found!");
|
||||||
|
}
|
||||||
|
sampleRate = defaultDevice.sampleRate();
|
||||||
|
|
||||||
|
objController.updateObjectRotateSpeed();
|
||||||
|
|
||||||
|
executor.submit(producer);
|
||||||
|
Gui.midiCommunicator.addListener(this);
|
||||||
|
AudioInput audioInput = new JavaAudioInput();
|
||||||
|
if (audioInput.isAvailable()) {
|
||||||
|
audioInput.addListener(this);
|
||||||
|
new Thread(audioInput).start();
|
||||||
|
} else {
|
||||||
|
for (CheckBox checkBox : micCheckBoxes()) {
|
||||||
|
if (checkBox != null) {
|
||||||
|
checkBox.setDisable(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
luaController.updateLuaVariables();
|
||||||
|
|
||||||
|
objectServer = new ObjectServer(this::enableObjectServerRendering, this::disableObjectServerRendering);
|
||||||
|
new Thread(objectServer).start();
|
||||||
|
|
||||||
|
webSocketServer = new ByteWebSocketServer();
|
||||||
|
webSocketServer.start();
|
||||||
|
this.buffer = new byte[FRAME_SIZE * SOSCI_NUM_VERTICES * SOSCI_VERTEX_SIZE];
|
||||||
|
new Thread(() -> sendAudioDataToWebSocket(webSocketServer)).start();
|
||||||
|
}
|
||||||
|
|
||||||
private record PrintableSlider(Slider slider) {
|
private record PrintableSlider(Slider slider) {
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
|
|
@ -8,6 +8,9 @@ import java.net.InetSocketAddress;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
import static sh.ball.gui.Gui.logger;
|
||||||
|
|
||||||
public class ByteWebSocketServer extends WebSocketServer {
|
public class ByteWebSocketServer extends WebSocketServer {
|
||||||
|
|
||||||
|
@ -26,6 +29,7 @@ public class ByteWebSocketServer extends WebSocketServer {
|
||||||
sock.send(bytes);
|
sock.send(bytes);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
conns.remove(sock);
|
conns.remove(sock);
|
||||||
|
logger.log(Level.SEVERE, e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
- Shows last 20 previously opened projects
|
- Shows last 20 previously opened projects
|
||||||
- These can be clicked on to open a previous project
|
- These can be clicked on to open a previous project
|
||||||
- Allow any font that has been installed on your machine to be used with text files
|
- Allow any font that has been installed on your machine to be used with text files
|
||||||
|
- Change font by selecting a font from the drop-down under View > Text File Font
|
||||||
|
- Change font style (i.e. plain, bold, italic) by selecting a font style from the drop-down under View > Text File Font Style
|
||||||
|
|
||||||
|
|
||||||
- 1.26.4
|
- 1.26.4
|
||||||
|
|
Ładowanie…
Reference in New Issue