Sonic Pi - Controlando via MIDI

Descrevemos abaixo duas técnicas diferentes para controlar o Sonic Pi com o movimento do mouse. O mouse controlará uma ou mais variáveis, que por sua vez, podem controlar notas a serem tocadas, parâmetros de efeitos, velocidade do andamento da música, etc.

Técnica 1

https://github.com/samaaron/sonic-pi/issues/1108

A técnica 1 consiste em rodar um servidor Ruby e enviar os dados do mouse para o Sonic Pi.
Para criar o servidor Ruby:

1) Salve o texto do bloco abaixo em um arquivo de texto simples com o nome druby.rb
2) Abra o terminal de comandos do sistema operacional e execute o arquivo druby.rb escrevendo seu endereço e nome.
3) Cole o texto do segundo bloco diretamente no Sonic Pi e clique em Run para executar o código.

# part 1
# Ruby code. Save this text on druby.rb and run in Terminal

require 'drb/drb'
require 'mouse'

# The URI for the server to connect to
URI="druby://localhost:8787"

class MouseServer

  def get_MouseLocation
    return Mouse.current_position.to_a
  end

  def get_MouseX
    return Mouse.current_position.to_a[0].to_i
  end

  def get_MouseY
    return Mouse.current_position.to_a[1].to_i
  end

end

FRONT_OBJECT=MouseServer.new
$SAFE = 1 

DRb.start_service(URI, FRONT_OBJECT)

DRb.thread.join
# part 2

require 'drb/drb'

######## talk to the server ########

SERVER_URI="druby://localhost:8787"
DRb.start_service

mouse = DRbObject.new_with_uri(SERVER_URI)
#mouseLocation = mouse.get_MouseLocation
#mouseX = mouse.get_MouseX
#mouseY = mouse.get_MouseY

### Using Mousemovement to control the cutoff-value ###

live_loop :mouse_cutoff do
  mouseX = mouse.get_MouseX
  s = sample :loop_amen, cutoff: ((130.0/1400.0)*mouseX)
  100.times do
    sleep 0.01
    mouseX = mouse.get_MouseX
    s.control cutoff: ((130.0/1400.0)*mouseX)
  end
end

Técnica 2
Sonic Pi reading from a socket, Andy Brush