Giter VIP home page Giter VIP logo

surge-synthesizer / surge Goto Github PK

View Code? Open in Web Editor NEW
3.0K 3.0K 379.0 408.76 MB

Synthesizer plug-in (previously released as Vember Audio Surge)

Home Page: https://surge-synthesizer.github.io/

License: GNU General Public License v3.0

Shell 0.15% Inno Setup 0.12% C 51.92% C++ 44.97% PowerShell 0.02% Python 0.35% CMake 0.70% Perl 0.05% Jupyter Notebook 1.15% Lua 0.04% HTML 0.51% Dockerfile 0.01% Objective-C++ 0.01%
audio-units synthesizer vst3

surge's Issues

Surge-AU: GUI-less Parameter changing on macOS

now that @baconpaul got the AudioUnit running, I spent a bit of time yesterday fooling around with the GUI-less Surge.

after loading VmbA > Surge and trying to move some sliders, I'm getting no effect on the audio by moving the following:

screenshot_12_12_2018__9_00

so Macro Parameters and Global / FX parameters do not seem to affect the sound.
Maybe this is a case of needing the UI to enable something, but there's a start.

Luckily, Logic Pro X lets me hide these two chunks of nonfunctional sliders, after which I'm presented with:

screenshot_12_12_2018__9_02

Now, these are more responsive. The following work

Scene A Common:

  • Pitch
  • Portamento
  • FM Depth
  • Noise Color
  • Volume
  • Pan
  • Width
  • FX1 Send
  • FX2 Send
  • Gain
  • Feedback
  • Filter Balance
  • High Pass
  • Waveshaper Drive

Scene A Osc:

  • Osc1 Pitch
  • Osc1 Shape
  • Osc1 Width
  • Osc1 Sub Width
  • Osc1 Sub Level
  • Osc1 Sync
  • Osc1 Uni Spread
  • Osc2 Pitch
  • Osc2 Shape
  • Osc2 Width
  • Osc2 Sub Width
  • Osc2 Sub Level
  • Osc2 Sync
  • Osc2 Uni Spread
  • Osc3 Pitch
  • Osc3 Shape
  • Osc3 Width
  • Osc3 Sub Width
  • Osc3 Sub Level
  • Osc3 Sync
  • Osc3 Uni Spread

.. That's one page more page down, more to go..

screenshot_12_12_2018__9_07

Out of these, a couple work:
Scene A Osc Mixer

  • Osc1 Level
  • Osc2 Level
  • Osc3 Level
  • Ring Level 1x2
  • Ring Level 2x3
  • Noise Level
  • Pre-Filter Gain

Scene A Filters:

  • F1 Cutoff
  • F1 Resonance
  • F1 Envmod
  • F2 Cutoff
  • F2 Resonance
  • F2 Envmod

Scene A Envelopes:

  • AEG Attack
  • AEG Decay
  • AEG Sustain
  • AEG Release
  • FEG Attack
  • FEG Decay
  • FEG Sustain
  • FEG Release

Scene A LFOs

  • LFO1 Rate
  • LFO1 Magnitude
  • LFO2 Rate
  • LFO2 Magnitude
  • LFO3 Rate
  • LFO3 Magnitude
  • LFO4 Rate
  • LFO4 Magnitude
  • LFO5 Rate
  • LFO5 Magnitude
  • LFO6 Rate
  • LFO6 Magnitude

and after that, we're left with these guys:
screenshot_12_12_2018__9_13

Looks like "Scene B" is MIA/DOA or needs some sort of button to enable.

Looking at these results, we're definitely on the way, but maybe there's something that needs to be toggled ON, for Filters, LFO, FX, Filter Envelopes, OSC2 & OSC3 to work.

Your thoughts, @kurasu ? Do most of these need to be "toggled ON" to work?

For the sake of my own memory, this is what Surge looks like:
kvr__surge_by_vember_audio_-_synth__hybrid__vst_plugin__audio_units_plugin_and_vst_3_plugin

Doesn't compile on xcode 9.4.1

Hi,

I was not able to compile the VST3 version using High Sierra and XCode 9.4.1 so far, since I ran into multiple issues. Surely it is because I have no idea what I am doing :)

  • Patched build-osx.sh to use premake5 instead premake4
  • Some strange header include errors, fixed by using "always search user paths"
  • Then libc++ problems with the math calls, "filesystem" not found.Adding header path "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/" did not work

Useless byte order conversions

Example: vt_write_int32BE('sub3');". This works if the compiler has right semantics but could be just as well truncate (e.g. just take 's'). No well defined semantice in C++ standard AFAIK.

Everything is basically wrong there. You could define byte arrays that have the data already in correct byte order (i.e. big endian in the example) and have named costants for them (e.g. SUB32_BE). In addition fixing the compiler warnings that gives a minor performance improvement as you don't end up doing useless byte order conversions constantly...

And that would also be fully cross platform, works both little and big endian hardware platforms.

Compiling with Xcode 10.1

So, I started with these:

  • Grab premake5 from https://premake.github.io .
  • Copy premake5 to /usr/local/bin/premake5
  • Clone the Surge repo by typing git clone https://github.com/kurasu/surge.git
  • Get all submodules git submodule update --init --recursive
  • Boot up Xcode and open, indexes, processes.
  • Click on Update to recommended settings for surge-au -> Choose Perform Changes
  • Click on Update to recommended settings for surge-vst2 -> Choose Perform Changes
  • Click on Update to recommended settings for surge-vst3 -> Choose Perform Changes

After this, Xcode says:

surge-vst2 pluginterfaces/vst2.x/aeffect.h file not found

surge-vst3 Use of undeclared identifier 'kHorizontal' in SurgePatch.app (and Apple Clang error, too many errors emitted, stopping now)`

surge-au plugin.h file not found (called by aulayer.h, in file aulayer_presets.cpp:1:. (isolated to #34 )

however, at least we're up and running, somewhat.

How do I fix these issues, please? These don't seem to be referenced in #3 so please don't close this ticket, please, @kurasu :)

No GUI with VST2 on Ableton Live 9.7

I installed Surge with the windows binary from the release page here. When I put the plugin on a midi track in the ableton live, it's loaded, it makes sound and I can even access the parameter list, but there's no Plug-in Edit button for opening the GUI. I assume that ableton sees Surge as a GUIless plugin.

  • OS: Windows 10
  • Host: Ableton Live
  • Version: 9.7.7

I tested it on other hosts that I can get my hands on (Reaper 5, Studio One 3) and there was no problem.

(FYI, I couldn't find any option for selecting the vst plugin folder path during the installation, and it took me a while to find out that the dll was installed on the folder C:\Program Files\Common Files\VST2. I just copied the file to my designated folder and all is good, but I think that the installer can get more polished.)

Portable mode ?

Right now all files but the dll are stored in local appdata, which imho is not clean and adds complexity, fi when making backups or moving to another pc.
Would be nice to have the option to have the "surge" folder alongside with the dll (maybe the dll could detect that folder when its present and use that instead of appdata).

Cheers

Linux: VST2 plugin almost takes down the machine

The VST2 plugin loads now but I get a flood of these when I try to activate it:

Renoise Plugin Server LOG> VstPlugs: Caught exception in VSTPlug::ParameterValue
Implement me, probably

And then Renoise eats up almost all resource of my machine and I have to kill the process.

Not recognised on Ableton 8

I tried the 3 releases of the installer, both vst2 and vst3, tried to re-start the computer, but none of them are displayed on my Ableton 8, windows 8, I'm so disapointed, any ideas to make it work ?

surge-au: funknown.h/smartpointer.h/coreiids.cpp/iupdatehandler.h reference pluginterfaces/base/ how to fix?

Four files within the vst3sdk/pluginterfaces/base folder try to include files in the subfolder pluginterfaces/base ( so basically referencing vst3sdk/pluginterfaces/base/pluginterfaces/base ).

The files in question are the following:

funknown.h references

#include "pluginterfaces/base/fplatform.h"
#include "pluginterfaces/base/ftypes.h"
#include "pluginterfaces/base/smartpointer.h"

smartpointer.h references

#include "pluginterfaces/base/fplatform.h"

coreiids.cpp references

#include "pluginterfaces/base/funknown.h"
#include "pluginterfaces/base/iupdatehandler.h"
#include "pluginterfaces/base/icloneable.h"
#include "pluginterfaces/base/ibstream.h"

iupdatehandler.h references

#include "pluginterfaces/base/funknown.h"

All these issues "seem to get fixed" by removing pluginterfaces/base/ from the include.
but how does something like this get fixed in the repo however?

48972267-9fcde480-f02f-11e8-830b-0f65261d66e3

In file included from /Users/esaruoho/work/surge/vst3sdk/pluginterfaces/base/funknown.cpp:17:
/Users/esaruoho/work/surge/vst3sdk/pluginterfaces/base/funknown.h:19:10: fatal error: 'pluginterfaces/base/fplatform.h' file not found
#include "pluginterfaces/base/fplatform.h"
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

VST3-Win: MIDI control issues

I discovered this gem when it became open source, and now I'm exploring it.

I can't seem to control Surge with my Nektar controller. The pitch of the keyboard works fine but nothing else: not velocity, pitch bend, mod wheel or any other fader or knob.

iPhone has denied to launch the app

Hello

I'm new at iOS development so far. For now, i'm using Xcode 10.1 on MacBook Air'13 with apple developer id and iOS 12.1 on iPhone7. App is crashing when it is launched and displays the message "iPhone has denied to launch the app."

Previously i was using macOS High Sierra but now when I've updated to Mojave 10.14.1 and reinstalled Xcode 10.1, it's still showing the same error.
Moreover, I've tried all the other solutions available on Google but nothing is worth it!
Is there any way to cope with this problem?

surge-au: Implicit conversion loses integer precision

Getting this Value Conversion issue on surge-au/libs/xml/tinyxmlparser.cpp line 928, with the bit of code saying

int tagIndex = tag->length();

shooting

Implicit conversion loses integer precision: 'std::__1::basic_string<char, 
std::__1::char_traits<char>, std::__1::allocator<char> >::size_type' (aka
 'unsigned long') to 'int')

tinyxmlparser_cpp

Wavetable right click menu doesn't work

Describe the bug
No context menu (containing all the wavetables for easy selection) is shown when right-clicking the wavetable name.

To Reproduce
Steps to reproduce the behavior:

  1. Right-click on the wavetable name.

Expected behavior
Right clicking the wavetable name should open a context menu with all the wavetables.

Desktop (please complete the following information):

  • OS: Windows 7
  • Host: FL Studio 12
  • Version: 12.0.5

Additional context
Context menu doesn't work in VSTHost either. Switching via the tiny arrows works though.

Win32 build possible, but has bugs

I was able to build the VST2 for Win32/x86 in VS2017, but it exhibits glitches with some presets, most notably "Polysynth - FM Poly 1".

Steps to reproduce the behavior:

  1. Use VS2017 Configuration Manager to add the Win32 platform, then build the 32-bit VST2.
  2. Open 32-bit VST2 in a 32-bit VST host (I used Hermann Seib's VSTHost).
  3. Select preset "Polysynth - Embrass" and play lots of notes
  4. Select preset "Polysynth - FM Poly 1" and play just two notes legato - second one will glitch.

This does NOT happen with the 64-bit build. There may be an underlying bug which mainly manifests in the 32-bit version for some reason.

std::filesystem stub on macOS returns . and .. in directory iteration

So std::filesystem isn't on Xcode 10 and the surge has a stubbed out implementation. I fixed a few bugs to get things running but directory iteration still returns "." and ".." in a way which leads to it showing up in menus.

screen shot 2018-12-14 at 3 00 06 pm

screen shot 2018-12-14 at 3 01 52 pm

So the trick is to filter appropriately in the hand crafted mac only directory iterator.

Remove VST 2.x SDK files

The repository includes a submodule to the VST 2.x SDK files, which is not allowed.
See the license in the header:

// This Software Development Kit may not be distributed in parts or its entirety
// without prior written agreement by Steinberg Media Technologies GmbH.

VST does not load with Linux version of Renoise

I launch Renoise like this:

VST_PATH=$PWD renoise

And get this to the terminal when doing rescanning plugins:

Renoise LOG> VstPlugs: Instantiate FAILED (failed to open the DLL: '<XXX>/target/vst2/Release/Surge.so: undefined symbol: _ZN6VSTGUI8soHandleE') !!!

With a tool such as nm it is easy to define that, yes, it is an undefined symbol. It is also a symbol that is unused by the plugin, which can be easily deduced with git grep.

Make Linux build

Thanks for DAW's like Ardour, Renoise, Bitwig and or Tracktion - Linux made its mark in the music world. Many plugin vendors did start already porting their products (check U-HE for example).

It would be great to have Linux build of this synth,

Context menus doesn't work

Describe the bug
Context menus doesn't work

To Reproduce
Steps to reproduce the behavior:

  1. Right click a slider

Expected behavior
A menu

Linux support (patch)

I see there's a bit of activity here. Any objections to merge this one?
kmatheussen@d144305

It compiles now, but I get some linking errors. It might work just to use a newer version of VSTGUI or gtkmm than I did, but I don't have time right now. Getting it in probably reduces work of others working later.
I renamed endian.h because the compiler included a system header called "endian.h" instead of this one.

missing files: vstgui_mac.mm, vstsinglecomponenteffect.cpp, vstgui_uidescription_mac.mm

Hi guys, how do I find these files?

error: Build input file cannot be found:
'surge/vst3sdk/vstgui4/vstgui/vstgui_mac.mm'

** BUILD FAILED **

error: Build input file cannot be found:
'surge/vst3sdk/public.sdk/source/vst/vstsinglecomponenteffect.cpp'

** BUILD FAILED **

error: Build input file cannot be found:
'surge/vst3sdk/vstgui4/vstgui/vstgui_uidescription_mac.mm'

** BUILD FAILED **

KVR Audio form is not open for new accounts

"An error occurred! To register a new account at KVR Audio please contact us with your username and email address and we'll check it out."

I.e. README.md should include instructions how to contact KVR Audio. Otherwise, it is impossible to create an account and participate to the development discussions.

Create the CocoaUI rather than CarbonUI for the audio unit

Following the work in #58 and the subsequent pull request in #59 I can build an audio unit on my mac which opens in logic and plays sounds and switches between presets, but has no UI. That's all in that PR or you can get it on the @baconpaul fork of Surge on branch au-build.

So I have done a branch off of that branch to get the ui working, called au-build-ui. It contains all of au-build (so makes a working plugin) but also starts including the work to go from carbon to cocoa. As of now, it has the hooks to successfully have the AUVal tool ask for a cocoa UI, and then when it asks for the UI, enter objective c code, do something with the cocoa runtime (in this case, leak an NSURL), fprintf to stderr, and then go on its way with no UI. You know, small steps. But premake5.lua generates the Xcode to include the objective C and the two interoperate and link and run, so I should be, in theory, off to the races to bounce back and forth.

My basic plan of attack now I have this working is to figure out how vstgui and nsview interact using some combination of the vst sdk source, a worked example in a juce plugin, and a few other places. I hope, have the vstgui stuff all work "eventually" using the subclass trick that's already in the SurgeGUIWhatzit class. I'll keep notes here as well as a record of what I did if anything works or if I have anything working. But if someone reading this has done what I'm about to try before, please do let me know! And if you actually know how to do this, aulayer_cocoaui.mm in src/au on that branch is the place to be.

Finally if maintainers don't want me keeping record of how I got this thing working in GitHub issues please do just let me know. Apologies if the intermediate steps are too spammy.

It doesn't install the .dll surge file

Thank you for this good synth! It is not copyed nor installed any vst file. I don't find it, in any site of the disk. Please your help.

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. windows 10]
  • Host [e.g. bitwig, logic]
  • Version [e.g. 2.4]

Additional context
Add any other context about the problem here.

MPE doesn't work correctly

Describe the bug

Seems like the channels doesn't work (it needs to bypass the channel mechanism in this mode) and the pitch-bend range doesn't get set properly either

Mac binaries

Hello, what about mac version? I looking forward for it. TNX.

Support and optimization for recent CPU instruction sets

As this synth is last updated around 2008 or 09-ish (I don't know when version 1.5.1a was released), the code must have been dated for use with processors that are in the retail market at that time, and might not play nice with today's processors like AMD's Ryzen series (in market since early 2017), as well as Intel's recent seventh and eighth generation Core i3/5/7/9 processors.

We need to optimize the code in order to ensure that the synth will work perfectly with modern processors.

The synth's underlying code will need to be modified or (if necessary) rewritten, in order to take full advantage of new CPU instruction sets found in recent processors (including AVX2, AVX512, BMI1 and BMI2).

Vector assets and multi-scale bitmaps for the GUI, leading to zoom.

Hello,
I'm less of a programmer, more a designer. I would love to give Surge a new look, but besides the bitmaps, there aren't any resources. Could you please provide the SVG files (or optionally the PSD, but since I'm working with Affinity designer this would not be ideal) for it and maybe point out how to change the GUI within the code?

Currently, I've loaded all bitmaps into one .afdesign file, but I have to stick to the original proportions.

Have a nice one,
Leo

Any chance of MIT-style license?

Use of GPL3 means no one can ever use any of this code in a closed-source application. Does Steinberg's new "dual license" permit no alternative? This code could be more widely usable if at least some of it -- at least the parts which don't depend on the VST SDK -- could be governed by a less-restrictive license such as MIT or BSD.

Getting Audio Unit to link on macos

Hi!

So I just got the audio unit code to link on macOS. Don't have it packaged but have it linking. There are a few larger things I had to do to do this.

The code I have isn't really mergeable yet I don't think. (I did some radical things like remove the VST target in my premake for now for instance). And I have no idea if it works. But if you want to see what I did the whole thing is pushed on this fork (https://github.com/baconpaul/surge/tree/au-build) and you can just check that out by cloning my fork and hopping on to branch au-build.

There's a few bit things which were wrong in addition to the minor bits and bobs I already put in other issues (like the OBJC_PROTOTYPE and the missing header I did a PR for). The amounted to 2 enormous things

  • In order to build an AU V2 you need the AUPublic and PublicUtility code from the audio toolkit available. This is actually referenced in the premake5.lua (look https://github.com/kurasu/surge/blob/c6ad95dfa051649f5647b0064fe8b0548680c08a/premake5.lua#L460 at that line) but the source wasn't in lib. The source actually isn't all that easy to find but luckily other GitHub projects have it included so I did the following

  • So great now we have all the code we need to build an AUV2. But the other problem was that class names had changed since src/au too today. So go through and replace all the sub3_synth with SurgeSynthesizer and all the names_like_this with namesLikeThis, comment out one place I couldn't figure out in presets for a link error and put in a fix me, and

voila! A linking surge-au.

So anyway I'll keep picking on this some but if others are working I thought they may want to know how close I got and look at the code in my branch.

Hope this is helpful. Welcome all comments.

Could we get a GUI scaler / zoom?

Surge is great and incredibly powerful, but I hate squinting!
It would be really nice if there was an option to resize the GUI, to make labels easier to read and to make it a bit easier to click the right areas during live situations. The best example I can think of off the top of my head is Serum, which allows you to set the GUI scale anywhere from 50% to 400%.

Doesn't have to look smooth or pretty, simple nearest-neighbor pixel doubling (quadrupling, octupling, etc) would be fine for those of us with high resolutions but whose monitors are far away from our performance hardware.

Coding style

At the moment the code base is filled with a chaotic set of coding conventions. It would be good to have a well defined coding to which new commits would compared against. This would also make the patch review process more lean.

In order to move fast with this I would recommend to use some well defined style known to work in cross-platform projects e.g. https://webkit.org/code-style-guidelines. We could start for example with WebKit conventions and refine as we go.

Naturally, the existing code is how it is but this would be the convention for all future changes.

Other things to consider: the subset of C++ used (and related things like RTTI, most projects that aim for maximum portability do not use RTTI), external dependencies (are these allowed or not and in which circumstances) etc.

Add support for Note Expressions

Should allow for per-voice control of

  • Pitch
  • Timbre
  • Pressure
  • Volume
  • Pan

Compatible hosts (at the moment) would be Cubase and Bitwig.

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.