Coder Social home page Coder Social logo

jpcima / string-machine Goto Github PK

View Code? Open in Web Editor NEW
55.0 8.0 7.0 730 KB

Digital model of electronic string ensemble instrument

License: Boost Software License 1.0

Makefile 1.45% C 0.72% C++ 93.05% Shell 0.83% SourcePawn 3.02% Faust 0.53% CMake 0.40%
musical-instrument synthesizer solina eminent virtual-analog lv2-plugin vst-plugin dpf faust

string-machine's Introduction

string-machine

This is a virtual-analog string ensemble synthesizer.

This implementation is based on a digital model designed by Peter Whiting. The improvement of the model adds various abilities, in particular a virtual-analog emulation of the bucket brigade delay circuit.

Contributors

Thanks to many persons who contribute to improve this project.

  • S. M. "sm7x7" for providing presets
  • Nicolas Faure "sub26nico", Erwan Lerale "r1" and Éric Forgeot "farvardin" for testing and feedback
  • Olivier Humbert "trebmuh" for creating packages and redistributing

Download

Get from Open Build Service.

Change log

0.1.1 (dev)

This release breaks backwards compatibility.

  • envelope generator fixed, rewritten as exponential AHDSR
  • adjusted the value domain of controls to be more useful: detune, shape filters
  • fixed computation errors regarding the filters
  • implemented the bucket brigade delay
  • provided two switchable chorus models, digital and BBD
  • provided the Solina chorus as independent plugins, 1-in 2-out and 2-in 2-out
  • supported dynamic changes of sample rate
  • added support of MIDI controllers: volume, pan, expression

0.1.0

  • initial release

Build instructions

  1. Obtain prerequisites

Install needed packages:

  • git
  • build-essential
  • pkg-config
  • libx11-dev
  • libgl-dev
  • libcairo2-dev
  1. Check out the repository and submodules
git clone https://github.com/jpcima/string-machine.git
cd string-machine
git submodule update --init
  1. Compile
make
  1. Install

To perform a system-wide installation:

sudo make install

Or, to install only for the current user:

make install-user

string-machine's People

Contributors

jpcima avatar trebmuh 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

string-machine's Issues

Limit polyphony

I should introduce a polyphony limit such that CPU can be bounded, and prevent x-running on more limited hardware.

This should be allowed with a parameter in integer range.
[1-32] is reasonable.

Request - Presets

First : Thanks for this VST !

I see that there is a Preset section and some presets available in the source tree but I can't see them either in Carla or Ardour ?
Is there something I'm missing ?

Faust benchmark

Below are some measures of output throughput with faust bench.cpp. (GCC)

  • fast-math is able to get a performance increase most of times
  • vec is almost always a massive decrease

Edit: the data is a measure of throughput, which means higher = better.

Delay3PhaseDigital
LFO3PhaseDual
NoiseLFO
PwmOscillator
StringFiltersHighshelf

Strange envelope behaviour

I'm not sure, whether this is intentional, but I'm experiencing strange behaviour of the ADSR envelope:

  • The attack is still very slow at the lowest settings.
  • If the sustain is 0 and decay > 0 and attack is 0, there is no sound, even when the decay is increased.
  • Generally the envelope settings react in unexpected ways, which I haven't fully grasped yet.

Is this supposed to behave like a standard ADSR? I had a short look at the source code and AFAICS it doesn't mention any intended special behaviour.

Oscillator waveshaper aka "enhancer"

There exists an "enhance" setting which permits to set a bias prior to a clipping diode circuit.
It will allow to pass a part of the negative signal from the output of the "differentiated square" oscillator.

Got the LV2 URI wrong

Following the compatibility break in the dev version, it needs to update plugin URI.
I want to append -mk2 as a prefix. (URL http://jpcima.sdf1.org/lv2/string-machine-mk2)

Problem: I thought to have done this in source, but mistook the variable, and instead I changed homepage.

Location of problem:

#define DISTRHO_PLUGIN_HOMEPAGE "https://github.com/jpcima/string-machine-mk2"

The chorus creates gating effect

Using v0.1.0-125-g7050cb1

The chorus on the string seems to create a gating effect, or a clipping effect. The strings by themselves sound ok. If the string machine is fed into a separate chorus with a high enough dry level, it sounds a lot better.

First MIDI note sticky in Zynthian MIDI player

Observed by two persons in Zynthian community:

Topic: https://discourse.zynthian.org/t/any-lv2-arp-solina-roland-rs-type-string-machines-solved/3627

The one strange new behavior I noted was that when running the Zynthian MIDI file player, the first note would stick as though no note off had been sent. When stuck notes were cleared with a Panic, all subsequent notes from the player seemed to hit their note-off events just fine. Stuck notes were not happening with the previous build.

Crash in Reaper on stopping and resuming midi track

@sub26nico:

jpcima, j'ai un bogue avec string-machine (VST) qui fait planter Reaper : si je charge string-machine dans une piste MIDI, quand je lance la lecture, ça fonctionne. Je stoppe puis relance la lecture et là, ça freeze l'IU de Reaper qui me dit 'Buffering' là où d'habitude il signale play ou record ou stop selon la situation
le terminal ne dit rien...
aucun souci dans Ardour avec le vst ou le lv2

Build failed (missing pugl)

tried running make and it failed

make -C dpf/dgl ../build/libdgl-cairo.a
make[1]: Entering directory '/home/reed/Desktop/string-machine/dpf/dgl'
Compiling src/ApplicationPrivateData.cpp
In file included from src/ApplicationPrivateData.cpp:20:
src/pugl.hpp:44:10: fatal error: pugl-upstream/include/pugl/pugl.h: No such file or directory
   44 | #include "pugl-upstream/include/pugl/pugl.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [Makefile:180: ../build/dgl/ApplicationPrivateData.cpp.o] Error 1
make[1]: Leaving directory '/home/reed/Desktop/string-machine/dpf/dgl'
make: *** [Makefile:26: dgl] Error 2

I already have libpugl-dev installed. Using Ubuntu 22.04.

String phaser

Since the string synthesizer is so commonly paired with the EHX small stone phaser, it will be interesting if this embeds its own analog phaser effect.
More so if the phaser is made compatible with stereo, to connect in series with the chorus.

This code implements a vintage phaser. Phase100.dsp.txt

Kiiski, R., Esqueda, F., & Välimäki, V. (2016).
Time-variant gray-box modeling of a phaser pedal.
In 19th International Conference on Digital Audio Effects (DAFx-16).

It's a 10-stage and quite different from the desired phaser; but the reference paper gives a method to extract modulation from any phaser.
It will serve if a volunteer owner of small stone or similar wants to contribute some measurements.

Completing the model

I've quickly checked the model against Solina schematics, identified major lacking elements.
(answering also @farvardin on completeness of implementation)

In the original, the 4' and 8' sections are known as violin and viola respectively.

  1. missing: brass section (trumpet/horn)
    It's needed to identify what does the formant circuit folllowing the oscillator.
    It has a set of switches which seem to affect a characteristic of a filter.
    Capture du 2019-07-15 19-18-01

  2. missing: bass section
    It's cello and contrabass, and it has a more complex circuitry, of which I'm not fully sure how it fits in the model.
    It's made from various parts: low-tone selection, clipper, trigger suppression, bass sustain, and low-pass filter

Capture du 2019-07-15 19-26-22
Capture du 2019-07-15 19-27-10

Add scaling

Hi!

Thanks for the plugin!

I play with it on Linux connected to 4K monitor with 200% desktop environment scaling. The string-machine UI looks to tiny to deal with without magnifying glass (but sounding is appealing!). Please, add opportunity to scale UI up.

Raspberry pi build fail

cannot compile due to compile options -msse -msse2

root@zynthian:/media/usb/Develop/string-machine# make
make -C dpf/dgl ../build/libdgl-cairo.a
make[1]: Entering directory '/media/usb0/Develop/string-machine/dpf/dgl'
Compiling src/Application.cpp
g++: error: unrecognized command line option ‘-msse’; did you mean ‘-fdse’?
g++: error: unrecognized command line option ‘-msse2’

Include version number in source code

Hi there, thanks for this awesome plugin. I had been hoping for a release of a good Open Source string machine plugin for a long time.

I'm in the process of packaging the plugin for the Arch User Repository. I'll do a package for the release version (0.1.0) and a VCS package, which always compiles the latest state of the Git repo. For the latter it would be helpful, if the version number of the software was included somewhere in the sources. so my PKGBUILD can extract it.

The obvious place would be the #define on line 8 of plugins/string-machine/DistrhoPluginInfo.h, e.g.:

#define DISTRHO_PLUGIN_VERSION         0,1,0

Also, an "install" target in the Makefile would be nice, but I guess that should be raised as an issue with DPF.

"Canvas does not allow drawing" error on Windows

When I open string machine's GUI (VST2) on hosts like REAPER and MidiPlayer6, the GUI will crash occasionally. At this time, the host UI may crash altogether.

On MidiPlayer6, it gives me those errors:

屏幕截图 2022-11-04 155319
屏幕截图 2022-11-04 155252
屏幕截图 2022-11-04 155230

(Notice the font in the third image, which only appears on critical UI rendering issues.)

Analog delay compander

Huovilainen, Antti. "Enhanced digital models for analog modulation effects." Proc. Int. Conf. Digital Audio Effects (DAFx-05), Madrid, Spain. 2005.

See 5.2

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.