Skip to content
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

add sound effects #28

Open
truj opened this issue Apr 11, 2019 · 4 comments
Open

add sound effects #28

truj opened this issue Apr 11, 2019 · 4 comments
Assignees
Labels
enhancement midicapl For changes in the MidicaPL language

Comments

@truj
Copy link
Owner

truj commented Apr 11, 2019

Something more or less like this:
channel effect:what/function duration options
E.g. for a pitch band change affecting the whole channel:
0 effect:pitchband/sinus /2 amplitude=20, wavecount=2.5
Or for a polyphonic aftertouch graph affecting only one note:
0 effect:polypressure/line /2 from=-5, to=15, note=c+

@truj truj added the midicapl For changes in the MidicaPL language label Jul 22, 2019
@truj
Copy link
Owner Author

truj commented Aug 13, 2023

Most (but not all) sound effects will be MIDI controller changes.
Not always a function is required. Some controllers don't even support more values than true or false.
So here's a new idea:

Function (lowlevel syntax):

0 volume.sin(ampl=50;periods=5.3) *1

Function (compact syntax):

0: (volume.sin(ampl=50;periods=5.3;length=1))

Simple setting (lowlevel syntax):

0 volume.set=75 -

Simple setting (compact syntax):

0: (volume.set=75)

Not sure yet, if lowlevel syntax should be supported for this at all.

@truj
Copy link
Owner Author

truj commented Nov 25, 2023

Again a new idea - Pipelining:

Lowlevel:

0  bend.wait().line(64,127).wait().length(/2).line(127,64)  /4
0  c  /1+/1

Compact:
0: bend.wait().line(64,127).wait().length(/2).line(127,64) c:1+1

Meaning:

  • A C is played for two whole notes.
  • wait(): It stays unchanged for a quarter note
    • quarter because /4 in lowlevel and default in compact
  • line(64,127): The next quarter it is pitch-bended from the middle to maximum
    • pitch-bend because the first bend determines the effect
  • wait(): It stays at maximum for a quarter note
  • length(/2): sets the length to a half note for following pipeline functions
  • line(127,64): during the next half note the bend is reduced from maximum to the middle again
  • the rest of the note is untouched

I think this is better then the option-like syntax (any.thing(value)). There are too many braces.

Also another idea for setters and binary controllers: These can also be implemented as functions, just like line() or sin():
0: hold.on() c d e hold.off() c d e volume.set(127) c d e volume.set(30%) c d e

A possibility to address controllers or RPNs by number:
ctrl=7.sin(20,60,4.3)
rpn=0.set(6)
This addresses controller 7 (volume) or RPN 0 (pitch bend sensitivity)

@truj truj self-assigned this Nov 28, 2023
truj added a commit that referenced this issue Nov 29, 2023
- work in progress
- #28
truj added a commit that referenced this issue Dec 17, 2023
@truj
Copy link
Owner Author

truj commented Dec 17, 2023

Maybe pipelining is the wrong wording. Such a call chain should be renamed to effect flow (or maybe 'chaining'?). This also applies for the class, variables and placeholders.

truj added a commit that referenced this issue Dec 17, 2023
truj added a commit that referenced this issue Dec 27, 2023
- added line(), sin(), cos(), nsin(), ncos()
- work in progress
- #28
@truj
Copy link
Owner Author

truj commented Dec 27, 2023

Not to be forgotten:

  • call closeFlowIfPossible() from the parser
  • poly_at / mono_at (special treatment)
  • pitch bend (special treatment with a parameter for half-tone-steps - connected to pitch bend range)
  • nestable blocks and functions - make sure it works there as well
  • patterns !!! - very important. Special treatment for aftertouch notes (support indices)

truj added a commit that referenced this issue Jan 4, 2024
- enabled function parameters as halftones (int or float)
- enabled function parameters as MSB/LSB
- added FatalParseException (used for source code problems)
- implemented creation of RPN / NRPN messages
- added special treatment of pitch bend range and pitch bend
- #28
truj added a commit that referenced this issue Jan 5, 2024
- made java home path configurable in the precommit hook
- fixed documentation bug (required java version: 1.8 or higher)
- small improvement for sound effect tests (#28)
truj added a commit that referenced this issue Jan 23, 2024
- implemented mono_at and poly_at
- enabled poly_at and port_ctrl using .note()
- enabled effects within patterns
- for poly_at and port_ctrl in patterns:
  - using note index as parameter for .note()
- added mono_mode and poly_mode
- added more unit tests
- #28
truj added a commit that referenced this issue Feb 4, 2024
- added half tone steps for coarse/fine tuning
- renamed some effects
- made portamento unit tests more audible
- bugfix in message classifier
- #28
truj added a commit that referenced this issue Feb 19, 2024
- implemented controller destination
- renamed bend to pitch
- renamed bend_range to pitch_range
- fixed minor code formatting issues
- #28
truj added a commit that referenced this issue Feb 26, 2024
- implemented + sign
- forced usage of signed or unsigned parameters, according to the value type
- added flex type to allow both (signed/unsigned) parameters
- #28
truj added a commit that referenced this issue Mar 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement midicapl For changes in the MidicaPL language
Projects
None yet
Development

No branches or pull requests

1 participant