Giter VIP home page Giter VIP logo

surge-synthesizer / surge Goto Github PK

View Code? Open in Web Editor NEW
2.9K 69.0 376.0 409.08 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%
synthesizer vst3 audio-units

surge's Introduction

Surge XT

If you are a musician looking to use Surge XT, please download the appropriate binary from our website. Surge Synth Team makes regular releases for all supported platforms.

CI: CI Build Status Release: Release Build Status Release-XT: Release-XT Build Status

Surge XT is a free and open-source hybrid synthesizer, originally written and sold as a commercial product by @kurasu/Claes Johanson at Vember Audio. In September 2018, Claes decided to release a partially completed version of Surge 1.6 under GPL3, and a group of developers have been improving it since. You can learn more about the team at https://surge-synth-team.org/ or connect with us on Discord .

If you would also like to participate in discussions, testing and design of Surge XT, we have details below and also in the contributors section of the Surge XT website.

This readme serves as the root of developer documentation for Surge XT.

Developing Surge XT

We welcome developers! Our workflow revolves around GitHub issues in this repository and conversations at our Discord server. You can read our developer guidelines in our developer guide document. If you want to contribute and are new to Git, we also have a Git How To, tailored at Surge XT development.

The developer guide also contains information about testing and debugging in particular hosts on particular platforms.

Surge XT uses CMake for all of its build-related tasks, and requires a set of free tools to build the synth. If you have a development environment set up, you almost definitely have what you need, but if not, please check out:

Once you have set your environment up, you need to checkout the Surge XT code with Git, grab submodules, run CMake to configure, then run CMake to build. Your IDE may support CMake (more on that below), but a reliable way to build Surge XT on all platforms is:

git clone https://github.com/surge-synthesizer/surge.git
cd surge
git submodule update --init --recursive
cmake -Bbuild
cmake --build build --config Release --target surge-staged-assets

This will build all the Surge XT binary assets in the directory build/surge_xt_products and is often enough of a formula to do a build.

Developing from your own fork

Our Git How To explains how we are using Git. If you want to develop from your own fork, please consult there, but the short version is (1) fork this project on GitHub and (2) clone your fork, rather than the main repo as described above. So press the Fork button here and then:

git clone [email protected]:youruserid/surge.git

and the rest of the steps are unchanged.

Building projects for your IDE

When you run the first CMake step, CMake will generate IDE-compatible files for you. On Windows, it will generate Visual Studio files. On Mac it will generate makefiles by default, but if you add the argument -GXcode you can get an XCode project if you want.

Surge XT developers regularly develop with all sorts of tools. CLion, Visual Studio, vim, emacs, VS Code, and many others can work properly with the software.

Building a VST2

Due to licensing restrictions, VST2 builds of Surge XT may not be redistributed. However, it is possible to build a VST2 of Surge XT for your own personal use. First, obtain a local copy of the VST2 SDK, and unzip it to a folder of your choice. Then set VST2SDK_DIR to point to that folder:

export VST2SDK_DIR="/your/path/to/VST2SDK"

or, in the Windows command prompt:

set VST2SDK_DIR=c:\path\to\VST2SDK

Finally, run CMake afresh and build the VST2 targets:

cmake -Bbuild_vst2
cmake --build build_vst2 --config Release --target surge-xt_VST --parallel 4
cmake --build build_vst2 --config Release --target surge-fx_VST --parallel 4

You will then have VST2 plugins in build_vst2/surge-xt_artefacts/Release/VST and build_vst2/surge-fx_artefacts/Release/VST respectively. Adjust the number of cores that will be used for building process by modifying the value of --parallel argument.

Building with support for ASIO

On Windows, building with ASIO is often preferred for Surge XT standalone, since it enables users to use the ASIO low-latency audio driver.

Unfortunately, due to licensing conflicts, binaries of Surge XT that are built with ASIO may not be redistributed. However, you can build Surge XT with ASIO for your own personal use, provided you do not redistribute those builds.

If you already have a copy of the ASIO SDK, simply set the following environment variable and you're good to go!

set ASIOSDK_DIR=c:\path\to\asio

If you DON'T have a copy of the ASIO SDK at hand, CMake can download it for you, and allow you to build with ASIO under your own personal license. To enable this functionality, run your CMake configuration command as follows:

cmake -Bbuild -DBUILD_USING_MY_ASIO_LICENSE=True

Building an LV2

Surge XT 1.3 family moves to JUCE 7, which includes support for LV2 builds. For a variety of reasons we don't build LV2 either by default or in our CI pipeline. You can activate the LV2 build in your environment by adding -DSURGE_BUILD_LV2=TRUE on your initial CMake build.

Building and Using the Python Bindings

Surge XT uses pybind to expose the innards of the synth to Python code for direct native access to all its features. This is a tool mostly useful for developers, and the surge-python repository shows some uses.

To use Surge XT in this manner, you need to build the Python extension. Here's how (this shows the result on Mac, but Windows and Linux are similar).

First, configure a build with Python bindings activated:

cmake -Bignore/bpy -DSURGE_BUILD_PYTHON_BINDINGS -DCMAKE_BUILD_TYPE=Release

Note the directory ignore/bpy could be anything you want. The ignore directory is handy, since it is ignored via .gitignore.

Then build the Python plugin:

cmake --build ignore/bpy --parallel --target surgepy

which should result in the Python .dll being present:

% ls ignore/bpy/src/surge-python/*so
ignore/bpy/src/surge-python/surgepy.cpython-311-darwin.so

Now you can finally start Python to load that. Here is an example interactive session, but it will work similarly in the tool of your choosing:

% python3
Python 3.11.4 (main, Jun 20 2023, 17:37:48) [Clang 14.0.0 (clang-1400.0.29.202)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.append("ignore/bpy/src/surge-python")
>>> import surgepy
>>> surgepy.getVersion()
'1.3.main.850bd53b'
>>> quit()

Building an Installer

The CMake target surge-xt-distribution builds an install image on your platform at the end of the build process. On Mac and Linux, the installer generator is built into the platform; on Windows, our CMake file uses NuGet to download InnoSetup, so you will need the nuget.exe CLI in your path.

Using CMake on the Command Line for More

We have a variety of other CMake options and targets which can allow you to develop and install Surge XT more easily.

Plugin Development

JUCE supports a mode where a plugin (AU, VST3, etc...) is copied to a local install area after a build. This is off by default with CMake, but you can turn it on with -DSURGE_COPY_AFTER_BUILD=True at cmake time. If you do this on Unixes, building the VST3 or AU targets will copy them to the appropriate local area (~/.vst3 on Linux, ~/Library/Audio/Plugins on Mac). On Windows it will attempt to install the VST3, so setting this option may require administrator privileges in your build environment.

CMake Install Targets (Linux and other non-Apple Unixes only)

On systems which are UNIX AND NOT APPLE, the CMake file provides an install target which will install all needed assets to the CMAKE_INSTALL_PREFIX. This means a complete install can be accomplished by:

cmake -Bignore/sxt -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr
cmake --build ignore/sxt --config Release --parallel 8
sudo cmake --install ignore/sxt

and you should get a working install in /usr/bin, /usr/share and /usr/lib.

Platform Specific Choices

Building 32- vs 64-bit on Windows

If you are building with Visual Studio 2019, use the -A flag in your CMake command to specify 32/64-bit:

# 64-bit
cmake -Bbuild -G"Visual Studio 16 2019" -A x64

# 32-bit
cmake -Bbuild32 -G"Visual Studio 16 2019" -A Win32

If you are using an older version of Visual Studio, you must specify your preference with your choice of CMake generator:

# 64-bit
cmake -Bbuild -G"Visual Studio 15 2017 Win64"

# 32-bit
cmake -Bbuild32 -G"Visual Studio 15 2017"

Building a Mac Fat Binary (ARM/Intel)

To build a fat binary on a Mac, simply add the following CMake argument to your initial CMake run:

-D"CMAKE_OSX_ARCHITECTURES=arm64;x86_64"

Building for Raspberry Pi

Surge XT builds natively on 64-bit Raspberry Pi operating systems. Install your compiler toolchain and run the standard CMake commands. Surge XT will not build on 32-bit Raspberry Pi systems, giving an error in Spring Reverb and elsewhere in DSP code. If you would like to work on fixing this, see the comment in CMakeLists.txt or drop us a line on our Discord or GitHub.

As of June 2023, though, gcc in some distributions has an apparent bug which generates a specious warning which we promote to an error. We found Surge XT compiles cleanly with gcc (Debian 10.2.1-6) 10.2.1 20210110, but not with others. Surge XT also compiles with Clang 11. The error in question takes the form:

/home/pi/Documents/github/surge/libs/sst/sst-filters/include/sst/filters/QuadFilterUnit_Impl.h:539:26: error: requested alignment 16 is larger than 8 [-Werror=attributes]
     int DTi alignas(16)[4], SEi alignas(16)[4];

If you get that error and are working on RPi, your options are:

  1. Change to a gcc version which doesn't mis-tag that as an error
  2. Use Clang instead of gcc, as detailed below
  3. Figure out how to suppress that error in CMake just for gcc on Raspberry Pi and send us a pull request

To build with Clang:

sudo apt install clang
cmake -Bignore/s13clang -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
cmake --build ignore/s13clang --target surge-xt_Standalone --parallel 3

Cross-compiling for aarch64

To cross-compile for aarch64, use the CMake Linux toolchain for aarch64, as shown in the Azure pipeline here:

cmake -Bignore/xc64 -DCMAKE_TOOLCHAIN_FILE=cmake/linux-aarch64-ubuntu-crosscompile-toolchain.cmake -DCMAKE_BUILD_TYPE=DEBUG -GNinja
cmake --build ignore/xc64 --config Debug --target surge-testrunner

Of course, that toolchain makes specific choices. You can make other choices as long as (1) you set the CMake variable LINUX_ON_ARM and (2) you make sure your host and your target compiler are both 64-bit.

Cross-compiling for macOS

Surge XT cross-compiles to macOS Intel from Linux and BSD.

  1. Install osxcross. Make sure to also install the libclang_rt library built by their build_compiler_rt.sh script.
  2. Configure and build Surge XT:
cmake -DCMAKE_TOOLCHAIN_FILE=cmake/x86_64-apple-darwin20.4-clang.cmake -DCMAKE_FIND_ROOT_PATH=<path_to_osxcross_sdk> -Bbuild
cmake --build build

Building older versions

Each version of Surge from 1.6 beta 6 or so has a branch in this repository. Just check it out and read the associated README.

Setting up for Your OS

Windows

You need to install the following:

macOS

To build on macOS, you need Xcode, Xcode Command Line Utilities, and CMake. Once you have installed Xcode from the App Store, the command line to install the Xcode Command Line Utilities is:

xcode-select --install

There are a variety of ways to install CMake. If you use homebrew, you can:

brew install cmake

Linux

Most Linux systems have CMake, Git and a modern C++ compiler installed. Make sure yours does. We test with most gccs older than 7 or so and clangs after 9 or 10. You will also need to install a set of dependencies. If you use apt, do:

sudo apt install build-essential libcairo-dev libxkbcommon-x11-dev libxkbcommon-dev libxcb-cursor-dev libxcb-keysyms1-dev libxcb-util-dev libxrandr-dev libxinerama-dev libxcursor-dev libasound2-dev libjack-jackd2-dev

You can find more info about Surge XT on Linux and other Unix-like distros in this document.

Continuous Integration

In addition to the build commands above, we use Azure pipelines for continuous integration. This means that each and every pull request will be automatically built across all our environment,and a clean build on all platforms is an obvious pre-requisite. If you have questions about our CI tools, don't hesitate to ask on our Discord server. We are grateful to Microsoft for providing Azure pipelines for free to the open-source community!

References

  • Most Surge XT-related conversation happens on the Surge Synthesizer Discord server. You can join via this link.
  • Discussion at KvR forum here.

surge's People

Contributors

abique avatar alexander-zyurkalov avatar andreya-autumn avatar asimilon avatar baconpaul avatar esaruoho avatar falktx avatar gnac avatar haenkel avatar itsmedavep avatar jarkkojs avatar jatinchowdhury18 avatar jpcima avatar k0rrid0r avatar kingston1 avatar kottv avatar kurasu avatar kzantow avatar mkruselj avatar mthierman avatar mvf avatar mx avatar narenratan avatar pkstone avatar rghvdberg avatar selenologist avatar tejas1993 avatar vincyzed avatar whydoubt avatar xenakios 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  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

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

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.

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

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.

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"
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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?

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.

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).

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

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.

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.

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.

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.

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

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.

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 **

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 :)

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.

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.

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.

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.

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.

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.

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.)

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 ?

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.

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

Mac binaries

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

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.

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.

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.