Tremolo effect

Bug #1299026 reported by RJ Skerry-Ryan
12
This bug affects 2 people
Affects Status Importance Assigned to Milestone
Mixxx
Fix Released
Wishlist
Johan Lasperas

Bug Description

We should find a nice FLOSS gater effect or write one.

Tags: effects
RJ Skerry-Ryan (rryan)
Changed in mixxx:
milestone: none → 1.12.0
tags: added: effects
RJ Skerry-Ryan (rryan)
Changed in mixxx:
status: New → Confirmed
importance: Undecided → Wishlist
Revision history for this message
Phillip Whelan (pwhelan) wrote :

There is a great one that was implemented for Buzz Machines: https://github.com/Buzztrax/buzzmachines/blob/master/Arguru/GoaSlicer/goaslicer.cpp.

Unfortunately I was unable to find a license that applies to it. I remember though that when I tried to implement it I needed to know the current BPM and the sample(s) at which beat boundaries occur.

Revision history for this message
RJ Skerry-Ryan (rryan) wrote :

Kicking to 1.13.0 unless there is a candidate for 1.12.0 that emerges soon!

Changed in mixxx:
milestone: 1.12.0 → 1.13.0
Revision history for this message
Johan Lasperas (johan-lasperas) wrote :

I started looking into implementing this feature, I think it should be manageable and fun enough to begin being involved in the development.
As I see it, applying a (smoothed) square envelope on the signal is a good solution as a first shot. Currently testing this, with a rate & a shape (=duty cycle) parameters.

Revision history for this message
Be (be.ing) wrote :

Cool, thanks for taking this up! If you'd like feedback before it is finished, open a pull request on GitHub and note in the description that it's a work in progress. I suspect that following the example of the Echo effect's Time parameter for this effect's Rate parameter would make sense. The Echo effect's Time parameter has a short range with a linear scale rounded to the nearest 1/4 beat. The code of the Echo effect is here:
https://github.com/mixxxdj/mixxx/blob/master/src/effects/native/echoeffect.cpp#L144

Revision history for this message
Johan Lasperas (johan-lasperas) wrote :

I've got something rather straightforward and sounding good by implementing a simplified noise gate :

A trigger is generated depending on the rate parameter (1/8, 1/4, 1/2 or 1 beat right now, can be extended to free rate, or patterns)

The gate outputs an Attack-Hold-Release linear gain curve when triggered, applied to the signal.
Hold time is given by a shape parameter knob, while attack & release slope depend on the rate.

While playing around, I realized that when many channels are active on the same effect group, they are all processed serially (numSamples Ch1, then numSamples Ch2, then numSamples Master, ..), which is annoying when trying to keep the effect group State consistent between two buffers of the same channel.
A simple example is to enable a time-dependent effect (echo for example) on Ch1, then to enable a second channel on the same effect (Master or a playing deck on Ch2) : the rate is doubled.

One solution would be to keep a state per channel in the GroupState (in this case : channel gains, channel gate states, ..), and use the given channel handle in processChannel to access them, but I haven't seen any other effect implementation keeping channels independent this way (the ChannelHandle is always disregarded).

Any thoughts on that ?

Revision history for this message
Be (be.ing) wrote :

Keeping state per channel is exactly what the GroupState is for. Add whatever variables you need to the GroupState.

Revision history for this message
Be (be.ing) wrote :

I'm curious to play with this effect placed in a chain before Echo :)

Changed in mixxx:
assignee: nobody → Johan Lasperas (johan-lasperas)
Revision history for this message
Johan Lasperas (johan-lasperas) wrote :
jus (jus)
Changed in mixxx:
status: Confirmed → In Progress
Be (be.ing)
Changed in mixxx:
status: In Progress → Fix Committed
Be (be.ing)
summary: - gater effect
+ Tremolo effect
Changed in mixxx:
status: Fix Committed → Fix Released
Revision history for this message
Swiftb0y (swiftb0y) wrote :

Mixxx now uses GitHub for bug tracking. This bug has been migrated to:
https://github.com/mixxxdj/mixxx/issues/7386

lock status: Metadata changes locked and limited to project staff
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.