Git Product home page Git Product logo

jameshball / osci-render Goto Github PK

View Code? Open in Web Editor NEW
373.0 12.0 18.0 39.94 MB

γ€°πŸ“ΊπŸ”Š Synthesiser audio plugin for making music by drawing objects on an oscilloscope using audio.

Home Page: https://osci-render.com/

License: GNU General Public License v3.0

Python 0.43% Lua 0.10% C++ 87.71% C 11.45% Shell 0.28% CMake 0.03%
audio oscilloscope music rendering blender midi synthesizer audio-plugin

osci-render's Introduction

Open-source synthesizer for making music by drawing objects, text, and images on an oscilloscope using audio. Allows for 3D rendering of .obj files, .svg images, .txt files, and Blender scenes on Windows, macOS, and Linux.

Everything is controllable from a Digital Audio Workstation (DAW), allowing for parameter automation and MIDI control. If you prefer to use osci-render as a standalone application, you can do that too!

Osci-render is a fully programmable synthesiser, allowing for custom visuals, sounds, and audio effects to be scripted using Lua, and interacted with using your DAW.

Get the latest version here!

Send an email to [email protected] if you have any issues, feedback, feature requests, or anything else!

See it in action

Rendering an animated Blender scene

image

Applying audio effects to a Lua script

image

Project file used to create the above demo: square_spiral.osci

Automating parameters from a DAW

image

Reaper project used to create the above demo: square_spiral.rpp

Playing a MIDI keyboard and changing envelope parameters

image

Current Features

  • Render 3D objects
  • Render SVG vector images
  • Render text
  • Scriptable visuals and audio effects using Lua
  • Blender integration
  • Software oscilloscope
  • Applying image effects
    • Bit Crush
    • Vertical/Horizontal Distortion
    • Image Wobble
    • Image Smoothing
    • Image Tracing
    • ... and more!
  • MIDI control
  • Automate parameters from a DAW
  • Saving and loading projects

Screenshots

image

image

image

Download

Pay what you want from the official website: osci-render.com to get access to the latest version.

After you've purchased, you'll be sent an email with a download link. Here you can download the latest version for Windows or macOS, as a standalone application or as a VST or AU plugin.

Installation

Standalone Application

Run the osci-render.exe file on Windows, the osci-render.app file on macOS, or osci-render executable on Linux. You may need to allow the application to run if you get a warning.

Details on how to bypass security warnings or 'app is damaged' warnings on macOS can be found here.

VST Plugin

Copy the osci-render.vst3 file to your VST plugins folder, and restart your DAW. This is usually located at: C:\Program Files\Common Files\VST3 on Windows, or /Library/Audio/Plug-Ins/VST3 on macOS.

AudioUnit (AU) Plugin

Copy the osci-render.component file to your AU plugins folder, and restart your DAW. This is usually located at: /Library/Audio/Plug-Ins/Components on macOS.

Getting Started

Run the application, or add the plugin to your DAW. You should see the below interface, and hear a sine wave playing, and a circle being drawn on the software oscilloscope.

image

Now you can start opening .obj files, .svg files, or .txt files using the Choose File button, or creating your own files from a set of examples by specifying the file type, and using the Create File button.

To start editing the file you've opened, click the arrow button on the very right of the interface to open the code editor:

image

Here you can edit the file, and see the changes in real-time. You can also edit the code while the file is playing, and the changes will be applied immediately.

Now, you can start applying audio effects to the image by enabling the effects you want to use in the Audio Effects section of the interface. You can rearrange the order of the effects by dragging them up and down, and animate the parameters using the drop-down menus next to each effect.

image

You can change the allowed range of each effect by right-clicking on the effect name, and changing the minimum and maximum values. This will change the range the parameter is animated over, and the range of the parameter when being controlled from a DAW.

Rendering a Blender scene

This video explains how to install and use osci-render with Blender. Please note that the video is made for osci-render 1.0, so the interface will look slightly different, but the process is the same.

  • Download the Blender add-on from Releases named osci-render-blender-addon.zip
  • Install and enable the add-on in Blender
  • 'osci-render settings' menu will now appear under 'Render Properties'
  • Open osci-render
  • Click 'Connect to osci-render'
    • If the filename in osci-render changes to 'Rendering from Blender' you have successfully connected
  • Add a camera to the scene (if not already present)
  • Add a Scene Line Art object to the scene
    • Press Shift+A and navigate to Grease Pencil > Scene Line Art
  • Go to 'Modifier Properties' of the newly created Line Art object
  • Click 'Bake Line Art' under the the 'Bake' settings to generate line art for the current animation/scene/camera
  • You should now see the scene on the oscilloscope!

MIDI

To enable MIDI control, open the MIDI settings at the bottom of the interface, and click 'Enable MIDI'.

Make sure your MIDI device is enabled by clicking Audio > Settings from the top menu, and enabling your MIDI device under Active MIDI inputs:

Building

Windows

TODO

macOS

TODO

Linux

  • Clone osci-render
  • Install required packages
    • sudo apt update
    • sudo apt install libasound2-dev libjack-jackd2-dev ladspa-sdk libcurl4-openssl-dev libfreetype6-dev libx11-dev libxcomposite-dev libxcursor-dev libxcursor-dev libxext-dev libxinerama-dev libxrandr-dev libxrender-dev libwebkit2gtk-4.0-dev libglu1-mesa-dev mesa-common-dev g++ make
  • Download JUCE from here https://juce.com/download/
  • Unzip the file
  • Run Projucer from where you unzipped: ./JUCE/Projucer
  • Open osci-render.jucer in Projucer
  • Go to File > Save Project to create a Makefile
  • Go to the LinuxMakefile folder: cd osci-render/Builds/LinuxMakefile
  • Build the project: make CONFIG=Release for release, or make CONFIG=Debug for testing
  • Go to the build folder: cd build
  • Run osci-render executable, or use the VST3 file

Contact

James H Ball, [email protected]

osci-render's People

Contributors

dependabot[bot] avatar djlevel3 avatar jameshball avatar jessicalally avatar kar-3kn avatar ulaga7 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

osci-render's Issues

Device selection dropdown

Users have repeatedly requested being able to select the device of choice when opening the program.

Current situation

  • Currently to change audio device output, you must change the default audio device and restart the program
    • This is tedious and wipes any settings or files loaded pre-restart
  • No way of changing device that osci-render outputs to whilst osci-render is running

Potential remedies

  • Add dropdown menu with current devices on machine, using XtDeviceList
    • Requires adding methods to AudioEngine
    • Will likely require a complete restart of the XtAudioEngine, will need to research a way of changing audio device with XtAudio with minimal work/restart

Controlling osci-render with a keyboard rather than a mouse

I have Osci-Render installed on Windows 10 using osci-render-1.33.2.exe. I connected a MIDI keyboard and was able to use it with Osci-Render. It could control the frequency with the keyboard so that I was able to play notes. However, when attempting to associate a MIDI key with a slider, I run into an issue. I click reset MIDI and then click on the MIDI button next to the slider. The MIDI button turns red and I press the key I would like to associate. The MIDI button stays red and it starts to play my note instead of associating. I cannot figure out whether I'm doing something wrong or if this is a bug.

My logs say this, if relevant:
Jan 21, 2023 1:46:46 AM com.sun.javafx.application.PlatformImpl startup
WARNING: Unsupported JavaFX configuration: classes were loaded from 'unnamed module @2113c62d'
Jan 21, 2023 1:46:50 AM sh.ball.audio.engine.XtAudioEngine getService
SEVERE: No XtAudio service found

many ideas to improve usability!

version v1.18.5 is huge step forward in terms of usability! it's been really fun to do stuff with it. I see this software mainly as a true live tool, in the sense that it doesn't have timelines or a way to program stuff to be launched during other stuff you're doing with it

so I'm going to make some (many) suggestions to maybe could improve this, if implemented.

  • adjust the scales please!! =) on most effects the starting speed should be lower if possible, and the segment from minimum speed to medium should be longer. once you're going fast, there's not really a necessity to fine tuning, but on the slow side you can find a sweet spot if you have the room to move a dial

  • adding the possibility to "morph" or doing some sort of mixing between the current object and the next to be loaded to achieve a smooth transition would be awesome

  • the possibility of separate X and Y volume controls can be useful, specially when working with texts and 2D figures. if you make the controls "bipolar", you can even turn those 2D objects into false 3D, by making them go to zero and then go backwards and return (animation needed there, with a speed control)

  • control over each axis of the 3D rotation: maybe with two centered bars that you can move left or right, and that defines the speed of the rotation in any direction (near the center slow, far moves fast). maybe make a checkbox for randomize direction, to not lose that? and a way to be able to fix a still position and just leave it there, as doing that with the mouse can be a bit tricky

  • maybe doing the same kind of control for the 2D rotate one, so you're not limited to a clockwise movement (and also a way to just leave it on a fixed position by hand could me really useful, to locate the 3D object exactly where you want).

  • I would group all these movement settings in the interface (rotations, translations on x, y, z, etc), anything that doesn't change the shape of the object and is space related

  • some effects (like the trace effect) should have an option on the menu of the right that is like a "one time" only, because they work great applying just one time and then stop at the end. it should be a way to do it more than one time do (maybe a button?)

  • doing automation of some kind on the Z axis translation would be nice (object big is near, small is far), to add some dynamics. if you combine that with the 2D translation somehow, could be huge (object is small on the right, big on the center, small on the left, and so on, like on a ellipse but for x and z, not y). it turns the space the object is in to a more real 3D, you're translating it also on the depth of the screen. and that could also be really useful once you can get more than one object on screen, to achieve some interaction between them. you could in the future even apply some real Z action to this, controlling bright on a third channel according to the depth positioning!

  • about this last one, controlling different types of bright on the same object for three channel scopes could be HUGE, but I bet it's difficult as hell, right? I mean, front of the object at full bright, the back darker (and the rest following the perspective). just an idea for the future, probably a headscratcher...

that's it for now, keep up the good work!

Lua Audio Effects

Hello! I have a cool idea of a feature for osci-render, but from what I can tell it's not possible to do what I want to with Lua at the moment. I basically want to use osci-render's built-in rendering functions from Lua, but with control over the frequency and phase that they render with.

I'm going to look at implementing it myself, so we'll see how that goes, but if I can't do it then I'd like some help. Thanks!

Add option for 24-bit recording

I've been using osci-render to make some music, and it's a bit annoying that the recording output can't go higher than 16-bit depth. I think that a 24-bit recording option would be a great addition, and it shouldn't be too hard to implement if I'm interpreting the code right.

On Windows, the Java audio engine used in osci-render doesn't support higher than 16-bit audio, but from what I can tell there's nothing preventing the audio recording from rendering at a different bit depth than the audio output. Therefore, I'm pretty sure that with relatively little modification it should be possible to add a "24-bit recording" toggle to make the output render at high quality.

I'm going to try to program a test for that myself, but I'm not experienced in the GUI side of the programming so I'll need someone more experienced than me to make the toggle part.

Frequency slider cannot be animated

Currently, the frequency slider cannot be animated. All the regular LFOs/animations like sine, square, seesaw etc. should be able to be applied to frequency too.

The frequency slider should be refactored to be the same format as all the effect sliders. This involves changing how the labels for different frequency values are drawn onto the slider (this should really be done programmatically rather than hardcoded as it is currently) and also supporting displaying a different value in the spinner than the current value of the slider, since the frequency slider is logarithmic.

Pure Data patch integration

Feature overview

  • Allow users to add their own pure data patches to the effects panel
  • Allow for "live-updating" of patches whenever the file is updated
    • Detailed explanation of how to watch for specific files here
  • Have slider values integrate with inputs to objects in Pd
    • Need to research this

Useful links

Support for presets

Multiple projects should be able to be opened at once, allowing you to easily switch between them with a keyboard shortcut. These would operate as presets.

Fairly broad at the moment, so if anyone has any suggestions as to how they'd like this to be implemented, please let me know!

Some lines in .svg rendering made far too long

Describe the bug
When rendering certain .svg files, lines that should be relatively short are rendered as very long lines.

To Reproduce

  1. Load this folder of .svg images into osci-render
  2. Compare output to the images in the folder

Expected behaviour
SVG images render with correctly-sized lines and are positioned as they are in the original file

Screenshots
Expected images and resultant output are in the linked folder, result is in the out.wav to play back on an oscilloscope

Desktop (please complete the following information):

  • OS: Windows 10
  • Version 1.16.3

Overhaul sliders and text fields

Overhaul all sliders and text fields to be more usable. e.g.

  • Set specific values for sliders
  • Allow scrolling on all text fields for numbers
  • Convert number text fields into spinners

Also refactor them and extract common behaviour

JACK audio/MIDI/CV?

A JACK audio (and MIDI) backend would provide Linux support (though JACK is cross-platform itself).

JACK also has a CV port metadata feature, which I guess could be utilised.

Shapes.sortLines() is calculated every single frame

  • This can be avoided by performing Chinese postman on the 3D object on .obj load
    • This order can then be remembered and the vertices projected in order of the graph traversal
  • There is no explicit support for '3D graphs' in JGraphT
    • However, this is unnecessary as the graph can be solved by just accounting for vertices and edges
  • The lengths used to solve the problem should be the length of the 3D arc
    • This doesn't translate perfectly to 2D lengths after projection but this shouldn't be much of an issue for calculating the shortest path

Properly implement tests for ease-of-refactoring

Tests required for the following classes:

  • Shape
    • Use mock objects?
  • Shape subclasses
    • Line, Vector2, Ellipse, Curves etc.
  • SvgParser
  • ObjParser

Why this is required:

  • Implementation of CI
  • Make refactoring more reliable and far quicker
  • Ensure implementing new features is easy

Fine details in .svg totally incorrect

I'm trying to render some .svg files I have, but the images produced are totally incorrect. In some cases, you can tell what is supposed to be drawn, but the fine details are all over the place and make the audio noisy and the image distorted. The image also goes out of frame and clips at the edges. I have no idea how this is happening or how it could be fixed, but this isn't a problem on simple shapes.

Example
Expected first frame

Move "Text File Font" and "Text File Font Style" to a .txt specific file settings panel

Currently, these two settings control the font and style used (i.e. plain, bold, or italic) for .txt files. This doesn't make sense being in the "View" menu item at the moment and would make more sense in its own .txt file settings panel.

This would mimic how the 3D .obj file settings panel is only active when a 3D .obj file is loaded, and how the .lua file settings panel is only active when a .lua file is loaded.

An extra Title Pane is required in a new .fxml file, just like lua.fxml or obj.fxml, along with a new controller in the controller package that contains the logic for the "Text File Font" and "Text File Font Style" settings that is currently in MainController.java.

The logic for changing which panels are visible or disabled is here:

Platform.runLater(() -> {
generalController.setFrameSourceName(frameSourcePaths.get(currentFrameSource));
generalController.updateFrameLabels();
if (ObjParser.isObjFile(fileName)) {
objTitledPane.setVisible(true);
objTitledPane.setDisable(false);
luaTitledPane.setVisible(false);
} else if (LuaParser.isLuaFile(fileName)) {
objTitledPane.setVisible(false);
luaTitledPane.setVisible(true);
} else {
objTitledPane.setVisible(true);
objTitledPane.setDisable(true);
luaTitledPane.setVisible(false);
}
});
}
and could easily be added to by checking if the file type is .txt

If anyone wants to try and do this, I recommend using SceneBuilder to make the interface, or you can edit the .fxml directly. Let me know if you have any issues with this - I'm happy to help!

Improve YouTube video

YouTube demonstration needs updating with newer features since it has been heavily developed since.

Fonts and font styles chosen for text file rendering are not saved to a project

Currently, when you change which font or font style is being used, it isn't saved at all when you save the project.

Code will need to be added to the saveProject and openProject functions to save this to the project.

When opening the project, a fallback back to the system default (sans-serif) font is required, as the font might not be installed on another operating system etc. There is similar code here that does the same thing that could be extracted into a separate function.

fontFamilyListView and fontStyleComboBox store the font and text style, and there are examples of how to update the currently open file's font and style here (but this might not be required, as you should be able to set the font family + style before you open the files in openProject).

If anyone would like to work on this issue, please let me know if you have any further questions!

Undo/redo carries over between different files in the text editor

Reproduce:

  • Open text editor with one file using "Edit File"
  • Make some changes to the file
  • Open text editor with another file
  • Undo (Ctrl+Z) multiple times and you will see the previous file appear

This happens because the text area used for the text editor changes value when you open a new file, and the browser stores this as a change that can be undone with Ctrl+Z. https://stackoverflow.com/questions/13710614/clear-undo-history-of-events-in-browser-with-javascript explains what you need to do here. CodeMirror has an editor.clearHistory() that could be used whenever a new file is loaded in.

This should be fairly easy to do in the code for text editor as it's just another JavaScript function to call when loading a file.

Loud sound on start of program *feedback appreciated*

Watching multiple users of osci-render every one has reacted to or commented on the jarring and abrupt start of the audio when it is launched.

Reasons to keep:

  • Quickly diagnoses any issues with audio
  • Doesn't require any interaction to start displaying stuff on the screen
  • More intuitive to start messing around with controls (?)
  • Need some sort of example model to be loaded, otherwise, there is a pre-requisite to download .obj files to do anything with the program

Reasons to remove:

  • Sound is loud and jarring/unexpected!
  • Not useful as a repeat user of the program, can get quite annoying
  • If a user never actually uses the cube object, why is it rendered by default?

Potential remedies:

  • Add mute button that is ticked by default
    • Will need to be very obvious (large text, diff colour e.g.) to prevent confusion of no audio after loading a file
  • Start the program with the size set to 0
    • Probably confusing as it's not obvious why there is no audio unless you've used the program before
  • Only start playing audio once you load a file or move any setting
    • Clear link between interaction and audio: any confusion will be quickly resolved by messing around with settings

Please reply with any other ideas or feedback!

Add MIDI/audio hook for DAWs

Add a hook/plugin for DAWs

Issue

There is no way to use osci-render with a DAW such as Ableton or FL Studio at the moment, so recording audio with MIDI input is only possible when doing it live or with special software.


Potential solutions

  1. Add functionality to play back MIDI files! This one's probably quite easy and in my opinion should be implemented ASAP.
  2. Create a VST3 plugin using iPlug2 that just sends MIDI to the standalone osci-render application (like the Blender plugin sends GPLA) and returns audio taken from the application. This can likely be done using a web interface or using local IP addressing, as iPlug2 has a web interface functionality.
  3. Port osci-render into a VST3 plugin to run entirely within the DAW. This is probably very difficult, as iPlug2 and JUCE both use C++ rather than Java. While an interface plugin would only need C++ for the plugin side (which I can develop), a true port would mean converting everything to C++, which would take far too much time and effort.

Notes/Miscellaneous

If you want to go with option 1, I can develop the VST3 plugin, since I mainly program in C++, but I'd need someone else to do the osci-render part as I suck at Java.

Thanks for making such an amazing tool, by the way! I use it a lot for making music, because for most use cases it's the best tool available.


Edits

8/24/2022 @ 11:19 AM Mountain Time: Added another potential solution

Save Blender frames to file for later, standalone use (and improve performance while I'm at it)

New idea! I've had a look at the Blender plugin and how it sends data over, and I think it won't be too hard to add functionality to bake each frame to a file so osci-render can render them without Blender running every time. My plan at the moment is to use the file format RIFF and to store each frame individually, as this allows them to be mixed with other animations and other file types when opening a folder.

I'm planning to use RIFF, which is smaller and faster than JSON, as the Blender plugin has some performance issues when processing complex scenes. RIFF is a binary format, so the files will inherently be unreadable without a hex editor (I like to use hexed.it, if you're looking for one I recommend it). However, the data being stored is just a bunch of numbers anyway and the size and performance gains are significant.

Cant get it to work. Theres no sound.

Hello. I just stumbled upon this software and was so excited to check it out. But sadly it doesn't work on my Systems or I haven't figured out how to use it. When I select an .obj file nothing happens and when I hit record it always creates a file that is 44 bytes in size
oscirender
properties

Add Documentation for Microphone

Add Documentation for Microphone

Issue

Documentation for the microphone option is nonexistent, but if it does what I think it is supposed to do then it would be extremely useful.

It may not be working for me, but I'm not 100% sure since I don't know what it's actually supposed to do.

Fix

Add documentation

No text rendering support

Text rendering is not supported

  • Should be extremely easy to implement since .svg rendering is already supported
  • First text should be converted into an .svg format and then rendered appropriately
  • Difficult part will be making sure the letters are positioned correctly with each other
    • Mono-space fonts obviously avoid this issue
  • https://xmlgraphics.apache.org/batik/tools/font-converter.html might be a good place to start
  • Or manually converting some example fonts from https://fonts.google.com/
    • Convert each glyph into an .svg and then render them accordingly
  • Text should be rendered when the first program argument is not an .svg or .obj file

Please reply if you'd like to claim this issue!

Support modifying synths used for each MIDI channel

Currently, every MIDI channel except the main one (that the osci-render image is being drawn to) just uses sine waves and cos waves to create circles. This should be modifiable to allow certain MIDI channels to use triangle/square/sawtooth etc. waves rather than just sine waves.

This could be added under a new MIDI section, as mentioned in #152

Remove Controls from menu bar and prevent translation from being controlled by scroll bar

Since the scrollable menu for Effects was added, it no longer makes sense to control the translation text boxes by scrolling as it moves the scrollable menu at the same time.

This should be disabled and the Controls sub-menu should be removed from the menu bar as a result.

If anybody wants to work on this, the Controls menu is located in main.fxml and MainController.java, and the Translation effect text fields are located in EffectsController.java.

image

Add a warning when attempting to close osci-render with unsaved changes

Currently, you can easily make lots of changes and close the program after forgetting to save, losing your progress.

The program title currently updates to include "unsaved files" at the top, but this only updates when you edit a file, and not when you change a slider value, for example.

For a decent first version of this, you could simply detect when any slider value has changed and then update the title accordingly. Later iterations of this could include monitoring updates text fields, and settings in the bar at the top.

This could work by having the MainController listen to all sub-controllers and whenever a value is changed, tell the MainController.

When closing osci-render, first check if there are unsaved changes, and open a pop-up window asking the user if they want to save before exiting or not.

Save and load configuration from file

When reopening osci-render, all options are reset to default. It would be useful to have the ability to save and load configuration files for any cool effects the user creates.

Reasons for

  • Save and share cool effects
  • Prevents going through each option to pick up where you left off
  • Could also add the ability to save a certain config file as default
  • Can be accomplished with built-in libraries

Reasons against

  • Requires adding some GUI elements to save and load configs, maybe a reset button to go back to the defaults for the loaded config
    • Unrelated; right-click to reset a property to default?
  • How 'deep' to go? Do we save just the property values, or do we include the selected file/folder and MIDI configuration? What if they are no longer available?

Potential implementation

Add a config manager class that handles the saving, loading and parsing of config files.
This could potentially be done using Java's built-in XML and IO libraries, theoretically making file IO and XML parsing an easy implementation.

Latest version 1.24.8 under OS X 10.14.6 Mojave

Hello James,
Here trying the latest version, after installing and double clicking, it wont open, one can hear the sound of the basic model but nothing comes on the screen and the this bug report appears:

Application Specific Information:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'not running on AppKit (main) thread'
terminating with uncaught exception of type NSException
abort() called

I had one of the earlier versions installed before, not sure which one now since i think it got replaced by the installer. Is there anything i need to remove via command line to start from zero?

Please let me know what else I should tell you to help debug.

Alejo

rendering issue when visualizing output on a software lissajous

Describe the bug
i'd like to use osci-render as an input to https://github.com/BespokeSynth/BespokeSynth

however, the image of the cube obj rendered on a lissajous is not quite right.

To Reproduce

  1. install JACK (or pipewire)
  2. launch BespokeSynth
  3. configure BespokeSynth audio input as JACK (restart if needed)
  4. create an audio effects / input module
  5. create an audio effects / lissajous module
  6. wire the input to the lissajous
  7. launch osci-render
  8. open qjackctl / Graph and wire the output of osci-render to the input of BespokeSynth

Expected behaviour
i'd expect to see the cube rendered on the software lissajous

Screenshots
Screenshot from 2022-03-15 08-35-14

Desktop (please complete the following information):

  • OS: Debian Bookworm
  • Version: 1.19.2

Cannot run jar file

Describe the bug
When running jar file with the command given I get a long error message

To Reproduce
Steps to reproduce the behaviour:

  1. Type the command to start the jar file
  2. error pops up

Expected behaviour
The program to start

Screenshots
N/A

Desktop (please complete the following information):

  • OS: [Windows 10]
  • Version [21h1.]

Additional context
Error in CMD:

C:\Users\zoome>java "-Dfile.encoding=UTF8" -jar "C:\Users\zoome\Desktop\osci-render-win-1.7.2.jar"
Jun. 23, 2021 2:03:51 P.M. com.sun.javafx.application.PlatformImpl startup
WARNING: Unsupported JavaFX configuration: classes were loaded from 'unnamed module @5bef1c6a'
Exception in Application start method
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
        at java.base/java.lang.Thread.run(Thread.java:831)
Caused by: javafx.fxml.LoadException:
file:/C:/Users/zoome/Desktop/osci-render-win-1.7.2.jar!/fxml/osci-render.fxml

        at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2707)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2685)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
        at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2517)
        at sh.ball.gui.Gui.start(Gui.java:29)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:474)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:447)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:446)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
        ... 1 more
Caused by: xt.audio.XtException
        at xt.audio.Utility.handleError(Utility.java:61)
        at xt.audio.XtDevice.supportsFormat(XtDevice.java:55)
        at sh.ball.audio.engine.XtAudioEngine.devices(XtAudioEngine.java:165)
        at sh.ball.audio.ShapeAudioPlayer.devices(ShapeAudioPlayer.java:242)
        at sh.ball.gui.Controller.initialize(Controller.java:256)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2655)
        ... 12 more

[Blender Plugin] Add functionality for frame-by-frame 'baking' at some point once WavShaper is ready

Context

I will try to implement this myself in a few hours, but I'm developing an audio plugin called WavShaper and I want to add the functionality to animate the shapes instead of using static shapes. My idea for implementation is to use an audio file like I'm using, but instead of choosing one cycle of the same animation I read one frame of animation per cycle of audio (so, 1 second @ 10Hz = 10 frames).

Suggestion

To that end, I have so far been going through the audio from osci-render by hand and clipping out each frame, but in the future I want to be able to use the audio from osci-render. This may be possible in a Lua plugin, not sure on that, but what I'm imagining is a button (either in osci-render or in the Blender plugin) to go through frame by frame and save 4800 samples for each frame to the same audio file. There is definitely a feature in Blender to bake some kind of animation, that can almost definitely be used with osci-render.


Some additional ideas to make it even more useful in other applications:

  1. Automatically maximize output volume (code below)
  2. Allow setting frequency of frames
  3. Allow setting duration or number of cycles recorded for each frame
  4. Automatically set some settings based on others?

Code to maximize the output volume

Written in C++, but should translate really easily to Java. The math syntax is super similar.

// Normalization factor (maximum sample absolute value)
double norm = 0;

// Floating-Point Calculation and Recording Pass
for (int frame = 0; i < nFrames; frame ++) {
    for (int sample = 0; sample < sampsPerFrame; i ++) {

        // ----- Calculate the sample and store it in sampleArray[frame][sample][channel] -----

        // Left Channel
        if(std::abs(sampleArray[frame][sample][0]) > norm) {
            norm = std::abs(sampleArray[frame][sample][0]); // Math.abs() in Java
        }

        // Right Channel
        if(std::abs(sampleArray[frame][sample][1]) > norm) {
            norm = std::abs(sampleArray[frame][sample][1]); // Math.abs() in Java
        }
    }
}

// Reduce unnecessary floating-point divisions, they're way slower than multiplications
norm = 1 / norm;

// Floating-Point Normalization Pass
for (int frame = 0; i < nFrames; frame ++) {
    for (int sample = 0; sample < sampsPerFrame; i ++) {
        sampleArray[frame][sample][0] *= norm;
        sampleArray[frame][sample][1] *= norm;
    }
}

// ----- Convert the samples to whatever format (int16, int24, float32, etc) is needed -----

// ----- Store the converted samples to the output file -----

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.