New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Xpressive plugin #3259

Merged
merged 32 commits into from Jun 26, 2017

Conversation

Projects
None yet
@gnudles
Contributor

gnudles commented Jan 14, 2017

xpressive
tresf added screenshot Feb 5 '17

Xpressive plugin allows you to write your own expressions for sound creation.

@AndiEcker

This comment has been minimized.

Show comment
Hide comment
@AndiEcker

AndiEcker Jan 17, 2017

AndiEcker commented Jan 17, 2017

@zonkmachine

This comment has been minimized.

Show comment
Hide comment
@zonkmachine

zonkmachine Jan 17, 2017

Member

xpressive

😮 Totally tripping right now. It's so cool. Like if Bit Invader grew up and took classes in engineering.

Member

zonkmachine commented Jan 17, 2017

xpressive

😮 Totally tripping right now. It's so cool. Like if Bit Invader grew up and took classes in engineering.

@gnudles

This comment has been minimized.

Show comment
Hide comment
@gnudles

gnudles Jan 18, 2017

Contributor

What should be done with this error? :
/tmp/cc62tQLz.s: Fatal error: can't write CMakeFiles/xpressive.dir/exprfront.cpp.obj: File too big

Contributor

gnudles commented Jan 18, 2017

What should be done with this error? :
/tmp/cc62tQLz.s: Fatal error: can't write CMakeFiles/xpressive.dir/exprfront.cpp.obj: File too big

@ArashPartow

This comment has been minimized.

Show comment
Hide comment
@ArashPartow

ArashPartow Jan 18, 2017

What should be done with this error? :

The version of ld shipped with mingw64 is Literally Broken - last good version was circa GCC4.3. In short to get rid of the build error you need to do the following two things:

Step 1.
Add the following only to the mingw64 build options in CMake:

-Wa,-mbig-obj

Step 2.
In order to make the ExprTk TU section size smaller add the following defines either in the mingw64 CMake build line

-Dexprtk_disable_break_continue
-Dexprtk_disable_sc_andor
-Dexprtk_disable_enhanced_features
-Dexprtk_disable_string_capabilities
-Dexprtk_disable_rtl_io_file

Or #ifdef on mingw64 just prior to the #include "exprtk.hpp" and define

#define exprtk_disable_break_continue
#define exprtk_disable_sc_andor
#define exprtk_disable_enhanced_features
#define exprtk_disable_string_capabilities
#define exprtk_disable_rtl_io_file

I'd also review [Section 19 - Enabling & Disabling Features] of the documentation - specifically 19.2 Disabling Control-Flow Structures such as for-loop, while-loop etc. I'm guessing you don't want users invoking such functionality in their expressions.

ArashPartow commented Jan 18, 2017

What should be done with this error? :

The version of ld shipped with mingw64 is Literally Broken - last good version was circa GCC4.3. In short to get rid of the build error you need to do the following two things:

Step 1.
Add the following only to the mingw64 build options in CMake:

-Wa,-mbig-obj

Step 2.
In order to make the ExprTk TU section size smaller add the following defines either in the mingw64 CMake build line

-Dexprtk_disable_break_continue
-Dexprtk_disable_sc_andor
-Dexprtk_disable_enhanced_features
-Dexprtk_disable_string_capabilities
-Dexprtk_disable_rtl_io_file

Or #ifdef on mingw64 just prior to the #include "exprtk.hpp" and define

#define exprtk_disable_break_continue
#define exprtk_disable_sc_andor
#define exprtk_disable_enhanced_features
#define exprtk_disable_string_capabilities
#define exprtk_disable_rtl_io_file

I'd also review [Section 19 - Enabling & Disabling Features] of the documentation - specifically 19.2 Disabling Control-Flow Structures such as for-loop, while-loop etc. I'm guessing you don't want users invoking such functionality in their expressions.

@ArashPartow

ArashPartow suggested changes Jan 18, 2017 edited

You've applied the defines to all compiler settings which is not what I suggested. It should only be applied to the mingw64 build

Furthermore you've applied the -Wa,-mbig-obj option to all mingw compilers it should only be the mingw64 compiler.

@gnudles

This comment has been minimized.

Show comment
Hide comment
@gnudles

gnudles Jan 18, 2017

Contributor

oops, I'll replace
IF(MINGW_PREFIX)
with
IF(WIN64)
I invoke the parser with:

	parser_t::settings_store sstore;
	sstore.disable_all_logic_ops();
	sstore.disable_all_assignment_ops();
	sstore.disable_all_control_structures();
	parser_t parser(sstore);

So I don't understand why these defines should be used only in a certain build. Furthermore, I added them to reduce build time.
I do want all the users to be able to use
(t>0)&(t<1)
I saw that using the flag exprtk_disable_sc_andor changes the implementation of the "&" and "|" signs.
I hope it's OK.

Contributor

gnudles commented Jan 18, 2017

oops, I'll replace
IF(MINGW_PREFIX)
with
IF(WIN64)
I invoke the parser with:

	parser_t::settings_store sstore;
	sstore.disable_all_logic_ops();
	sstore.disable_all_assignment_ops();
	sstore.disable_all_control_structures();
	parser_t parser(sstore);

So I don't understand why these defines should be used only in a certain build. Furthermore, I added them to reduce build time.
I do want all the users to be able to use
(t>0)&(t<1)
I saw that using the flag exprtk_disable_sc_andor changes the implementation of the "&" and "|" signs.
I hope it's OK.

@tresf

This comment has been minimized.

Show comment
Hide comment
@tresf
Member

tresf commented Jan 18, 2017

@ArashPartow

This comment has been minimized.

Show comment
Hide comment
@ArashPartow

ArashPartow Jan 18, 2017

I think it should be something like:

IF(MINGW_PREFIX and WIN64)

As WIN64 probably implies ALL windows 64 builds, perhaps including MSVC


Perhaps only assignment and loop control_structures as you might want if-statements/ternary-statements with logical operators to be made available:

parser_t::settings_store sstore;
sstore.disable_all_assignment_ops();
sstore.disable_control_structure(settings_t::e_ctrl_for_loop   );
sstore.disable_control_structure(settings_t::e_ctrl_while_loop );
sstore.disable_control_structure(settings_t::e_ctrl_repeat_loop);
parser_t parser(sstore);

So I don't understand why these defines should be used only in a certain build.

It's explained in my post above.


I do want all the users to be able to use
(t>0)&(t<1)
I saw that using the flag exprtk_disable_sc_andor changes the implementation of the "&" and "|" signs.

Yeah get rid of it from the build line. It wont save much for section size issues and it is probably better off to have it available/present.

ArashPartow commented Jan 18, 2017

I think it should be something like:

IF(MINGW_PREFIX and WIN64)

As WIN64 probably implies ALL windows 64 builds, perhaps including MSVC


Perhaps only assignment and loop control_structures as you might want if-statements/ternary-statements with logical operators to be made available:

parser_t::settings_store sstore;
sstore.disable_all_assignment_ops();
sstore.disable_control_structure(settings_t::e_ctrl_for_loop   );
sstore.disable_control_structure(settings_t::e_ctrl_while_loop );
sstore.disable_control_structure(settings_t::e_ctrl_repeat_loop);
parser_t parser(sstore);

So I don't understand why these defines should be used only in a certain build.

It's explained in my post above.


I do want all the users to be able to use
(t>0)&(t<1)
I saw that using the flag exprtk_disable_sc_andor changes the implementation of the "&" and "|" signs.

Yeah get rid of it from the build line. It wont save much for section size issues and it is probably better off to have it available/present.

@ArashPartow

This comment has been minimized.

Show comment
Hide comment
@ArashPartow

ArashPartow Jan 18, 2017

@tresf Nothing should be global. All of this is related to a broken version of mingw64 - So all the changes must only be specific to 64-bit builds using mingw64 and no other compilers or architectures.

The build changes presented are a hack/kludge to reduce the section size of the TU so as to allow the broken ld that is shipped with mingw64 to build the final executable binary.

In short the defines disable certain features such as expression optimizations so as to reduce the section size, hence it is not an option one would want to add to all builds as it drastically retards the performance of the expression engine.

ArashPartow commented Jan 18, 2017

@tresf Nothing should be global. All of this is related to a broken version of mingw64 - So all the changes must only be specific to 64-bit builds using mingw64 and no other compilers or architectures.

The build changes presented are a hack/kludge to reduce the section size of the TU so as to allow the broken ld that is shipped with mingw64 to build the final executable binary.

In short the defines disable certain features such as expression optimizations so as to reduce the section size, hence it is not an option one would want to add to all builds as it drastically retards the performance of the expression engine.

@tresf

This comment has been minimized.

Show comment
Hide comment
@tresf

tresf Jan 18, 2017

Member

@tresf Nothing should be global. All of this is related to a broken version of mingw64 - So all the changes must only be specific to 64-bit builds using mingw64 and no other compilers or architectures.

Please look at the lines that are linked. #3259 (comment)

Member

tresf commented Jan 18, 2017

@tresf Nothing should be global. All of this is related to a broken version of mingw64 - So all the changes must only be specific to 64-bit builds using mingw64 and no other compilers or architectures.

Please look at the lines that are linked. #3259 (comment)

@ArashPartow

This comment has been minimized.

Show comment
Hide comment
@ArashPartow

ArashPartow Jan 18, 2017

@tresf ooh yeah I missed this line:

https://github.com/LMMS/lmms/blob/master/cmake/modules/MinGWCrossCompile.cmake#L10

Should be all good if it is only within that IF(LMMS_BUILD_MSYS) scope.

ArashPartow commented Jan 18, 2017

@tresf ooh yeah I missed this line:

https://github.com/LMMS/lmms/blob/master/cmake/modules/MinGWCrossCompile.cmake#L10

Should be all good if it is only within that IF(LMMS_BUILD_MSYS) scope.

@tresf

This comment has been minimized.

Show comment
Hide comment
@tresf

tresf Jan 18, 2017

Member

Should be all good if it is only within that IF(LMMS_BUILD_MSYS) scope.

Great but to be precise, I believe it needs to be for both scopes linked or moved into a separate conditional.

Member

tresf commented Jan 18, 2017

Should be all good if it is only within that IF(LMMS_BUILD_MSYS) scope.

Great but to be precise, I believe it needs to be for both scopes linked or moved into a separate conditional.

@ArashPartow

This comment has been minimized.

Show comment
Hide comment
@ArashPartow

ArashPartow Jan 18, 2017

@tresf Now I'm confused. According to the build artifacts the 32-bit mingw build was successful however the 64-bit mingw build failed.

On line:

https://github.com/LMMS/lmms/blob/master/cmake/modules/MinGWCrossCompile.cmake#L18

The "IF(WIN64)" seems to suggest 64-bit but the comments around and in the scope and the "COMPILER32" stuff seem to suggest 32-bit.

I'll let you guys figure it out. However you end up doing it my recommendation is that it should only apply to 64-bit builds using mingw64.

ArashPartow commented Jan 18, 2017

@tresf Now I'm confused. According to the build artifacts the 32-bit mingw build was successful however the 64-bit mingw build failed.

On line:

https://github.com/LMMS/lmms/blob/master/cmake/modules/MinGWCrossCompile.cmake#L18

The "IF(WIN64)" seems to suggest 64-bit but the comments around and in the scope and the "COMPILER32" stuff seem to suggest 32-bit.

I'll let you guys figure it out. However you end up doing it my recommendation is that it should only apply to 64-bit builds using mingw64.

@tresf

This comment has been minimized.

Show comment
Hide comment
@tresf

tresf Jan 18, 2017

Member

Correct, we explicitly build the 32-bit host wrapper on 64-bit. Naturally, the description would have to change if this were added.

Member

tresf commented Jan 18, 2017

Correct, we explicitly build the 32-bit host wrapper on 64-bit. Naturally, the description would have to change if this were added.

@softrabbit

This comment has been minimized.

Show comment
Hide comment
@softrabbit

softrabbit Jan 19, 2017

Member

Actually, this shouldn't be (just) a plugin. @gnudles, could you get the expression evalution worked into the standard oscillator class(es)? That way it could be used in at least TripleOscillator or Organic as well, maybe some other plugin too.

(I haven't tried this plugin yet, but I like the idea.)

Member

softrabbit commented Jan 19, 2017

Actually, this shouldn't be (just) a plugin. @gnudles, could you get the expression evalution worked into the standard oscillator class(es)? That way it could be used in at least TripleOscillator or Organic as well, maybe some other plugin too.

(I haven't tried this plugin yet, but I like the idea.)

@gnudles

This comment has been minimized.

Show comment
Hide comment
@gnudles

gnudles Jan 20, 2017

Contributor

@softrabbit , I think that the next step is to create a sound scripting language, compile it with llvm (or some other jit engine) on runtime, and make a generic plug-in infrastructure... But then you need to add llvm to the dependency list...
@tresf what's the bottom line?
@zonkmachine - it's better to use integrate(f) instead of t*f because it stays stable with frequency change (with base detuning). integrate(f) holds internal counter that counts f and return the sum divided by sample_rate.

Contributor

gnudles commented Jan 20, 2017

@softrabbit , I think that the next step is to create a sound scripting language, compile it with llvm (or some other jit engine) on runtime, and make a generic plug-in infrastructure... But then you need to add llvm to the dependency list...
@tresf what's the bottom line?
@zonkmachine - it's better to use integrate(f) instead of t*f because it stays stable with frequency change (with base detuning). integrate(f) holds internal counter that counts f and return the sum divided by sample_rate.

Show outdated Hide outdated src/gui/widgets/Graph.cpp Outdated
Show outdated Hide outdated plugins/xpressive/exprfront.cpp Outdated
Show outdated Hide outdated plugins/xpressive/exprfront.cpp Outdated
Show outdated Hide outdated plugins/xpressive/exprfront.cpp Outdated
Show outdated Hide outdated plugins/xpressive/exprfront.cpp Outdated
Show outdated Hide outdated plugins/xpressive/expressive_plugin.cpp Outdated
Show outdated Hide outdated plugins/xpressive/expressive_plugin.cpp Outdated
Show outdated Hide outdated plugins/xpressive/expressive_plugin.cpp Outdated
m_panning2.loadSettings(_this,"PAN2");
m_relTransition.loadSettings(_this,"RELTRANS");
int size = 0;

This comment has been minimized.

@zapashcanon

zapashcanon Jan 21, 2017

Contributor

Not sure for this one, as I don't know the effect of the next function calls, but:

const int size = 0;
@zapashcanon

zapashcanon Jan 21, 2017

Contributor

Not sure for this one, as I don't know the effect of the next function calls, but:

const int size = 0;

This comment has been minimized.

@gnudles

gnudles Jan 21, 2017

Contributor

Let's keep it that way...

@gnudles

gnudles Jan 21, 2017

Contributor

Let's keep it that way...

Show outdated Hide outdated plugins/xpressive/expressive_plugin.cpp Outdated
@tresf

This comment has been minimized.

Show comment
Hide comment
@tresf

tresf Feb 5, 2017

Member

Is this ready for merge?

Member

tresf commented Feb 5, 2017

Is this ready for merge?

@zonkmachine

This comment has been minimized.

Show comment
Hide comment
@zonkmachine

zonkmachine Feb 5, 2017

Member

Is this ready for merge?

I think it is.

I've seen a very minor issue. The presets are not saved with unique names. It's not obvious when you save a preset that the file name and the preset name isn't necessarily the same. One could argue that this is something we could change actually.

Member

zonkmachine commented Feb 5, 2017

Is this ready for merge?

I think it is.

I've seen a very minor issue. The presets are not saved with unique names. It's not obvious when you save a preset that the file name and the preset name isn't necessarily the same. One could argue that this is something we could change actually.

@zonkmachine

Please re-save the pre-sets with their chosen names and not the default name="X-Pressive"

Show outdated Hide outdated data/presets/X-Pressive/X-Pressive1.xpf Outdated

Can be fixed later

@gnudles

This comment has been minimized.

Show comment
Hide comment
@gnudles

gnudles Feb 8, 2017

Contributor

Oh BTW, what's the best way for a plugin to deallocate memory on shut-down? Because I need to deallocate the help window.

Contributor

gnudles commented Feb 8, 2017

Oh BTW, what's the best way for a plugin to deallocate memory on shut-down? Because I need to deallocate the help window.

@jasp00

Although this is work in progress, you should start following the coding conventions.

It is required to include the Boost Software License.

Show outdated Hide outdated plugins/xpressive/expressive_plugin.h Outdated
Show outdated Hide outdated include/Graph.h Outdated
Show outdated Hide outdated plugins/CMakeLists.txt Outdated
Show outdated Hide outdated plugins/xpressive/CMakeLists.txt Outdated
/*
* expressive_plugin.cpp - instrument which uses a mathematical formula parser
*
* Copyright (c) 2016-2017 Orr Dvori

This comment has been minimized.

@jasp00

jasp00 Feb 14, 2017

Member

The convention is to add an email address, but it is not strictly necessary.

@jasp00

jasp00 Feb 14, 2017

Member

The convention is to add an email address, but it is not strictly necessary.

Show outdated Hide outdated plugins/xpressive/expressive_plugin.h Outdated
Show outdated Hide outdated plugins/xpressive/expressive_plugin.h Outdated
Show outdated Hide outdated plugins/xpressive/expressive_plugin.cpp Outdated
Show outdated Hide outdated plugins/xpressive/exprfront.cpp Outdated
Show outdated Hide outdated plugins/xpressive/exprfront.cpp Outdated
@gnudles

This comment has been minimized.

Show comment
Hide comment
@gnudles

gnudles Feb 23, 2017

Contributor

I fixed everything that @jasp00 noted,

Please include previous value of CMAKE_CXX_FLAGS

but unfortunately when I added the previous value, it couldn't be compiled, because there is still another throw statement in exprTk that slipped through all those disabling defines.
When it will be fixed, I think we are ready for merge...

Contributor

gnudles commented Feb 23, 2017

I fixed everything that @jasp00 noted,

Please include previous value of CMAKE_CXX_FLAGS

but unfortunately when I added the previous value, it couldn't be compiled, because there is still another throw statement in exprTk that slipped through all those disabling defines.
When it will be fixed, I think we are ready for merge...

@simonvanderveldt

This comment has been minimized.

Show comment
Hide comment
@simonvanderveldt

simonvanderveldt Feb 25, 2017

Contributor

Cool stuff!
Small question: Shouldn't new plugins use the new styling? See #2831
Or will this be done after this PR is merged?

Contributor

simonvanderveldt commented Feb 25, 2017

Cool stuff!
Small question: Shouldn't new plugins use the new styling? See #2831
Or will this be done after this PR is merged?

@zonkmachine

This comment has been minimized.

Show comment
Hide comment
@zonkmachine

zonkmachine Feb 25, 2017

Member

I fixed everything that @jasp00 noted,

@gnudles Awesome! Push the changes.

Please include previous value of CMAKE_CXX_FLAGS

but unfortunately when I added the previous value, it couldn't be compiled, because there is still another throw statement in exprTk that slipped through all those disabling defines.
When it will be fixed, I think we are ready for merge...

Is there an upstream issue about this we can keep track of?

Small question: Shouldn't new plugins use the new styling? See #2831
Or will this be done after this PR is merged?

#2831 Is concerning the native effect plugins specifically.

Member

zonkmachine commented Feb 25, 2017

I fixed everything that @jasp00 noted,

@gnudles Awesome! Push the changes.

Please include previous value of CMAKE_CXX_FLAGS

but unfortunately when I added the previous value, it couldn't be compiled, because there is still another throw statement in exprTk that slipped through all those disabling defines.
When it will be fixed, I think we are ready for merge...

Is there an upstream issue about this we can keep track of?

Small question: Shouldn't new plugins use the new styling? See #2831
Or will this be done after this PR is merged?

#2831 Is concerning the native effect plugins specifically.

@simonvanderveldt

This comment has been minimized.

Show comment
Hide comment
@simonvanderveldt

simonvanderveldt Feb 25, 2017

Contributor

#2831 Is concerning the native effect plugins specifically.

@zonkmachine yeah, I always forget there's a distinction between instruments and effects :x

Contributor

simonvanderveldt commented Feb 25, 2017

#2831 Is concerning the native effect plugins specifically.

@zonkmachine yeah, I always forget there's a distinction between instruments and effects :x

@gnudles

This comment has been minimized.

Show comment
Hide comment
@gnudles

gnudles Feb 28, 2017

Contributor

@gnudles Awesome! Push the changes.

But if I do, it won't compile

Is there an upstream issue about this we can keep track of?

What do you mean?

Contributor

gnudles commented Feb 28, 2017

@gnudles Awesome! Push the changes.

But if I do, it won't compile

Is there an upstream issue about this we can keep track of?

What do you mean?

@zonkmachine

This comment has been minimized.

Show comment
Hide comment
@zonkmachine

zonkmachine Jun 18, 2017

Member

@tresf Fixed this but now there's a merge conflict over here: gnudles#8

Edit: gnudles#8 is from a branch named 'unknown repository' so one can't just cherry-pick it. It looks like the easiest way is to reset this branch to before my fixup and then merge that one and cherry-pick it to my fixup branch?

Member

zonkmachine commented Jun 18, 2017

@tresf Fixed this but now there's a merge conflict over here: gnudles#8

Edit: gnudles#8 is from a branch named 'unknown repository' so one can't just cherry-pick it. It looks like the easiest way is to reset this branch to before my fixup and then merge that one and cherry-pick it to my fixup branch?

@tresf

This comment has been minimized.

Show comment
Hide comment
@tresf

tresf Jun 19, 2017

Member

@tresf Fixed this but now there's a merge conflict over here: gnudles#8

Right, I guess we would expect that. Any PRs against his PR would go into conflict.

It looks like the easiest way is to reset this branch to before my fixup and then merge that one and cherry-pick it to my fixup branch?

The offending PR is on someone else's fork and was performed by @ArashPartow (the author of exprtk). He's best to answer this question. The unknown branch may be because this PR was handled elsewhere and he deleted his branch. He's best to answer that question but at a glance, it appears you may be able to hand-edit them into this PR prior to merging. The changes are minor.

Member

tresf commented Jun 19, 2017

@tresf Fixed this but now there's a merge conflict over here: gnudles#8

Right, I guess we would expect that. Any PRs against his PR would go into conflict.

It looks like the easiest way is to reset this branch to before my fixup and then merge that one and cherry-pick it to my fixup branch?

The offending PR is on someone else's fork and was performed by @ArashPartow (the author of exprtk). He's best to answer this question. The unknown branch may be because this PR was handled elsewhere and he deleted his branch. He's best to answer that question but at a glance, it appears you may be able to hand-edit them into this PR prior to merging. The changes are minor.

@zonkmachine

This comment has been minimized.

Show comment
Hide comment
@zonkmachine

zonkmachine Jun 19, 2017

Member
-               typedef std::iterator_traits<typename generator::token_list_t::iterator>::difference_type diff_t;
+               typedef std::iterator_traits<generator::token_list_t::iterator>::difference_type diff_t;
Member

zonkmachine commented Jun 19, 2017

-               typedef std::iterator_traits<typename generator::token_list_t::iterator>::difference_type diff_t;
+               typedef std::iterator_traits<generator::token_list_t::iterator>::difference_type diff_t;
@tresf

This comment has been minimized.

Show comment
Hide comment
@tresf

tresf Jun 19, 2017

Member

Oh, I see. We if you've already incorporated them, the PR is moot.

Member

tresf commented Jun 19, 2017

Oh, I see. We if you've already incorporated them, the PR is moot.

@zonkmachine

This comment has been minimized.

Show comment
Hide comment
@zonkmachine

zonkmachine Jun 19, 2017

Member
-               typedef std::iterator_traits<typename generator::token_list_t::iterator>::difference_type diff_t;
+               typedef std::iterator_traits<generator::token_list_t::iterator>::difference_type diff_t;

Sorry, I pressed send there by mistake. The second (+) line above is indeed in exprtk.hpp upstream but neither of the lines is anywhere in the versions I have. Either I've messed up or the left behind PR was never incorporated for a reason. Let's wait a couple of days for some feedback @gnudles and/or @ArashPartow.

Member

zonkmachine commented Jun 19, 2017

-               typedef std::iterator_traits<typename generator::token_list_t::iterator>::difference_type diff_t;
+               typedef std::iterator_traits<generator::token_list_t::iterator>::difference_type diff_t;

Sorry, I pressed send there by mistake. The second (+) line above is indeed in exprtk.hpp upstream but neither of the lines is anywhere in the versions I have. Either I've messed up or the left behind PR was never incorporated for a reason. Let's wait a couple of days for some feedback @gnudles and/or @ArashPartow.

@zonkmachine

This comment has been minimized.

Show comment
Hide comment
@zonkmachine

zonkmachine Jun 19, 2017

Member

The second (+) line above is indeed in exprtk.hpp upstream but neither of the lines is anywhere in the versions I have.

Edit: apart from the backed up original...

Member

zonkmachine commented Jun 19, 2017

The second (+) line above is indeed in exprtk.hpp upstream but neither of the lines is anywhere in the versions I have.

Edit: apart from the backed up original...

@gnudles

This comment has been minimized.

Show comment
Hide comment
@gnudles

gnudles Jun 20, 2017

Contributor

@zonkmachine, you can always get the newest exprtk.hpp from upstream. Thanks for the fixes BTW.
The exprtk.hpp in the plugin is the original file without any change, so it should be OK to take the newest.

Contributor

gnudles commented Jun 20, 2017

@zonkmachine, you can always get the newest exprtk.hpp from upstream. Thanks for the fixes BTW.
The exprtk.hpp in the plugin is the original file without any change, so it should be OK to take the newest.

@zonkmachine

This comment has been minimized.

Show comment
Hide comment
@zonkmachine

zonkmachine Jun 20, 2017

Member

Aight, upated! 😉

Member

zonkmachine commented Jun 20, 2017

Aight, upated! 😉

@zonkmachine

This comment has been minimized.

Show comment
Hide comment
@zonkmachine

zonkmachine Jun 25, 2017

Member

Not good to merge. Due to the rebasing to stable-1.2 this includes some commits from master that are not present in stable-1.2, such as de3b344 and 9f905bc.

I believe this is fixed now. Merge?

Member

zonkmachine commented Jun 25, 2017

Not good to merge. Due to the rebasing to stable-1.2 this includes some commits from master that are not present in stable-1.2, such as de3b344 and 9f905bc.

I believe this is fixed now. Merge?

@lukas-w

This comment has been minimized.

Show comment
Hide comment
@lukas-w

lukas-w Jun 25, 2017

Member

Merge?

👍

Member

lukas-w commented Jun 25, 2017

Merge?

👍

@zonkmachine

This comment has been minimized.

Show comment
Hide comment
@zonkmachine

zonkmachine Jun 26, 2017

Member

@tresf This is a big one. Does anything get squashed or just merge it as it is?

Member

zonkmachine commented Jun 26, 2017

@tresf This is a big one. Does anything get squashed or just merge it as it is?

@tresf

This comment has been minimized.

Show comment
Hide comment
@tresf

tresf Jun 26, 2017

Member

@zonkmachine if we wanted we could isolate the Graph additions and plugin cmake cleanup, but they're actually relatively small, I vote squash 'em all.

Member

tresf commented Jun 26, 2017

@zonkmachine if we wanted we could isolate the Graph additions and plugin cmake cleanup, but they're actually relatively small, I vote squash 'em all.

@zonkmachine

This comment has been minimized.

Show comment
Hide comment
@zonkmachine

zonkmachine Jun 26, 2017

Member

I vote squash 'em all.

I'm fine with that but how about keeping the two main contributors apart and squashing the exprtk.hpp commits by Arash (amended by my update) separately so it gets recognized on the contributors list. I'm a bit sentimental that way. I tested it in a separate branch and the rebase comes out with no bugs and there is no diff against gnudles:xpressive_plugin.

It would look something like:

commit fa59472eed44f5e40d011bf3366874949720be89
Author: Orr Dvori <dvoreader@gmail.com>
Date:   Wed May 17 22:43:31 2017 +0300

    X-Pressive plugin - added graph drawing feature

commit acee8d3c6aefdcb7eaa047ce83881e3852ee2701
Author: ArashPartow <partow@gmail.com>
Date:   Sat Jan 14 05:21:23 2017 +1100

    Update ExprTk to tip of branch

commit 9b646c5c01266ef9229a6ff3f49c4ba32fcdb356
Author: Orr Dvori <dvoreader@gmail.com>
Date:   Sun Jan 8 14:31:01 2017 +0200

    X-Pressive Plugin
    
    Synthesizer plugin based on Bitinvader and 'The C++ Mathematical
    Expression Toolkit Library (ExprTk)'
    
    Some initial functions.
    
    available keys:
    f- note's frequency. available only in the output expressions
    t- time in seconds. in the Waves (W1,W2,W3) it's in the range [0,1)
    key- the note's keyboard key. available only in the output expressions.
    v- the note's velocity (divided by 255.0 so it is in the range [0,

...
Member

zonkmachine commented Jun 26, 2017

I vote squash 'em all.

I'm fine with that but how about keeping the two main contributors apart and squashing the exprtk.hpp commits by Arash (amended by my update) separately so it gets recognized on the contributors list. I'm a bit sentimental that way. I tested it in a separate branch and the rebase comes out with no bugs and there is no diff against gnudles:xpressive_plugin.

It would look something like:

commit fa59472eed44f5e40d011bf3366874949720be89
Author: Orr Dvori <dvoreader@gmail.com>
Date:   Wed May 17 22:43:31 2017 +0300

    X-Pressive plugin - added graph drawing feature

commit acee8d3c6aefdcb7eaa047ce83881e3852ee2701
Author: ArashPartow <partow@gmail.com>
Date:   Sat Jan 14 05:21:23 2017 +1100

    Update ExprTk to tip of branch

commit 9b646c5c01266ef9229a6ff3f49c4ba32fcdb356
Author: Orr Dvori <dvoreader@gmail.com>
Date:   Sun Jan 8 14:31:01 2017 +0200

    X-Pressive Plugin
    
    Synthesizer plugin based on Bitinvader and 'The C++ Mathematical
    Expression Toolkit Library (ExprTk)'
    
    Some initial functions.
    
    available keys:
    f- note's frequency. available only in the output expressions
    t- time in seconds. in the Waves (W1,W2,W3) it's in the range [0,1)
    key- the note's keyboard key. available only in the output expressions.
    v- the note's velocity (divided by 255.0 so it is in the range [0,

...
@tresf

This comment has been minimized.

Show comment
Hide comment
@tresf

tresf Jun 26, 2017

Member

In my experience squash maintains the contributors.

Member

tresf commented Jun 26, 2017

In my experience squash maintains the contributors.

@zonkmachine

This comment has been minimized.

Show comment
Hide comment
@zonkmachine

zonkmachine Jun 26, 2017

Member

Ah, OK! Then just a Squash and merge.

Member

zonkmachine commented Jun 26, 2017

Ah, OK! Then just a Squash and merge.

@zonkmachine zonkmachine merged commit dff76b2 into LMMS:master Jun 26, 2017

1 check passed

continuous-integration/travis-ci/pr The Travis CI build passed
Details
@zonkmachine

This comment has been minimized.

Show comment
Hide comment
@zonkmachine

zonkmachine Jun 26, 2017

Member

In my experience squash maintains the contributors.

It doesn't look like it.

Member

zonkmachine commented Jun 26, 2017

In my experience squash maintains the contributors.

It doesn't look like it.

@tresf

This comment has been minimized.

Show comment
Hide comment
@tresf

tresf Jun 26, 2017

Member

What is the concern? It gives him credit?

(Edit: If you're concerned about @ArashPartow I understand. I would have expected him to be in there as well.)

image

Member

tresf commented Jun 26, 2017

What is the concern? It gives him credit?

(Edit: If you're concerned about @ArashPartow I understand. I would have expected him to be in there as well.)

image

@zonkmachine

This comment has been minimized.

Show comment
Hide comment
@zonkmachine

zonkmachine Jun 26, 2017

Member

What is the concern? It gives him credit?

Yes, gnudles but not Arash. It's not a big concern though, I'm more trying to get to grips with git and github.

Member

zonkmachine commented Jun 26, 2017

What is the concern? It gives him credit?

Yes, gnudles but not Arash. It's not a big concern though, I'm more trying to get to grips with git and github.

@ArashPartow

This comment has been minimized.

Show comment
Hide comment
@ArashPartow

ArashPartow Jun 28, 2017

@zonkmachine - Gnudles did all the heavy lifting, so I'm all good with that. :D

ArashPartow commented Jun 28, 2017

@zonkmachine - Gnudles did all the heavy lifting, so I'm all good with that. :D

@gnudles

This comment has been minimized.

Show comment
Hide comment
@gnudles

gnudles Jun 30, 2017

Contributor

Maybe we should credit Arash in the plugin itself in the help window.
BTW, shouldn't it be merged to stable1.2?

Contributor

gnudles commented Jun 30, 2017

Maybe we should credit Arash in the plugin itself in the help window.
BTW, shouldn't it be merged to stable1.2?

PhysSong added a commit to PhysSong/lmms that referenced this pull request Jul 7, 2017

Xpressive plugin (LMMS#3259)
* First Preview of the X-Pressive Plugin
(exprtk.hpp is not included, get it from my exprtk fork in the branch
internal_data_functions)
available keys:
f- note's frequency. available only in the output expressions
t- time in seconds. in the Waves (W1,W2,W3) it's in the range [0,1)
key- the note's keyboard key. available only in the output expressions.
v- the note's velocity (divided by 255.0 so it is in the range [0,1]).
available only in the output expressions.
rel- gives 0 while the key is holded, and 1 after the key release.
available only in the output expressions.
A1,A2,A3- general purpose knobs (you can control them with the
automations). available only in the output expressions.
W1,W2,W3- precalculated wave forms. can be also load from file. you can
use them only in the output expressions
available functions:
cent(x)- gives pow(2,x/1200)
rand()- random number generator. in range [-1,1). each call gives other
value.
randv(i)- random vector (with pseudo infinite integer cells). the values
are in range [-1,1). it's stays consistent only across the note
playback. so each note playback will get other vector (even on the same
key).
sinew- sine wave with period of 1.
saww- saw wave with period of 1.
squarew- square wave with period of 1.
trianglew- triangle wave with period of 1.
expw- exponent wave with period of 1.
expnw- another exponent wave with period of 1.
moogw- moog wave with period of 1.
moogsaww- moog-saw wave with period of 1.
you can use * % ^ / + - pow sin log pi etc.

* Xpressive Plug-In:
Added Release transition knob that control the "rel" variable. (the
duration of transit from 0 to 1)
Fixed some problems in the displays. (update display when changing
A1,A2,A3, clear display with invalid expression.

* X-Pressive Plug-In: Few more fixes
Changed the callbacks in exprfront.cpp to be templated.
Added help.
Added ExprTk.hpp.
some bug fixes (inf issues).
Added integrate function.

* Special version of ExprTk with modified license (BSL) for the LMMS project https://github.com/LMMS/lmms

* Xpressive Plug-In- fixed some building errors.
Added the "e" euler's constant.

* Xpressive Plug-In - fix mingw64 issues

* X-Pressive Plug-in:
Added "trel" (time since release) variable.
The integrate function can now have unlimited usage.
Added selective interpolation per wave.
Improved a little the random vector function.
Some other improvements, code cleaning, etc...

* Xpressive Plug-In:
move clearGraph definition into Graph.cpp.
fixed compilation errors. (oops..)

* X-Pressive plug-in: updated presets names

* X-Pressive plug-in
added semitone function, added sample-rate variable

* X-Pressive plug-in, code cleaning, changed the rendering function to
achieve performace gain.

* X-Pressive plug-in - fix the string counting function

* X-Pressive plug-in - until somebody will find a better solution,
exprtk.hpp is patched under the name exprtk.patched.hpp ...

* X-Pressive plug-in - fix compiling errors.

* X-Pressive plug-in - added patch file for exprtk.hpp,
added last function that gives last calculated samples.
moved ExprSynth to be with ExprFront for performance reasons.

* X-Pressive plugin - moved the patched file back to the source tree, added .gitignore file..

* X-Pressive plugin - fix compilation error. (isnan isinf)

* X-Pressive plugin - tried to fix embed.cpp problem,
added new variable to the parser (tempo)

* X-Pressive plugin - fixed cmake script

* X-Pressive plugin - updated the license and the diff file.

* Updates to ExprTk

* Added return statement enable/disable via parser settings

Added exprtk_disable_return_statement macro for disabling return statements and associated exceptions at the source code level.

* X-Pressive plugin - updated CMakeLists.txt to use the correct flags on each platform.
also added exprtk.hpp as a dependency for the patch command.
Updated the exprtk diff file.

* X-Pressive plugin - moved the enhanced features flag to the WIN64 installation.

* X-Pressive plugin - another fix for CMakeLists.txt

* Minor updates to ExprTk

Updated multi-sub expression operator to return final sub-expression type.
Updates to exprtk_disable_return_statement macro for disabling return statements and associated exceptions at the source code level.

* X-Pressive plug-in - added try-block around exprtk calls and enabled the
-fexceptions flag, so patch file is no longer needed.

* X-Pressive plug-in - small fix in CMakeLists.txt

* Update ExprTk to tip of branch.

* X-Pressive plugin - added graph drawing feature..

* Updating exprtk.hpp to the latest upstream version

PhysSong added a commit to PhysSong/lmms that referenced this pull request Jul 7, 2017

Xpressive plugin (LMMS#3259)
* First Preview of the X-Pressive Plugin
(exprtk.hpp is not included, get it from my exprtk fork in the branch
internal_data_functions)
available keys:
f- note's frequency. available only in the output expressions
t- time in seconds. in the Waves (W1,W2,W3) it's in the range [0,1)
key- the note's keyboard key. available only in the output expressions.
v- the note's velocity (divided by 255.0 so it is in the range [0,1]).
available only in the output expressions.
rel- gives 0 while the key is holded, and 1 after the key release.
available only in the output expressions.
A1,A2,A3- general purpose knobs (you can control them with the
automations). available only in the output expressions.
W1,W2,W3- precalculated wave forms. can be also load from file. you can
use them only in the output expressions
available functions:
cent(x)- gives pow(2,x/1200)
rand()- random number generator. in range [-1,1). each call gives other
value.
randv(i)- random vector (with pseudo infinite integer cells). the values
are in range [-1,1). it's stays consistent only across the note
playback. so each note playback will get other vector (even on the same
key).
sinew- sine wave with period of 1.
saww- saw wave with period of 1.
squarew- square wave with period of 1.
trianglew- triangle wave with period of 1.
expw- exponent wave with period of 1.
expnw- another exponent wave with period of 1.
moogw- moog wave with period of 1.
moogsaww- moog-saw wave with period of 1.
you can use * % ^ / + - pow sin log pi etc.

* Xpressive Plug-In:
Added Release transition knob that control the "rel" variable. (the
duration of transit from 0 to 1)
Fixed some problems in the displays. (update display when changing
A1,A2,A3, clear display with invalid expression.

* X-Pressive Plug-In: Few more fixes
Changed the callbacks in exprfront.cpp to be templated.
Added help.
Added ExprTk.hpp.
some bug fixes (inf issues).
Added integrate function.

* Special version of ExprTk with modified license (BSL) for the LMMS project https://github.com/LMMS/lmms

* Xpressive Plug-In- fixed some building errors.
Added the "e" euler's constant.

* Xpressive Plug-In - fix mingw64 issues

* X-Pressive Plug-in:
Added "trel" (time since release) variable.
The integrate function can now have unlimited usage.
Added selective interpolation per wave.
Improved a little the random vector function.
Some other improvements, code cleaning, etc...

* Xpressive Plug-In:
move clearGraph definition into Graph.cpp.
fixed compilation errors. (oops..)

* X-Pressive plug-in: updated presets names

* X-Pressive plug-in
added semitone function, added sample-rate variable

* X-Pressive plug-in, code cleaning, changed the rendering function to
achieve performace gain.

* X-Pressive plug-in - fix the string counting function

* X-Pressive plug-in - until somebody will find a better solution,
exprtk.hpp is patched under the name exprtk.patched.hpp ...

* X-Pressive plug-in - fix compiling errors.

* X-Pressive plug-in - added patch file for exprtk.hpp,
added last function that gives last calculated samples.
moved ExprSynth to be with ExprFront for performance reasons.

* X-Pressive plugin - moved the patched file back to the source tree, added .gitignore file..

* X-Pressive plugin - fix compilation error. (isnan isinf)

* X-Pressive plugin - tried to fix embed.cpp problem,
added new variable to the parser (tempo)

* X-Pressive plugin - fixed cmake script

* X-Pressive plugin - updated the license and the diff file.

* Updates to ExprTk

* Added return statement enable/disable via parser settings

Added exprtk_disable_return_statement macro for disabling return statements and associated exceptions at the source code level.

* X-Pressive plugin - updated CMakeLists.txt to use the correct flags on each platform.
also added exprtk.hpp as a dependency for the patch command.
Updated the exprtk diff file.

* X-Pressive plugin - moved the enhanced features flag to the WIN64 installation.

* X-Pressive plugin - another fix for CMakeLists.txt

* Minor updates to ExprTk

Updated multi-sub expression operator to return final sub-expression type.
Updates to exprtk_disable_return_statement macro for disabling return statements and associated exceptions at the source code level.

* X-Pressive plug-in - added try-block around exprtk calls and enabled the
-fexceptions flag, so patch file is no longer needed.

* X-Pressive plug-in - small fix in CMakeLists.txt

* Update ExprTk to tip of branch.

* X-Pressive plugin - added graph drawing feature..

* Updating exprtk.hpp to the latest upstream version

PhysSong added a commit to PhysSong/lmms that referenced this pull request Jul 7, 2017

Xpressive plugin (LMMS#3259)
* First Preview of the X-Pressive Plugin
(exprtk.hpp is not included, get it from my exprtk fork in the branch
internal_data_functions)
available keys:
f- note's frequency. available only in the output expressions
t- time in seconds. in the Waves (W1,W2,W3) it's in the range [0,1)
key- the note's keyboard key. available only in the output expressions.
v- the note's velocity (divided by 255.0 so it is in the range [0,1]).
available only in the output expressions.
rel- gives 0 while the key is holded, and 1 after the key release.
available only in the output expressions.
A1,A2,A3- general purpose knobs (you can control them with the
automations). available only in the output expressions.
W1,W2,W3- precalculated wave forms. can be also load from file. you can
use them only in the output expressions
available functions:
cent(x)- gives pow(2,x/1200)
rand()- random number generator. in range [-1,1). each call gives other
value.
randv(i)- random vector (with pseudo infinite integer cells). the values
are in range [-1,1). it's stays consistent only across the note
playback. so each note playback will get other vector (even on the same
key).
sinew- sine wave with period of 1.
saww- saw wave with period of 1.
squarew- square wave with period of 1.
trianglew- triangle wave with period of 1.
expw- exponent wave with period of 1.
expnw- another exponent wave with period of 1.
moogw- moog wave with period of 1.
moogsaww- moog-saw wave with period of 1.
you can use * % ^ / + - pow sin log pi etc.

* Xpressive Plug-In:
Added Release transition knob that control the "rel" variable. (the
duration of transit from 0 to 1)
Fixed some problems in the displays. (update display when changing
A1,A2,A3, clear display with invalid expression.

* X-Pressive Plug-In: Few more fixes
Changed the callbacks in exprfront.cpp to be templated.
Added help.
Added ExprTk.hpp.
some bug fixes (inf issues).
Added integrate function.

* Special version of ExprTk with modified license (BSL) for the LMMS project https://github.com/LMMS/lmms

* Xpressive Plug-In- fixed some building errors.
Added the "e" euler's constant.

* Xpressive Plug-In - fix mingw64 issues

* X-Pressive Plug-in:
Added "trel" (time since release) variable.
The integrate function can now have unlimited usage.
Added selective interpolation per wave.
Improved a little the random vector function.
Some other improvements, code cleaning, etc...

* Xpressive Plug-In:
move clearGraph definition into Graph.cpp.
fixed compilation errors. (oops..)

* X-Pressive plug-in: updated presets names

* X-Pressive plug-in
added semitone function, added sample-rate variable

* X-Pressive plug-in, code cleaning, changed the rendering function to
achieve performace gain.

* X-Pressive plug-in - fix the string counting function

* X-Pressive plug-in - until somebody will find a better solution,
exprtk.hpp is patched under the name exprtk.patched.hpp ...

* X-Pressive plug-in - fix compiling errors.

* X-Pressive plug-in - added patch file for exprtk.hpp,
added last function that gives last calculated samples.
moved ExprSynth to be with ExprFront for performance reasons.

* X-Pressive plugin - moved the patched file back to the source tree, added .gitignore file..

* X-Pressive plugin - fix compilation error. (isnan isinf)

* X-Pressive plugin - tried to fix embed.cpp problem,
added new variable to the parser (tempo)

* X-Pressive plugin - fixed cmake script

* X-Pressive plugin - updated the license and the diff file.

* Updates to ExprTk

* Added return statement enable/disable via parser settings

Added exprtk_disable_return_statement macro for disabling return statements and associated exceptions at the source code level.

* X-Pressive plugin - updated CMakeLists.txt to use the correct flags on each platform.
also added exprtk.hpp as a dependency for the patch command.
Updated the exprtk diff file.

* X-Pressive plugin - moved the enhanced features flag to the WIN64 installation.

* X-Pressive plugin - another fix for CMakeLists.txt

* Minor updates to ExprTk

Updated multi-sub expression operator to return final sub-expression type.
Updates to exprtk_disable_return_statement macro for disabling return statements and associated exceptions at the source code level.

* X-Pressive plug-in - added try-block around exprtk calls and enabled the
-fexceptions flag, so patch file is no longer needed.

* X-Pressive plug-in - small fix in CMakeLists.txt

* Update ExprTk to tip of branch.

* X-Pressive plugin - added graph drawing feature..

* Updating exprtk.hpp to the latest upstream version

PhysSong added a commit to PhysSong/lmms that referenced this pull request Jul 7, 2017

Xpressive plugin (LMMS#3259)
* First Preview of the X-Pressive Plugin
(exprtk.hpp is not included, get it from my exprtk fork in the branch
internal_data_functions)
available keys:
f- note's frequency. available only in the output expressions
t- time in seconds. in the Waves (W1,W2,W3) it's in the range [0,1)
key- the note's keyboard key. available only in the output expressions.
v- the note's velocity (divided by 255.0 so it is in the range [0,1]).
available only in the output expressions.
rel- gives 0 while the key is holded, and 1 after the key release.
available only in the output expressions.
A1,A2,A3- general purpose knobs (you can control them with the
automations). available only in the output expressions.
W1,W2,W3- precalculated wave forms. can be also load from file. you can
use them only in the output expressions
available functions:
cent(x)- gives pow(2,x/1200)
rand()- random number generator. in range [-1,1). each call gives other
value.
randv(i)- random vector (with pseudo infinite integer cells). the values
are in range [-1,1). it's stays consistent only across the note
playback. so each note playback will get other vector (even on the same
key).
sinew- sine wave with period of 1.
saww- saw wave with period of 1.
squarew- square wave with period of 1.
trianglew- triangle wave with period of 1.
expw- exponent wave with period of 1.
expnw- another exponent wave with period of 1.
moogw- moog wave with period of 1.
moogsaww- moog-saw wave with period of 1.
you can use * % ^ / + - pow sin log pi etc.

* Xpressive Plug-In:
Added Release transition knob that control the "rel" variable. (the
duration of transit from 0 to 1)
Fixed some problems in the displays. (update display when changing
A1,A2,A3, clear display with invalid expression.

* X-Pressive Plug-In: Few more fixes
Changed the callbacks in exprfront.cpp to be templated.
Added help.
Added ExprTk.hpp.
some bug fixes (inf issues).
Added integrate function.

* Special version of ExprTk with modified license (BSL) for the LMMS project https://github.com/LMMS/lmms

* Xpressive Plug-In- fixed some building errors.
Added the "e" euler's constant.

* Xpressive Plug-In - fix mingw64 issues

* X-Pressive Plug-in:
Added "trel" (time since release) variable.
The integrate function can now have unlimited usage.
Added selective interpolation per wave.
Improved a little the random vector function.
Some other improvements, code cleaning, etc...

* Xpressive Plug-In:
move clearGraph definition into Graph.cpp.
fixed compilation errors. (oops..)

* X-Pressive plug-in: updated presets names

* X-Pressive plug-in
added semitone function, added sample-rate variable

* X-Pressive plug-in, code cleaning, changed the rendering function to
achieve performace gain.

* X-Pressive plug-in - fix the string counting function

* X-Pressive plug-in - until somebody will find a better solution,
exprtk.hpp is patched under the name exprtk.patched.hpp ...

* X-Pressive plug-in - fix compiling errors.

* X-Pressive plug-in - added patch file for exprtk.hpp,
added last function that gives last calculated samples.
moved ExprSynth to be with ExprFront for performance reasons.

* X-Pressive plugin - moved the patched file back to the source tree, added .gitignore file..

* X-Pressive plugin - fix compilation error. (isnan isinf)

* X-Pressive plugin - tried to fix embed.cpp problem,
added new variable to the parser (tempo)

* X-Pressive plugin - fixed cmake script

* X-Pressive plugin - updated the license and the diff file.

* Updates to ExprTk

* Added return statement enable/disable via parser settings

Added exprtk_disable_return_statement macro for disabling return statements and associated exceptions at the source code level.

* X-Pressive plugin - updated CMakeLists.txt to use the correct flags on each platform.
also added exprtk.hpp as a dependency for the patch command.
Updated the exprtk diff file.

* X-Pressive plugin - moved the enhanced features flag to the WIN64 installation.

* X-Pressive plugin - another fix for CMakeLists.txt

* Minor updates to ExprTk

Updated multi-sub expression operator to return final sub-expression type.
Updates to exprtk_disable_return_statement macro for disabling return statements and associated exceptions at the source code level.

* X-Pressive plug-in - added try-block around exprtk calls and enabled the
-fexceptions flag, so patch file is no longer needed.

* X-Pressive plug-in - small fix in CMakeLists.txt

* Update ExprTk to tip of branch.

* X-Pressive plugin - added graph drawing feature..

* Updating exprtk.hpp to the latest upstream version

zonkmachine added a commit to zonkmachine/lmms that referenced this pull request Oct 1, 2017

Xpressive plugin (LMMS#3259)
* First Preview of the X-Pressive Plugin
(exprtk.hpp is not included, get it from my exprtk fork in the branch
internal_data_functions)
available keys:
f- note's frequency. available only in the output expressions
t- time in seconds. in the Waves (W1,W2,W3) it's in the range [0,1)
key- the note's keyboard key. available only in the output expressions.
v- the note's velocity (divided by 255.0 so it is in the range [0,1]).
available only in the output expressions.
rel- gives 0 while the key is holded, and 1 after the key release.
available only in the output expressions.
A1,A2,A3- general purpose knobs (you can control them with the
automations). available only in the output expressions.
W1,W2,W3- precalculated wave forms. can be also load from file. you can
use them only in the output expressions
available functions:
cent(x)- gives pow(2,x/1200)
rand()- random number generator. in range [-1,1). each call gives other
value.
randv(i)- random vector (with pseudo infinite integer cells). the values
are in range [-1,1). it's stays consistent only across the note
playback. so each note playback will get other vector (even on the same
key).
sinew- sine wave with period of 1.
saww- saw wave with period of 1.
squarew- square wave with period of 1.
trianglew- triangle wave with period of 1.
expw- exponent wave with period of 1.
expnw- another exponent wave with period of 1.
moogw- moog wave with period of 1.
moogsaww- moog-saw wave with period of 1.
you can use * % ^ / + - pow sin log pi etc.

* Xpressive Plug-In:
Added Release transition knob that control the "rel" variable. (the
duration of transit from 0 to 1)
Fixed some problems in the displays. (update display when changing
A1,A2,A3, clear display with invalid expression.

* X-Pressive Plug-In: Few more fixes
Changed the callbacks in exprfront.cpp to be templated.
Added help.
Added ExprTk.hpp.
some bug fixes (inf issues).
Added integrate function.

* Special version of ExprTk with modified license (BSL) for the LMMS project https://github.com/LMMS/lmms

* Xpressive Plug-In- fixed some building errors.
Added the "e" euler's constant.

* Xpressive Plug-In - fix mingw64 issues

* X-Pressive Plug-in:
Added "trel" (time since release) variable.
The integrate function can now have unlimited usage.
Added selective interpolation per wave.
Improved a little the random vector function.
Some other improvements, code cleaning, etc...

* Xpressive Plug-In:
move clearGraph definition into Graph.cpp.
fixed compilation errors. (oops..)

* X-Pressive plug-in: updated presets names

* X-Pressive plug-in
added semitone function, added sample-rate variable

* X-Pressive plug-in, code cleaning, changed the rendering function to
achieve performace gain.

* X-Pressive plug-in - fix the string counting function

* X-Pressive plug-in - until somebody will find a better solution,
exprtk.hpp is patched under the name exprtk.patched.hpp ...

* X-Pressive plug-in - fix compiling errors.

* X-Pressive plug-in - added patch file for exprtk.hpp,
added last function that gives last calculated samples.
moved ExprSynth to be with ExprFront for performance reasons.

* X-Pressive plugin - moved the patched file back to the source tree, added .gitignore file..

* X-Pressive plugin - fix compilation error. (isnan isinf)

* X-Pressive plugin - tried to fix embed.cpp problem,
added new variable to the parser (tempo)

* X-Pressive plugin - fixed cmake script

* X-Pressive plugin - updated the license and the diff file.

* Updates to ExprTk

* Added return statement enable/disable via parser settings

Added exprtk_disable_return_statement macro for disabling return statements and associated exceptions at the source code level.

* X-Pressive plugin - updated CMakeLists.txt to use the correct flags on each platform.
also added exprtk.hpp as a dependency for the patch command.
Updated the exprtk diff file.

* X-Pressive plugin - moved the enhanced features flag to the WIN64 installation.

* X-Pressive plugin - another fix for CMakeLists.txt

* Minor updates to ExprTk

Updated multi-sub expression operator to return final sub-expression type.
Updates to exprtk_disable_return_statement macro for disabling return statements and associated exceptions at the source code level.

* X-Pressive plug-in - added try-block around exprtk calls and enabled the
-fexceptions flag, so patch file is no longer needed.

* X-Pressive plug-in - small fix in CMakeLists.txt

* Update ExprTk to tip of branch.

* X-Pressive plugin - added graph drawing feature..

* Updating exprtk.hpp to the latest upstream version
@zonkmachine

This comment has been minimized.

Show comment
Hide comment
@zonkmachine

zonkmachine Oct 1, 2017

Member

BTW, shouldn't it be merged to stable1.2?

I agree. In the works here: #3845

Member

zonkmachine commented Oct 1, 2017

BTW, shouldn't it be merged to stable1.2?

I agree. In the works here: #3845

@gnudles

This comment has been minimized.

Show comment
Hide comment
@gnudles

gnudles Sep 22, 2018

Contributor

You know, I think it can be nice to have a JavaScript version of this plugin. It can use the built-in JS support in Qt via QtScript. The performance issue should be considered, but it seems a very nice idea.
Recently, I did a demo with Qt outside of LMMS to play a note with QtScript (JS), and it responded well.
What do you think?

Contributor

gnudles commented Sep 22, 2018

You know, I think it can be nice to have a JavaScript version of this plugin. It can use the built-in JS support in Qt via QtScript. The performance issue should be considered, but it seems a very nice idea.
Recently, I did a demo with Qt outside of LMMS to play a note with QtScript (JS), and it responded well.
What do you think?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment