Giter VIP home page Giter VIP logo

os-251's Introduction

OS-251

OS-251 is a synthesizer plugin (vst3, au) made with C++ , JUCE and react-juce.

Download

You can down load pre-built binaries from release.

Development

Build

  • Download the codes

    git clone --recursive https://github.com/utokusa/OS-251
  • Build the UI (Node.js and react-juce) Use Node.js version 14.

    cd ./src/jsui
    npm ci
    npm run build
  • Build the body of the plugin (C++)

    You can build it using CMake.

Lint

Lint checking for both C++ and Node.js is available. For C++, we use clang-format 11. See details by running ./lint.sh -h.

Code completion

Use clangd for code completion or go-to-definition. compile_commands.json (it's necessary for clangd) is automatically generated when you build OS-251. Use ./run_compdb.sh -h if you want to add header information to compile_commands.json.

os-251's People

Contributors

dependabot[bot] avatar utokusa 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

os-251's Issues

Can't compile with -ffast-math option

It makes DSP faster, but cannot be used now.

#15 (comment)

One further note: compiling with -ffast-math is disallowed by react_juce:
51%] Building CXX object src/CMakeFiles/Os251.dir/__/lib/react-juce/react_juce/react_juce.cpp.o In file included from /media/shcd/dev/OS-251/lib/react-juce/react_juce/./duktape/src-noline/duktape.h:195, from /media/shcd/dev/OS-251/lib/react-juce/react_juce/./duktape/src-noline/duktape.c:188, from /media/shcd/dev/OS-251/lib/react-juce/react_juce/core/EcmascriptEngine.cpp:67, from /media/shcd/dev/OS-251/lib/react-juce/react_juce/react_juce.cpp:78: /media/shcd/dev/OS-251/lib/react-juce/react_juce/./duktape/src-noline/duk_config.h:2861:2: error: #error FAST_MATH defined, refusing to compile
which is a bit a pity as it typically speed up the DSP considerably...

Maybe I can try to use Hermes instead of Duktape

[REQ] Add Discussions section to share presets created by users

As per title, if you like the idea :). I really like the OSC on this one, having no presets it would help users to create a sound library fast. I know it's not really an issue, but there is no other place to request it (or at least I can't find it).

Fails to compile with GCC 11.1.0 unless `-DCMAKE_CXX_STANDARD=20` is used

次のファイルから読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.cc:15:
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h: 関数 ‘typename std::vector<T>::iterator benchmark::internal::AddPowers(std::vector<T>*, T, T, int)’ 内:
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:22:30: エラー: ‘numeric_limits’ is not a member of ‘std’
   22 |   static const T kmax = std::numeric_limits<T>::max();
      |                              ^~~~~~~~~~~~~~
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:22:46: エラー: expected primary-expression before ‘>’ token
   22 |   static const T kmax = std::numeric_limits<T>::max();
      |                                              ^
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:22:49: エラー: ‘::max’ has not been declared; did you mean ‘std::max’?
   22 |   static const T kmax = std::numeric_limits<T>::max();
      |                                                 ^~~
      |                                                 std::max
次のファイルから読み込み:  /usr/include/c++/11.1.0/algorithm:62,
         次から読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:172,
         次から読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/internal_macros.h:4,
         次から読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/check.h:8,
         次から読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:6,
         次から読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.cc:15:
/usr/include/c++/11.1.0/bits/stl_algo.h:3467:5: 備考: ‘std::max’ declared here
 3467 |     max(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
次のファイルから読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:6,
         次から読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.cc:15:
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h: 関数 ‘void benchmark::internal::AddNegatedPowers(std::vector<T>*, T, T, int)’ 内:
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:40:21: エラー: ‘numeric_limits’ is not a member of ‘std’
   40 |   CHECK_GT(lo, std::numeric_limits<T>::min());
      |                     ^~~~~~~~~~~~~~
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/check.h:58:4: 備考: in definition of macro ‘CHECK’
   58 |   (b ? ::benchmark::internal::GetNullLogInstance()                           \
      |    ^
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:40:3: 備考: in expansion of macro ‘CHECK_GT’
   40 |   CHECK_GT(lo, std::numeric_limits<T>::min());
      |   ^~~~~~~~
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:40:37: エラー: expected primary-expression before ‘>’ token
   40 |   CHECK_GT(lo, std::numeric_limits<T>::min());
      |                                     ^
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/check.h:58:4: 備考: in definition of macro ‘CHECK’
   58 |   (b ? ::benchmark::internal::GetNullLogInstance()                           \
      |    ^
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:40:3: 備考: in expansion of macro ‘CHECK_GT’
   40 |   CHECK_GT(lo, std::numeric_limits<T>::min());
      |   ^~~~~~~~
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:40:40: エラー: ‘::min’ has not been declared; did you mean ‘std::min’?
   40 |   CHECK_GT(lo, std::numeric_limits<T>::min());
      |                                        ^~~
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/check.h:58:4: 備考: in definition of macro ‘CHECK’
   58 |   (b ? ::benchmark::internal::GetNullLogInstance()                           \
      |    ^
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:40:3: 備考: in expansion of macro ‘CHECK_GT’
   40 |   CHECK_GT(lo, std::numeric_limits<T>::min());
      |   ^~~~~~~~
次のファイルから読み込み:  /usr/include/c++/11.1.0/algorithm:62,
         次から読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:172,
         次から読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/internal_macros.h:4,
         次から読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/check.h:8,
         次から読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:6,
         次から読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.cc:15:
/usr/include/c++/11.1.0/bits/stl_algo.h:3455:5: 備考: ‘std::min’ declared here
 3455 |     min(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
次のファイルから読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:6,
         次から読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.cc:15:
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:41:21: エラー: ‘numeric_limits’ is not a member of ‘std’
   41 |   CHECK_GT(hi, std::numeric_limits<T>::min());
      |                     ^~~~~~~~~~~~~~
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/check.h:58:4: 備考: in definition of macro ‘CHECK’
   58 |   (b ? ::benchmark::internal::GetNullLogInstance()                           \
      |    ^
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:41:3: 備考: in expansion of macro ‘CHECK_GT’
   41 |   CHECK_GT(hi, std::numeric_limits<T>::min());
      |   ^~~~~~~~
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:41:37: エラー: expected primary-expression before ‘>’ token
   41 |   CHECK_GT(hi, std::numeric_limits<T>::min());
      |                                     ^
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/check.h:58:4: 備考: in definition of macro ‘CHECK’
   58 |   (b ? ::benchmark::internal::GetNullLogInstance()                           \
      |    ^
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:41:3: 備考: in expansion of macro ‘CHECK_GT’
   41 |   CHECK_GT(hi, std::numeric_limits<T>::min());
      |   ^~~~~~~~
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:41:40: エラー: ‘::min’ has not been declared; did you mean ‘std::min’?
   41 |   CHECK_GT(hi, std::numeric_limits<T>::min());
      |                                        ^~~
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/check.h:58:4: 備考: in definition of macro ‘CHECK’
   58 |   (b ? ::benchmark::internal::GetNullLogInstance()                           \
      |    ^
/home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:41:3: 備考: in expansion of macro ‘CHECK_GT’
   41 |   CHECK_GT(hi, std::numeric_limits<T>::min());
      |   ^~~~~~~~
次のファイルから読み込み:  /usr/include/c++/11.1.0/algorithm:62,
         次から読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/include/benchmark/benchmark.h:172,
         次から読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/internal_macros.h:4,
         次から読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/check.h:8,
         次から読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.h:6,
         次から読み込み:  /home/alex/Documents/aur/os-251/src/os-251/build/_deps/googlebenchmark-src/src/benchmark_register.cc:15:
/usr/include/c++/11.1.0/bits/stl_algo.h:3455:5: 備考: ‘std::min’ declared here
 3455 |     min(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
make[2]: *** [_deps/googlebenchmark-build/src/CMakeFiles/benchmark.dir/build.make:118: _deps/googlebenchmark-build/src/CMakeFiles/benchmark.dir/benchmark_register.cc.o] エラー 1
make[2]: *** 未完了のジョブを待っています....

maybe this is related: http://gcc.gnu.org/gcc-11/porting_to.html

Header dependency changes
Some C++ Standard Library headers have been changed to no longer include other headers that they do need to depend on. As such, C++ programs that used standard library components without including the right headers will no longer compile.
The following headers are used less widely in libstdc++ and may need to be included explicitly when compiled with GCC 11:
(for std::numeric_limits)
(for std::unique_ptr, std::shared_ptr etc.)
(for std::pair, std::tuple_size, std::index_sequence etc.)
(for members of namespace std::this_thread.)

Present presets to LV2 host

There are some preset patches available to be selected using the GUI but none of these are presented to LV2 hosts which do not (or cannot) display the GUI. It would be advantageous to expose or be able to export these presets to LV2 preset TTL.

Missing oscillator reset

After finishing release in ADSR, oscillator's state should be reset. Especially smoothedShape.reset() should be called.
But currently it's not.

As a result, the synth sounds with non zero shape value even shape=0 is set in some cases.

e.g.

  1. Load Key1.oapreset and play some notes.
  2. Load Key0.ospreset and you can notice that the sound is not shape=0 even it's set so.

example.zip

Even without any fix, the 'shaped' sound eventually disappears. But still it should be fixed.

Chorus produces (undesired?) crackling noise

I don't know if it was planned, but there is a crackling noise that doesn't seem to be a feature. I am attaching a preset with very few parameters turned on. Only saw is working, you can check the other 2 easily. The preset is in AU format, if you need any other format, please let me know. I couldn't find a way to save presets in a proprietary way. This is leading me to open a new REQ :). Sorry, I am giving you a lot of work :)
Test1.aupreset.zip

Use discrete enumerated values for LV2 plugin

The LV2 plugin presents all parameters as floating point values in range 0.0-1.0. Many parameters are discrete values, e.g. number of voices, chorus, etc. which should be presented as such. The LV2 GUI does interpret these but LV2 hosts that do not (or cannot) present the GUI cannot deduce these enumerated values.

LV2 standard allows definition of enumerated values within the TTL.

Os251AudioProcessorEditor::getBundle(): path to source directory is referenced at run time

I'm trying to build OS-251 for Android (as an example port of my framework project) and it's getting closer to working state. But I'm stuck at Os251AudioProcessorEditor::getBundle() which tries to load resources from my local development host (which does not exist on the target device):

89eccbf#diff-578bbcf45713dbccea501c1c5258f5ee4969efffd9a8ad487ec734271664498aR95

I'm sure this won't work when it is distributed as binaries either. Maybe that resource should be generated and bundled at build time? I'm not sure how typical react-juce projects deal with it though...

Improve efficiency to reduce xruns

The LV2 plugin compiles and runs on a Raspberry Pi 4 but triggers xruns for patches with more than 9 voices (and maybe longer sustain / release time). This may be sufficient for the Juno style device but it would be advantageous to be able to use OS-251 with other plugins so reducing the resource usage would be a good thing. Please consider whether there are any optimisations that might reduce the risk of xruns.

[REQ] Add the possibility to enter values manually from the GUI

CONFIGURATION
OS: macOS Mojave 10.14.6 (build 14G9028)
Plugin type used: AU
DAW: Logic Pro 10.5.1

ISSUE:
I was trying to set the LPF frequency at 350 Hz from the plugin GUI, but it was impossible to nail the exact frequency value.

WORKAROUND:
Kind of annoying, I had to use the mouse to set the knob around the desired value, switch from editor view to control view, search between all the parameters and then use the up and down arrows to get the exact value that I wanted, because
I wasn't able to manually set a specific value from the control view neither, after writing it and pushing enter, the value simply goes to the max (20000 Hz in this case). I tried different formats, 350 and 350 HZ, none worked

However, for other values in the control view, I can set it manually via keyboard (for instance: LFO Rate, Decay, Shape etc)

Zipping and glitching when adjusting parameters

When a parameter is adjusted there may be zipping sound (discrete jumps in parameter value being implemented immediately to sound render) and glitching (clicks / splats possibly due to discontinuity of audio). It would be advantageous to avoid such artefacts to allow adjustment of parameters during performance, not just during sound design, e.g. opening a filter or adding a waveform.

Add some user documentation

OS-251 is purposefully designed to be simple to use but there are still some controls that are not necessarily intuitive, e.g. LFO sync. It would be advantageous to have a user guide describing each parameter.

JUCE is pulled twice when cloning recursively

Submodule 'lib/JUCE' (https://github.com/juce-framework/JUCE) registered for path 'lib/JUCE'
Submodule 'lib/react-juce' (https://github.com/nick-thompson/react-juce) registered for path 'lib/react-juce'
Cloning into '/home/alex/Documents/aur/os-251/src/os-251/lib/JUCE'...
Cloning into '/home/alex/Documents/aur/os-251/src/os-251/lib/react-juce'...
************* Submodule path 'lib/JUCE': checked out '7c797c8105c2d41872e6e8d08972624f0afd335d'
Submodule path 'lib/react-juce': checked out '2711facc9c064daffeab4f331cb472fa0985585f'
Submodule 'juce' (https://github.com/juce-framework/JUCE.git) registered for path 'lib/react-juce/ext/juce'
Submodule 'yoga' (https://github.com/facebook/yoga.git) registered for path 'lib/react-juce/react_juce/yoga'
Cloning into '/home/alex/Documents/aur/os-251/src/os-251/lib/react-juce/ext/juce'...
Cloning into '/home/alex/Documents/aur/os-251/src/os-251/lib/react-juce/react_juce/yoga'...
************* Submodule path 'lib/react-juce/ext/juce': checked out '7c797c8105c2d41872e6e8d08972624f0afd335d'
Submodule path 'lib/react-juce/react_juce/yoga': checked out 'a38ec3d7a493c5497016d4d1b4e05b89cf5d6f65'
Submodule 'lib/gtest/googletest' (https://github.com/google/googletest.git) registered for path 'lib/react-juce/react_juce/yoga/lib/gtest/googletest'
Cloning into '/home/alex/Documents/aur/os-251/src/os-251/lib/react-juce/react_juce/yoga/lib/gtest/googletest'...
Submodule path 'lib/react-juce/react_juce/yoga/lib/gtest/googletest': checked out 'a2b8a8e07628e5fd60644b6dd99c1b5e7d7f1f47'

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.