Giter Club home page Giter Club logo

renderman's Introduction

       ______               _          ___  ___
       | ___ \             | |         |  \/  |
       | |_/ /___ _ __   __| | ___ _ __| .  . | __ _ _ __
       |    // _ \ '_ \ / _` |/ _ \ '__| |\/| |/ _` | '_ \
       | |\ \  __/ | | | (_| |  __/ |  | |  | | (_| | | | |
       \_| \_\___|_| |_|\__,_|\___|_|  \_|  |_/\__,_|_| |_|

* *  Command Line VSTi Audio, Features and Parameter Renderer  * *
build
Build Status

RenderMan

Renderman is a command line VSTi host written in C++ with Python bindings using JUCE and Maximilian libraries for the backend. It is designed with ease of use in mind to extract audio and features from VSTi plugins. It has a fast growing list of features, including setting, getting parameters from synthesiers, setting whole patches, getting random patches, obtaining MFCCS, FFT, audio data and much more.

A usage example in the form of an IPython notebook can be found here.

Here are some quick gifs demonstrating a miniscule amount of the availble features, go towards the bottom of the README to see the full API:

Loading Plugins

Here we load a plugin. On Linux it's an .so file, for MacOS it will be a .vst or .au.

Getting Parameter Descriptions

We can obtain the available parameters that are used and that can be modified by doing the following.

Getting a Randomised Patch For a Synthesiser

We can easily get a randomised for a given synth by using the PatchGenerator class.

Plotting Rendered Audio Frames

We can plot the output audio frames easily by using matplotlib.

Building / Installation

MacOS

If you haven't already, get brew. The last time I checked the command to install was simply this:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Next, get the boost headers.

brew install boost-python3

You can also install boost manually if for some reason you don't want to use brew, see here.

Now just open the Xcode project in the Builds directory and build it! There is a bug in the JUCE projucer app which means the generated shared object will be suffixed with a dylib. This means python wont be able to import the module. Until this bug is fixed, change directory into the Builds/MacOSX/build/<Debug/Release> (depending on your Xcode scheme,) and run:

mv librenderman.so.dylib librenderman.so

IMPORTANT: The project is linked with libpython3.8 and libboost_python38 and the appropriate include directories. If you have a different version of python installed, run python3-config --includes --ldflags to obtain the library and include paths, and update the XCode project to point to the correct locations

Linux

Firstly, you will need the boost library (specifically the python headers) for this code to compile.

Ubuntu:

sudo apt-get install libboost-all-dev

Arch:

sudo pacman -Ss boost

Fedora:

sudo yum install boost-devel

If your distribution's package manager doesn't have boost, you can get the headers from here.

Juce itself has a list of dependancies for Linux; it's a very big library - if you don't know it you should definitely take some time out to check it out! Depending on your distribution and setup you may already have some / all of the following libraries. If you are on Ubuntu, the following commands will install your dependancies. Find the respective packages for other distros using google please!

sudo apt-get -y install llvm
sudo apt-get -y install clang
sudo apt-get -y install libfreetype6-dev
sudo apt-get -y install libx11-dev
sudo apt-get -y install libxinerama-dev
sudo apt-get -y install libxrandr-dev
sudo apt-get -y install libxcursor-dev
sudo apt-get -y install mesa-common-dev
sudo apt-get -y install libasound2-dev
sudo apt-get -y install freeglut3-dev
sudo apt-get -y install libxcomposite-dev
sudo apt-get -y install libcurl4-gnutls-dev

Well done! You've made it this far! Should you still have problems, which is always a possibility with Linux, a good place to start is the JUCE forums, particularly here and here. Feel free to drop me a note with an error and I'll happily scratch my head over it but you may get better results in the forums!

So to now build the library for Linux, change to the right directory and run make:

cd Builds/LinuxMakefile/
make

Windows - VisualStudio2019

Download and Install boost

Download from https://www.boost.org/users/download/ extract to c:\boost_1_74_0

cd c:\boost_1_74_0
bootstrap.bat
.\b2 --toolset=msvc-14.0 --build-type=complete --prefix=C:\Boost install

Download and Install python 3.7.9

Download from https://www.python.org/downloads/release/python-379/

Open RenderMan.sln in VisualStudios2019

When prompt to retarget projects

select Windows SDK Version: 8.1 platform toolset: No Upgrade

add Includes to search path Project > Properties > C/C++ > General

Additional Include Directories

C:\Boost\include\boost-1_74
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\include

add Libs to search path

Project > Properties > Configuration Properties > VC++ Directories

Library Directories

add

C:\Boost\lib
C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\libs

build

after build rename

RenderMan\Builds\VisualStudio2019\x64\Debug\Dynamic Library\renderman.dll

to

librenderman.pyd

*put the pyd file in the root of the python program

Does It Work?

Change directory to where the .so file is and run:

python

Once in interactive mode, run:

import librenderman as rm

If this doesn't spit out errors, congratulations! Enjoy RenderMan. :)

Note you'll need to have the .so binary in the same directory as the Python project or where you call the interative Python shell from. To use it system wide it will need to be added to the PYTHONPATH environment variable. Soon I'll get distutils sorted so there is an easier installation method.

API

class RenderEngine

The constructor takes three arguments, the sample rate, the buffer size and fft size. Good defualt values if you don't really care that much are 44100, 512, 512 repsectively.

__init__(int sample_rate,
         int buffer_size,
         int fft_size)

Supply a full path to the plugin to this function to load the vst. It will return true if there is a successful loading.

bool load_plugin(string plugin_path)

We can set a synth's patch by taking a list of tuples and set the parameters at the int index to the float value. The PatchGenerator class can generate random patches with ease for a given synth.

void set_patch(list_of_tuples(int, float) patch)

Get the current patch.

list_of_tuples(int, float) get_patch()

Take a midi note (middle C is 40,) a velocity (0 - 127,) and the note length and recording / rendering length and create the features to be extracted!

void render_patch(int   midi_note_pitch,
                  int   midi_note_velocity,
                  float note_length_seconds,
                  float render_length_seconds)

Get MFCC features as a list of lists. The first length will be dictated by fft size divided by four, and the second length with be 13, which is the amount of coefficients.

list_of_lists get_mfcc_frames()

Get the int amount of parameters for the loaded plugin.

int get_plugin_parameter_size()

Get a description of each parameter.

string get_plugin_parameters_description()

Override a parameter to always be the supplied value. The float is normalised (0 - 1).

override_plugin_parameter(int   index,
                          float value)

Remove an overriden plugin parameter.

remove_overriden_plugin_parameter(int index)

Get a list of floats which is the audio from the rendering session.

list get_audio_frames()

Write the current patch to a wav file at the specified relative or absolute path. This will overwrite existing files and is only a preview; it is mono and currently not quite loud enough.

void write_to_wav(string path)

Get a list of root mean squared frames derived from the audio samples. Each frame is a root mean squared of an amount of samples equal to the fft size divided by four.

list_of_floats get_rms_frames()
class PatchGenerator

This class is used to generate patches for a given engine.

The constructor takes an argument of a RenderEngine that has succesfully loaded a plugin.

__init__(RenderEngine engine)

We can obtain a random value (from a real uniform distribution) that for a parameter at a specified index.

tuple(int, float) get_random_parameter(int index)

We can get a completely random patch sampled from PRNG in the same way above.

list_of_tuples(int, float) get_random_patch()

Contributors

I want to express my deep gratitude to jgefele. It is very touching that people want to use this code let alone contribute to it - thanks!

Context and Contact

This library is a work in progress for my final year project where I am using Neural Networks to generate synth patches to create desired sounds. For example, I wrote a toy VSTi and learnt synthesiser using a neural network to sound match target sounds here. Everything this library has facilitates that but I recognise there may be more applications so if there are any feature requests please drop me a line on here or leonfedden (at) gmail.com :)

Finally, doing something cool with this library? Let me know what you are up to! And if this code was useful for you then please kindly drop me a GitHub star so more developers will trust and use this code.

If you use this code for academic works, feel free to reference this code through the DOI here: DOI

Thanks for reading this far, you rock!

renderman's People

Contributors

fedden avatar jgefele avatar shenberg 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  avatar  avatar  avatar

renderman's Issues

__init__() should return None, not 'NoneType' when instantiating RenderEngine()

Spent an entire day trying to get renderman to work. Can't figure out what's wrong. Compiled the build for MacOS, renamed the librenderman.so.dylib to .so, tried with different python envs and I get the same issue over and over. Found on some threads that it could be related to having the wrong linking to the boost lib but when inspecting it is pointing to the right one. Any ideas?

`Alejandros-MacBook-Pro:lib alek$ /usr/local/bin/python
Python 2.7.16 (default, Jun 19 2019, 07:40:37)
[GCC 4.2.1 Compatible Apple LLVM 10.0.1 (clang-1001.0.46.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

import librenderman as rm
JUCE v5.2.0
rm.RenderEngine(22050,256,256)
Traceback (most recent call last):
File "", line 1, in
TypeError: init() should return None, not 'NoneType'`

How to load VST plug-in for Windows?

Hi, I have built the application on Windows using another Fork, but I have not figure out how to load a VST plug-in under Windows10.
Usually, on Windows, a VST plug-in is a dll file. I tried e.g. the following code:
plugin_path = 'C:/Users/lenovo/Desktop/AnacondaCodeEnv/music_synth_renderman/VST/Kontakt.dll' eng.load_plugin(str(plugin_path))
But it does not work, only crashes program.

So I want to know, how to load a VST plug-in for Windows? Or even is this possible at the first place, because the application was not only built for OSX and Linux, but also only designed for these two platforms?

Thanks!

EDIT: Oh, I know partially the reason. If the VST plug-in is in VST3 format (.vst3 extension), then no problem to load. If a plug-in is in .dll extension, then it is a VST2 format.
But I am still confused, because the MacOS built version has no problem to load "Kontakt Player 6", which is only available as VST2 plug-in (file Kontakt.component in MacOS).

name...

FYI RenderMan is a tradermark of Pixar and the name of their 3D rendering software, been around for > 25 years. Might want to rethink the name.

Apply a VST effect on a WAV file

Hello,
Congrats for this library! How would this be possible in Python:

  • load WAV file (can be done easily with scipy.io.wavfile's read(...))
  • load VST effect plugin myeffect.dll with preset = "Preset 1"
  • apply the effect to the WAV file
  • save the output file (can be done easily with scipy.io.wavfile's write(...))

Is this possible with RenderMan?
Do you have an example like:

from scipy.io import wavfile
import renderman as rm
engine = rm.RenderEngine(44100, 512, 512)
engine.loadplugin('myeffect.so')  # or 'myVST.dll' on Windows
sr, x = wavfile.read('test.wav')  # open the input file
y = engine.applyplugin(x)    ### how to do this?
wavfile.write('out.wav', sr, y) # write the output

ImportError: dynamic module does not define module export function (PyInit_librenderman)

Thanks for making this!

I installed boost-python, successfully built the XCode project, renamed the built file to remove the ".dylib", but when I run the "Does It Work?" check, I get...

$ python
Python 3.5.3 | packaged by conda-forge | (default, Feb 10 2017, 07:09:50) 
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import librenderman as rm
JUCE v5.2.0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dynamic module does not define module export function (PyInit_librenderman)
>>>

Any suggestions on how one might fix this?

In the current directory I have...

$ ls
librenderman.so

Running Mac OS X 10.13.3 (High Sierra), XCode 9.2, Python 3.5.2 (Anaconda)

API: how to send audio (input) to VST?

I downloaded a free compressor plugin and started modifying your example of the Dexed synth to use the compressor, and I could query all the parameters and their names, but then...

...I've been all through the code and docs, and I still can't figure it out: How does one send audio into the VST plugin?

I see several "get" routines in the source for RenderEngine.... but for a plugin like an echo or compressor ...how do I "put"?

Thanks!

(little screenshot of how far I got, LOL)
screen shot 2018-04-27 at 10 14 38 pm

Installing on arch linux

I was trying to compile project and had this:

lint@flintworkplace ~/RenderMan-master/Builds/LinuxMakefile % cd Builds/LinuxMakefile/
make
cd:cd:6: Haven't got such file in catalog: Builds/LinuxMakefile/
Compiling PatchGenerator.cpp
In file included from ../../JuceLibraryCode/modules/juce_graphics/juce_graphics.h:111,
                 from ../../JuceLibraryCode/modules/juce_audio_devices/juce_audio_devices.h:58,
                 from ../../Source/../JuceLibraryCode/JuceHeader.h:18,
                 from ../../Source/RenderEngine.h:22,
                 from ../../Source/PatchGenerator.h:14,
                 from ../../Source/PatchGenerator.cpp:11:
../../JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h: In function-member «juce::uint8& juce::PixelARGB::getAlpha()»:
../../JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h:114:77: error: invalid connection packing field «((juce::PixelARGB*)this)->juce::PixelARGB::<anonymous>.juce::PixelARGB::<unnamed union>::comps[3]» с «juce::uint8&» {aka «unsigned char&»}
  114 |     forcedinline uint8& getAlpha() noexcept           { return comps [indexA]; }
      |                                                                ~~~~~~~~~~~~~^
../../JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h:In function-member «juce::uint8& juce::PixelARGB::getRed()»:
../../JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h:115:77: error: invalid connection packing field «((juce::PixelARGB*)this)->juce::PixelARGB::<anonymous>.juce::PixelARGB::<unnamed union>::comps[2]» с «juce::uint8&» {aka «unsigned char&»}
  115 |     forcedinline uint8& getRed() noexcept             { return comps [indexR]; }
      |                                                                ~~~~~~~~~~~~~^
../../JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h: In function-member «juce::uint8& juce::PixelARGB::getGreen()»:
../../JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h:116:77: error: invalid connection packing field «((juce::PixelARGB*)this)->juce::PixelARGB::<anonymous>.juce::PixelARGB::<unnamed union>::comps[1]» с «juce::uint8&» {aka «unsigned char&»}
  116 |     forcedinline uint8& getGreen() noexcept           { return comps [indexG]; }
      |                                                                ~~~~~~~~~~~~~^
../../JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h: In function-member «juce::uint8& juce::PixelARGB::getBlue()»:
../../JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h:117:77: error: invalid connection packing field «((juce::PixelARGB*)this)->juce::PixelARGB::<anonymous>.juce::PixelARGB::<unnamed union>::comps[0]» с «juce::uint8&» {aka «unsigned char&»}
  117 |     forcedinline uint8& getBlue() noexcept            { return comps [indexB]; }
      |                                                                ~~~~~~~~~~~~~^
In file included from ../../JuceLibraryCode/modules/juce_graphics/juce_graphics.h:133,
                 from ../../JuceLibraryCode/modules/juce_audio_devices/juce_audio_devices.h:58,
                 from ../../Source/../JuceLibraryCode/JuceHeader.h:18,
                 from ../../Source/RenderEngine.h:22,
                 from ../../Source/PatchGenerator.h:14,
                 from ../../Source/PatchGenerator.cpp:11:
../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h: В конкретизации «void juce::RenderingHelpers::EdgeTableFillers::SolidColour<PixelType, replaceExisting>::replaceLine(juce::PixelRGB*, juce::PixelARGB, int) const [with PixelType = juce::PixelRGB; bool replaceExisting = true]»:
../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h:638:17:   требуемый из «void juce::RenderingHelpers::EdgeTableFillers::SolidColour<PixelType, replaceExisting>::handleEdgeTableLineFull(int, int) const [with PixelType = juce::PixelRGB; bool replaceExisting = true]»
../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h:1891:29:   требуемый из «void juce::RenderingHelpers::ClipRegions<SavedStateType>::RectangleListRegion::SubRectangleIterator::iterate(Renderer&) const [with Renderer = juce::RenderingHelpers::EdgeTableFillers::SolidColour<juce::PixelRGB, true>; SavedStateType = juce::RenderingHelpers::SoftwareRendererSavedState]»
../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h:1515:13:   требуемый из «void juce::RenderingHelpers::EdgeTableFillers::renderSolidFill(Iterator&, const juce::Image::BitmapData&, juce::PixelARGB, bool, DestPixelType*) [with Iterator = juce::RenderingHelpers::ClipRegions<juce::RenderingHelpers::SoftwareRendererSavedState>::RectangleListRegion::SubRectangleIterator; DestPixelType = juce::PixelRGB]»
../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h:2556:67:   требуемый из «void juce::RenderingHelpers::SoftwareRendererSavedState::fillWithSolidColour(IteratorType&, juce::PixelARGB, bool) const [with IteratorType = juce::RenderingHelpers::ClipRegions<juce::RenderingHelpers::SoftwareRendererSavedState>::RectangleListRegion::SubRectangleIterator]»
../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h:1816:13:   требуемый из «void juce::RenderingHelpers::ClipRegions<SavedStateType>::RectangleListRegion::fillRectWithColour(SavedStateType&, const juce::Rectangle<int>&, juce::PixelARGB, bool) const [with SavedStateType = juce::RenderingHelpers::SoftwareRendererSavedState]»
../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h:1813:14:   required from here
../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h:683:34: предупреждение: converting a packed «juce::PixelRGB» pointer (alignment 1) to a «int» pointer (alignment 4) may result in an unaligned pointer value [-Waddress-of-packed-member]
  683 |                             int* d = reinterpret_cast<int*> (dest);
      |                                  ^
In file included from ../../JuceLibraryCode/modules/juce_graphics/juce_graphics.h:111,
                 from ../../JuceLibraryCode/modules/juce_audio_devices/juce_audio_devices.h:58,
                 from ../../Source/../JuceLibraryCode/JuceHeader.h:18,
                 from ../../Source/RenderEngine.h:22,
                 from ../../Source/PatchGenerator.h:14,
                 from ../../Source/PatchGenerator.cpp:11:
../../JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h:362:17: замечание: defined here
  362 | class JUCE_API  PixelRGB
      |                 ^~~~~~~~
In file included from ../../JuceLibraryCode/modules/juce_graphics/juce_graphics.h:133,
                 from ../../JuceLibraryCode/modules/juce_audio_devices/juce_audio_devices.h:58,
                 from ../../Source/../JuceLibraryCode/JuceHeader.h:18,
                 from ../../Source/RenderEngine.h:22,
                 from ../../Source/PatchGenerator.h:14,
                 from ../../Source/PatchGenerator.cpp:11:
../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h: В конкретизации «void juce::RenderingHelpers::EdgeTableFillers::SolidColour<PixelType, replaceExisting>::replaceLine(juce::PixelRGB*, juce::PixelARGB, int) const [with PixelType = juce::PixelRGB; bool replaceExisting = false]»:
../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h:638:17:   требуемый из «void juce::RenderingHelpers::EdgeTableFillers::SolidColour<PixelType, replaceExisting>::handleEdgeTableLineFull(int, int) const [with PixelType = juce::PixelRGB; bool replaceExisting = false]»
../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h:1891:29:   требуемый из «void juce::RenderingHelpers::ClipRegions<SavedStateType>::RectangleListRegion::SubRectangleIterator::iterate(Renderer&) const [with Renderer = juce::RenderingHelpers::EdgeTableFillers::SolidColour<juce::PixelRGB, false>; SavedStateType = juce::RenderingHelpers::SoftwareRendererSavedState]»
../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h:1520:13:   требуемый из «void juce::RenderingHelpers::EdgeTableFillers::renderSolidFill(Iterator&, const juce::Image::BitmapData&, juce::PixelARGB, bool, DestPixelType*) [with Iterator = juce::RenderingHelpers::ClipRegions<juce::RenderingHelpers::SoftwareRendererSavedState>::RectangleListRegion::SubRectangleIterator; DestPixelType = juce::PixelRGB]»
../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h:2556:67:   требуемый из «void juce::RenderingHelpers::SoftwareRendererSavedState::fillWithSolidColour(IteratorType&, juce::PixelARGB, bool) const [with IteratorType = juce::RenderingHelpers::ClipRegions<juce::RenderingHelpers::SoftwareRendererSavedState>::RectangleListRegion::SubRectangleIterator]»
../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h:1816:13:   требуемый из «void juce::RenderingHelpers::ClipRegions<SavedStateType>::RectangleListRegion::fillRectWithColour(SavedStateType&, const juce::Rectangle<int>&, juce::PixelARGB, bool) const [with SavedStateType = juce::RenderingHelpers::SoftwareRendererSavedState]»
../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h:1813:14:   required from here
../../JuceLibraryCode/modules/juce_graphics/native/juce_RenderingHelpers.h:683:34: предупреждение: converting a packed «juce::PixelRGB» pointer (alignment 1) to a «int» pointer (alignment 4) may result in an unaligned pointer value [-Waddress-of-packed-member]
  683 |                             int* d = reinterpret_cast<int*> (dest);
      |                                  ^
In file included from ../../JuceLibraryCode/modules/juce_graphics/juce_graphics.h:111,
                 from ../../JuceLibraryCode/modules/juce_audio_devices/juce_audio_devices.h:58,
                 from ../../Source/../JuceLibraryCode/JuceHeader.h:18,
                 from ../../Source/RenderEngine.h:22,
                 from ../../Source/PatchGenerator.h:14,
                 from ../../Source/PatchGenerator.cpp:11:
../../JuceLibraryCode/modules/juce_graphics/colour/juce_PixelFormats.h:362:17: замечание: defined here
  362 | class JUCE_API  PixelRGB
      |                 ^~~~~~~~
make: *** [Makefile:128: build/intermediate/Debug/PatchGenerator_b3f3c974.o] 
Error 1

I translated some of the errors, so it could be not exactly the same

Can you add the following features..

I noticed you have a feature to list the input/output ports of a plugin, but it doesn't say which are input and which are output or which are midi and which are audio. (I think there's a third type too? Not sure what it is).. could you have it list those qualities?

I think you have a function to retrieve audio samples, but not to send in audio samples, i.e. for an effect plugin. Could you add that? Also a function to send midi commands.. and functions to send/receive whatever the third type of information is.

Could you make it work on Windows?

Could you add the capability of showing the plugins' UIs? Maybe in PyQt?

I want to program music in Python using RenderMan, that's why I'm requesting all these features..

If it's too much to ask for free, maybe I could pay you..

Thanks.

EDIT: added PyQt suggestion

Linux X server issue - using docker

When I load the plugin I get:
" Failed to connect the X server"

I'm using docker container. Ubuntu 16.04 + python2.7

I think that I'm very close to solve that issue.
Please let me know if you encountered that.

Thanks,
Or

Possible sound quality loss when using VST3 plugin

I have tested a bunch of plugins on Renderman, and I found the sound is different with which is generated in REAPER when I use VST3 plugin.

I am using Surge plugin https://github.com/surge-synthesizer/surge
The preset is INIT.

This is the spectrum of the audio exported by REAPER:
image

This is the spectrum of that generated by Renderman with the same plugin parameters:
image

it hears like the original audio go through a low-pass filter or something

Problems building on Mac OS

Hi, when I try to build Renderman on Mac OS Big Sur 11.6 from the xcode file, it does not work. I get the error "'base/source/baseiids.cpp' file not found". I installed boost and it worked properly. What software am I missing that is hindering the application from installing?

Compile on Ubuntu

flint@flintUbuntuWP:~/RenderMan-master/Builds/LinuxMakefile/build$ python
Python 3.6.8 (default, Oct  7 2019, 12:59:55) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import librenderman
JUCE v5.2.0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dynamic module does not define module export function (PyInit_librenderman)
>>> exit()
flint@flintUbuntuWP:~/RenderMan-master/Builds/LinuxMakefile/build$ python2
Python 2.7.15+ (default, Oct  7 2019, 17:39:04) 
[GCC 7.4.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import librenderman
JUCE v5.2.0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: dynamic module does not define init function (initlibrenderman)
>>> 

That's it. The same problem both on Py2 and Py3

Couldn't build on macOS

Since I couldn't get RenderMan to build on Windows or Ubuntu, I finally tried it on macOS. I get the error, 'boost/python.hpp' file not found. I've tried it on two different versions of macOS (11 and 12) with two different versions of xcode. I did run brew install Python on both.

Couldn't build on Windows

I already had c:\Boost, so I renamed it to c:\boost.2 and attempted to follow the instructions for building Boost. When running bootstrap.bat, I get an error:

C:\boost_1_74_0>bootstrap
Building Boost.Build engine

Failed to build Boost.Build engine.
Please consult bootstrap.log for further diagnostics.

The contents of bootstrap.log are:

LOCALAPPDATA=C:\Users\inhah\AppData\Local
Found with vswhere C:\Program Files\Microsoft Visual Studio\2022\Preview
###
### "Unknown toolset: vcunk"
###
### You can specify the toolset as the argument, i.e.:
###     .\build.bat msvc
###
### Toolsets supported by this script are: borland, como, gcc,
###     gcc-nocygwin, intel-win32, metrowerks, mingw,
###     vc12, vc14, vc141, vc142
###
### If you have Visual Studio 2017 installed you will need to either update
### the Visual Studio 2017 installer or run from VS 2017 Command Prompt
### as we where unable to detect your toolset installation.
###

So, I checked to see if the Boost I already had in c:\boost.2 was version 1.74, and it was, so I just renamed it to c:\Boost

Then I followed the rest of the instructions
I got 160 warnings and 6 errors.
The 6 errors are:

Error	C2872	'ssize_t': ambiguous symbol (compiling source file ..\..\Source\source.cpp)	RenderMan_DynamicLibrary	c:\program files (x86)\microsoft visual studio\shared\python37_64\include\pyport.h	84	
Error	C2872	'ssize_t': ambiguous symbol (compiling source file ..\..\Source\PatchGenerator.cpp)	RenderMan_DynamicLibrary	c:\program files (x86)\microsoft visual studio\shared\python37_64\include\pyport.h	84	
Error	C2872	'ssize_t': ambiguous symbol (compiling source file ..\..\Source\RenderEngine.cpp)	RenderMan_DynamicLibrary	c:\program files (x86)\microsoft visual studio\shared\python37_64\include\pyport.h	84	
Error	C1189	#error:  "Mixing a dll boost library with a static runtime is a really bad idea..." (compiling source file ..\..\Source\PatchGenerator.cpp)	RenderMan_DynamicLibrary	C:\Boost\include\boost-1_74\boost\config\auto_link.hpp	434	
Error	C1189	#error:  "Mixing a dll boost library with a static runtime is a really bad idea..." (compiling source file ..\..\Source\RenderEngine.cpp)	RenderMan_DynamicLibrary	C:\Boost\include\boost-1_74\boost\config\auto_link.hpp	434	
Error	C1189	#error:  "Mixing a dll boost library with a static runtime is a really bad idea..." (compiling source file ..\..\Source\source.cpp)	RenderMan_DynamicLibrary	C:\Boost\include\boost-1_74\boost\config\auto_link.hpp	434	

The full output with the warnings too is here: renderman errors.txt

One thing that may be important is that the first time I tried running bootstrap.bat, it started working, but I aborted it because it said it couldn't find some tools, so I figured I should install visual studio 14 and then run its vcvarsall.bat and then run bootstrap.bat again. I never got it to work again though. I even deleted the whole c:\boost_1_74_0 and extracted it again and tried again, still wouldn't work.

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.