Add option to change the port osci-render uses

pull/282/head
DJLevel3 2025-01-24 07:38:28 -05:00
rodzic c32fc3f05a
commit e37e227eba
8 zmienionych plików z 57 dodań i 7 usunięć

Wyświetl plik

@ -179,6 +179,11 @@ OscirenderAudioProcessor::OscirenderAudioProcessor() : CommonAudioProcessor(Buse
synth.addSound(defaultSound);
addAllParameters();
if (objectServerPort == 0) {
objectServerPort = 51677;
objectServer.reload();
}
}
OscirenderAudioProcessor::~OscirenderAudioProcessor() {
@ -402,6 +407,11 @@ void OscirenderAudioProcessor::setObjectServerRendering(bool enabled) {
}
}
void OscirenderAudioProcessor::setObjectServerPort(int port) {
objectServerPort = port;
objectServer.reload();
}
void OscirenderAudioProcessor::processBlock(juce::AudioBuffer<float>& buffer, juce::MidiBuffer& midiMessages) {
juce::ScopedNoDenormals noDenormals;
// Audio info variables
@ -660,6 +670,8 @@ void OscirenderAudioProcessor::getStateInformation(juce::MemoryBlock& destData)
}
xml->setAttribute("currentFile", currentFile);
xml->setAttribute("objectServerPort", objectServerPort);
recordingParameters.save(xml.get());
copyXmlToBinary(*xml, destData);
@ -776,6 +788,9 @@ void OscirenderAudioProcessor::setStateInformation(const void* data, int sizeInB
}
changeCurrentFile(xml->getIntAttribute("currentFile", -1));
objectServerPort = xml->getIntAttribute("objectServerPort", juce::Random::getSystemRandom().nextInt(juce::Range<int>(51600, 51700)));
objectServer.reload();
recordingParameters.load(xml.get());
broadcaster.sendChangeMessage();

Wyświetl plik

@ -187,6 +187,8 @@ public:
std::function<void()> haltRecording;
int objectServerPort = 0;
void addLuaSlider();
void updateEffectPrecedence();
void updateFileBlock(int index, std::shared_ptr<juce::MemoryBlock> block);
@ -204,6 +206,7 @@ public:
juce::String getFileId(int index);
std::shared_ptr<juce::MemoryBlock> getFileBlock(int index);
void setObjectServerRendering(bool enabled);
void setObjectServerPort(int port);
void addErrorListener(ErrorListener* listener);
void removeErrorListener(ErrorListener* listener);
void notifyErrorListeners(int lineNumber, juce::String id, juce::String error);

Wyświetl plik

@ -1,8 +1,9 @@
#include "AboutComponent.h"
AboutComponent::AboutComponent(const void *image, size_t imageSize, juce::String sectionText) {
AboutComponent::AboutComponent(const void *image, size_t imageSize, juce::String sectionText, int* port) {
addAndMakeVisible(logoComponent);
addAndMakeVisible(text);
addAndMakeVisible(portText);
logo = juce::ImageFileFormat::loadFrom(image, imageSize);
@ -16,11 +17,26 @@ AboutComponent::AboutComponent(const void *image, size_t imageSize, juce::String
text.setColour(juce::TextEditor::outlineColourId, juce::Colours::transparentBlack);
text.setJustification(juce::Justification(juce::Justification::centred));
text.setText(sectionText);
// TODO: Integrate this better
portText.setMultiLine(false);
portText.setReadOnly(true);
portText.setInterceptsMouseClicks(false, false);
portText.setOpaque(false);
portText.setColour(juce::TextEditor::backgroundColourId, juce::Colours::transparentBlack);
portText.setColour(juce::TextEditor::outlineColourId, juce::Colours::transparentBlack);
portText.setJustification(juce::Justification(juce::Justification::centred));
portText.setText(juce::String("Blender Port: ") + ((port != nullptr) ? juce::String(*port) : juce::String("<error>")));
}
void AboutComponent::updatePortText(int* port) {
portText.setText(juce::String("Blender Port: ") + ((port != nullptr) ? juce::String(*port) : juce::String("<error>")));
}
void AboutComponent::resized() {
auto area = getLocalBounds();
area.removeFromTop(10);
logoComponent.setBounds(area.removeFromTop(110));
portText.setBounds(area.removeFromBottom(20).removeFromTop(15));
text.setBounds(area);
}

Wyświetl plik

@ -4,15 +4,17 @@
class AboutComponent : public juce::Component {
public:
AboutComponent(const void *image, size_t imageSize, juce::String sectionText);
AboutComponent(const void *image, size_t imageSize, juce::String sectionText, int* port);
void resized() override;
void updatePortText(int* port);
private:
juce::Image logo;
juce::ImageComponent logoComponent;
juce::TextEditor text;
juce::TextEditor portText;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AboutComponent)
};

Wyświetl plik

@ -31,8 +31,8 @@ OsciMainMenuBarModel::OsciMainMenuBarModel(OscirenderAudioProcessor& p, Oscirend
"DJ_Level_3, for contributing several features to osci-render\n"
"BUS ERROR Collective, for providing the source code for the Hilligoss encoder\n"
"Jean Perbet (@jeanprbt) for the osci-render macOS icon\n"
"All the community, for suggesting features and reporting issues!"
);
"All the community, for suggesting features and reporting issues!",
&audioProcessor.objectServerPort);
options.content.setOwned(about);
options.content->setSize(500, 270);
options.dialogTitle = "About";
@ -48,6 +48,9 @@ OsciMainMenuBarModel::OsciMainMenuBarModel(OscirenderAudioProcessor& p, Oscirend
juce::DialogWindow* dw = options.launchAsync();
});
addMenuItem(1, "Randomize Port", [this] {
audioProcessor.setObjectServerPort(juce::Random::getSystemRandom().nextInt(juce::Range<int>(51600, 51700)));
});
#if !SOSCI_FEATURES
addMenuItem(1, "Purchase osci-render premium!", [this] {

Wyświetl plik

@ -10,8 +10,14 @@ ObjectServer::~ObjectServer() {
stopThread(1000);
}
void ObjectServer::reload() {
stopThread(1000);
startThread();
}
void ObjectServer::run() {
if (socket.createListener(51677, "127.0.0.1")) {
port = audioProcessor.objectServerPort;
if (socket.createListener(port, "127.0.0.1")) {
// preallocating a large buffer to avoid allocations in the loop
std::unique_ptr<char[]> message{ new char[10 * 1024 * 1024] };

Wyświetl plik

@ -10,9 +10,11 @@ public:
~ObjectServer();
void run() override;
void reload();
private:
OscirenderAudioProcessor& audioProcessor;
int port = 51677;
juce::StreamingSocket socket;
};

Wyświetl plik

@ -44,6 +44,7 @@ class OBJECT_PT_osci_render_settings(bpy.types.Panel):
layout = self.layout
def draw(self, context):
self.layout.prop(context.scene, "oscirenderPort")
global sock
if sock is None:
self.layout.operator("render.osci_render_connect", text="Connect to osci-render instance")
@ -62,7 +63,7 @@ class osci_render_connect(bpy.types.Operator):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
sock.connect((HOST, PORT))
sock.connect((HOST, context.scene.oscirenderPort))
send_scene_to_osci_render(bpy.context.scene)
except socket.error as exp:
sock = None
@ -309,6 +310,7 @@ operations = [OBJECT_PT_osci_render_settings, osci_render_connect, osci_render_c
def register():
bpy.types.Scene.oscirenderPort = bpy.props.IntProperty(name="osci-render port",description="The port through which osci-render will connect",min=51600,max=51699,default=51677)
bpy.app.handlers.frame_change_pre.append(send_scene_to_osci_render)
bpy.app.handlers.depsgraph_update_post.append(send_scene_to_osci_render)
atexit.register(close_osci_render)
@ -317,6 +319,7 @@ def register():
def unregister():
del bpy.types.Object.oscirenderPort
bpy.app.handlers.frame_change_pre.remove(send_scene_to_osci_render)
bpy.app.handlers.depsgraph_update_post.remove(send_scene_to_osci_render)
atexit.unregister(close_osci_render)