# What are your favorite fx combo in Sonic Pi?

**URL:** <https://in-thread.sonic-pi.net/t/what-are-your-favorite-fx-combo-in-sonic-pi/7043>\
**Category:** Creations & Ideas\
**Created:** [August 27, 2022, 6:27pm UTC](https://in-thread.sonic-pi.net/t/what-are-your-favorite-fx-combo-in-sonic-pi/7043 "2022-08-27T18:27:27Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Relaxnow](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/relaxnow/32/2172_2.png) [@Relaxnow](https://in-thread.sonic-pi.net/u/Relaxnow)\
**Post date:** [August 27, 2022, 6:27pm UTC](https://in-thread.sonic-pi.net/t/what-are-your-favorite-fx-combo-in-sonic-pi/7043/1 "2022-08-27T18:27:27Z")

</div>

Hi all

What are your favorite fx combo in Sonic Pi?

Kind regards  
Relaxnow

---

<div class="post-metadata">

**Author:** ![baya](https://avatars.discourse-cdn.com/v4/letter/b/858c86/32.png) [@baya](https://in-thread.sonic-pi.net/u/baya)\
**Post date:** [September 1, 2022, 5:30pm UTC](https://in-thread.sonic-pi.net/t/what-are-your-favorite-fx-combo-in-sonic-pi/7043/2 "2022-09-01T17:30:50Z")

</div>

Hi  
disto and flanger

```ruby
live_loop :melo do
  notes = (scale :gb3 ,:aeolian ,num_octaves:1 ).shuffle
  
  with_fx :distortion ,distort:0.9 ,mix:1 do
    with_fx :flanger ,feedback:0,mix:1 do
      with_fx :krush ,cutoff:130 ,gain:rrand(1,3000),mix:1 do
        n = synth:piano,attack:2,note:notes.tick
        sleep 0.425
      end
    end
  end
end

```

and you?

---

<div class="post-metadata">

**Author:** ![Relaxnow](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/relaxnow/32/2172_2.png) [@Relaxnow](https://in-thread.sonic-pi.net/u/Relaxnow)\
**Post date:** [September 1, 2022, 10:33pm UTC](https://in-thread.sonic-pi.net/t/what-are-your-favorite-fx-combo-in-sonic-pi/7043/3 "2022-09-01T22:33:55Z")

</div>

Hi Baya  
I’m just starting to explore fx  
Right now it’s something like this

> chooseFxRack = 3 or 4 in the code below

I also think flanger with feedback are fun to explore

Kind regards  
Relaxnow

By the way, as a newbie I’m wondering  
A) Why do I need to stop/start the code to get the fx chain below to take effect? Answer: It’s a thread  
B) What are a better way of doing this, so I can change the current fx in the thread? Just found " 7.2 - Controlling FX" section [Sonic Pi - Tutorial](https://sonic-pi.net/tutorial.html#section-7-2) I’m gonna read up on that. As I understand it now, I need to control the fx effects from inside the live\_loop.

```ruby
# 220902 0023 bitcrusher saw bass divide by 17 (not done)
# 220902 0023 saved

use_bpm 200

live_loop :time, delay: 0.01 do
  sleep 1
end

# --- fx mixer --- start
chooseFxRack = 1 # stop/start to take fx effect # change here
#
# Idea: Turn on/off fx chain - not done yet
#
# 0)
# 1) ixi_techno place 1 + flanger heavy
# 2) + distort by moving ixi_techno to place 2
# 3) bitchrusher 0.8
# 4) bitchrusher 1.2 + ixi_techno (a bit much ^^)

case chooseFxRack
when 0
  my_ixi_1 = 0
  my_ixi_2 = 0
  
  my_bit8 = 0
  my_bit12 = 0
  
when 1
  my_ixi_1 = 1
  my_ixi_2 = 0
  
  my_bit8 = 0
  my_bit12 = 0
  
when 2
  my_ixi_1 = 0
  my_ixi_2 = 1
  
  my_bit8 = 0
  my_bit12 = 0
  
when 3
  my_ixi_1 = 0
  my_ixi_2 = 0
  
  my_bit8 = 1
  my_bit12 = 0
  
when 4
  my_ixi_1 = 1
  my_ixi_2 = 0
  
  my_bit8 = 0
  my_bit12 = 1
end
# --- fx mixer --- end

with_fx :level, amp: 0.7 do
  
  with_fx :bitcrusher, bits: 1.2, mix: my_bit12 do
    with_fx :ixi_techno, mix: 0.8, phase_offset: 0.2, mix: my_ixi_1 do # 1) Place 1 or 2
      with_fx :flanger, depth: 0.6, wave: 2 do
        with_fx :distortion, distort: 0.99 do
          with_fx :bitcrusher, bits: 0.8, mix: my_bit8 do
            with_fx :ixi_techno, mix: 0.8, phase_offset: 0.2, mix: my_ixi_2 do # 2) Place 1 or 2
              
              
              notesA =:c2 # :c2 :f2 :g2 :1
              diff = 1 # 1/-2 1/3 -2 3
              
              ### notesB =:cs2 #+5-12+4 # Not used anymore
              
              
              live_loop :bass1, sync: :time do
                #stop
                use_synth :saw
                3.times do
                  10.times do
                    play notesA, release: rrand(0.15,0.75), cutoff: rrand(70,110), pan: 0.5 if spread(3,5).tick
                    sleep 0.5
                  end
                  
                  7.times do
                    play notesA+diff, release: rrand(0.15,0.75), cutoff: rrand(70,110), pan: 0.5 if spread(5,7).tick
                    sleep 0.5
                  end
                end
                #sleep 1
              end
              
              live_loop :bass2, sync: :time do
                #stop
                use_synth :saw
                3.times do
                  10.times do
                    play notesA+12+12, release: rrand(0.15,0.75), cutoff: rrand(70,110), pan: -0.5 if spread(4,5).tick
                    sleep 0.5
                  end
                  7.times do
                    play notesA+diff+12+12, release: rrand(0.15,0.75), cutoff: rrand(70,110), pan: -0.5 if spread(4,7).tick
                    sleep 0.5
                  end
                end
                #sleep 1
              end
            end # end :bitcrusher 0.8
          end # end :bitcrusher 1.2
        end # end :flanger
      end # end :ixi1
    end # end :ixi2
  end # end :distortion
end # end :level

live_loop :kick1, sync: :time do
  #stop
  sample 25, cutoff: rrand(70,90), amp: 4
  sleep 2
  sample 25, cutoff: rrand(70,90), amp: 4
  # sample 133, cutoff: rrand(70,90), amp: 4, rate: 2
  sleep 2
end

live_loop :kick2, sync: :time do
  stop
  3.times do
    sample 25, cutoff: rrand(100,110), amp: 3
    sleep 0.5
  end
  sleep 5
  sleep 0.5*3
end

live_loop :kick2, sync: :time do
  5.times do
    sample 25, cutoff: rrand(100,110), amp: 3 if spread(3,5).tick
    sleep 0.5
  end
  sleep 0.5*10
  #sleep 0.5*3
end

```

---

<div class="post-metadata">

**Author:** ![Relaxnow](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/relaxnow/32/2172_2.png) [@Relaxnow](https://in-thread.sonic-pi.net/u/Relaxnow)\
**Post date:** [September 4, 2022, 8:03pm UTC](https://in-thread.sonic-pi.net/t/what-are-your-favorite-fx-combo-in-sonic-pi/7043/4 "2022-09-04T20:03:28Z")

</div>

How to control fx effect in Sonic Pi from inside a live\_loop with “control”

[![](https://img.youtube.com/vi/iInSVo0JlTY/maxresdefault.jpg "How to control fx effect in Sonic Pi from inside a live loop with control") ](https://www.youtube.com/watch?v=iInSVo0JlTY)

```ruby
# 220904 2249 Learning how to control fx effect from inside a live_loop with control
# YT https://youtu.be/iInSVo0JlTY

# https://in-thread.sonic-pi.net/t/what-are-your-favorite-fx-combo-in-sonic-pi/7043/3

# "7.2 - Controlling FX"
# https://sonic-pi.net/tutorial.html#section-7-2

use_bpm 120

live_loop :time, delay: 0.01 do
  sleep 1
end

with_fx :level, amp: 4 do
  
  with_fx :distortion do |dist|
    with_fx :flanger do |flan|
      with_fx :bitcrusher do |bitc|
        with_fx :reverb do |reve|
          
          
          live_loop :synth1, sync: :time do
            #stop
            use_synth :saw
            tick
            
            #Song structure
            PartA = 32
            PartB = 16
            
            play knit(:c2,PartA, :cs2,PartB, :c2,PartB).look,
              release: 0.25 if spread(7,16).look
            sleep 0.25
            
            
            ### fx mixer ###
            
            ## distortion
            puts d = range(0,1, step: 0.025).mirror.look
            control dist, distort: d  
            
            ## flanger feedback
            puts d = rrand(0.1,0.7)   
            control flan, feedback: d
            
            ## bitcrusher
            puts d = knit(0.1,16, 1,2).look
            control bitc, bits: d
            
            ## controlling reverb
            puts d = knit(0,32, 0.8,4).look
            control reve, room: d
            # starting with 0 room and mixing room in later,
            # so it doesnt get to messy
            control reve, mix: knit(0,32, 0.3, 16).look
            
          end
          
        end #end :reverb
      end #end :flanger
    end #end :distotion
  end #end :bitcrusher
  
  live_loop :kick do
    9.times do
      sample :bd_haus, cutoff: 85
      sleep 1
    end
    sleep 1*7
  end
  
end #end :level

```

---

<div class="post-metadata">

**Author:** ![Relaxnow](https://dub1.discourse-cdn.com/flex017/user_avatar/in-thread.sonic-pi.net/relaxnow/32/2172_2.png) [@Relaxnow](https://in-thread.sonic-pi.net/u/Relaxnow)\
**Post date:** [September 5, 2022, 10:26pm UTC](https://in-thread.sonic-pi.net/t/what-are-your-favorite-fx-combo-in-sonic-pi/7043/5 "2022-09-05T22:26:09Z")

</div>

Exploring controlling fx inside live\_loop in drum seq’s

# Hmm. I still need to stop/start code to get the fx to take effect?

Run code with  
my\_fx = 0 (no reverb since mix = 0)

change my\_fx=1  
Run code

Trouble: No effect on sound.

Stop/run code. Now it’s with effect. How do I get code to change effect with no stopping?

```ruby
# 220906 0525 drum seq created with split on amp (nice fx)
# Jumping off point https://in-thread.sonic-pi.net/t/can-someone-build-an-efficient-drum-machine/775/15?u=relaxnow
# I have add'ed fx effects

use_bpm 120

def beats(pat)
  pat.delete(' ').split('').map(&:to_i).ring
end

patt = {
  :bd_klub => "9--5 --5- ---- -3-- 9--- ---- 9--- ----",
  :drum_snare_soft => "---- ---3 9--- ---- ---- ---- --33 9---",
  :perc_snap2 => "9--- --11 11-- ---- 5--- 5-11 11-- 9---",
  :elec_flip => "--5- ---- --5- --5- --5- ---- --5- --5-",
  # :bd_boom => "9-3--"
}

with_fx :level, amp: 4 do
  
  with_fx :distortion do |distortion|
    with_fx :bitcrusher do |bitcrusher|
      with_fx :reverb do |reverb|
        
        
        
        live_loop :main do
          tick#(step: [0,1,1,1,1,1,2].choose) # change step of tick randomly for nice effect
          patt.each{ |key, val| sample key, amp: beats(val).look / 10.0 }
          sleep 0.25
          
          
          my_fx = 0 # Manual pick fx pattern # change here
          # # 0 = No effect since mix = 0
          # # 1 = rrand()
          # # 2 = range()
          
          #my_fx = rrand_i(0,2) # Auto pick fx pattern # change here
          
          case my_fx
          when 0
            mix = 0 # No effect since mix = 0
            r1 = 0.5
            r2 = 0.5
            r3 = 1
          when 1
            mix = 0.5
            r1 = rrand(0.1,0.9)
            r2 = 0.9#rrand(0.1,0.9)
            r3 = 0.5
          when 2
            mix = 0.5
            puts r1 = range(0.1,0.9, step: 0.01).tick(:r1)
            puts r2 = range(0.9,0.1, step: -0.05).tick(:r1)
            r3 = 0.5
          end
          
          
          control distortion, mix: mix
          control distortion, distort: r1#, mix: mix
          
          control bitcrusher, mix: mix
          control bitcrusher, bits: r2#, mix: mix
          
          control reverb, mix: mix
          control reverb, room: r3#, mix: mix
          
          
        end
        
      end
    end
  end
  
end

```
