Controlando o Winamp pelo Rails

Aproveitando o artigo de Daniel (esse), fiz um controle para o Winamp pelo Rails. Onde acessamos um site com alguns controles…

Coloquei esse arquivo na pasta “components”:

“winamp.rb”

  1. require ‘Win32API’
  2. class Winamp
  3. WM_COMMAND = 0x0111
  4. WA_NOTHING = 0
  5. WA_PLAY = 40045
  6. WA_STOP = 40047;
  7. WA_PAUSE = 40046;
  8. WA_PREVTRACK = 40044;
  9. WA_NEXTTRACK = 40048;
  10. WA_PLAYLISTLEN = 124;
  11. WA_SETVOLUME = 122 ;
  12. WA_SETPLAYLISTPOS = 121;
  13. WA_CLEARPLAYLIST = 101;
  14. WA_RESTART = 135;
  15. WA_GETSTATUS = 104;
  16. WA_REFRESHPLCACHE = 247;
  17. WA_SETSHUFFLESTATUS = 252;
  18. WA_SETREPEATSTATUS = 253;
  19. WA_VOLUMEUP = 40058;
  20. WA_VOLUMEDOWN = 40059;
  21. class << self
  22. def novo_metodo(metodo, &proc)
  23. define_method(metodo) { instance_eval &proc if @handle }
  24. end
  25. end
  26. def initialize
  27. @handle = find_window(‘Winamp v1.x’, 0)
  28. end
  29. novo_metodo :vol_mais do send_message(@handle, WM_COMMAND, WA_VOLUMEUP, WA_NOTHING) end
  30. novo_metodo :vol_menos do send_message(@handle, WM_COMMAND, WA_VOLUMEDOWN, WA_NOTHING) end
  31. novo_metodo :play do send_message(@handle, WM_COMMAND, WA_PLAY, WA_NOTHING) end
  32. novo_metodo :stop do send_message(@handle, WM_COMMAND, WA_STOP, WA_NOTHING) end
  33. novo_metodo :pause do send_message(@handle, WM_COMMAND, WA_PAUSE, WA_NOTHING) end
  34. novo_metodo :faixa_anterior do send_message(@handle, WM_COMMAND, WA_PREVTRACK, WA_NOTHING) end
  35. novo_metodo :faixa_seguinte do send_message(@handle, WM_COMMAND, WA_NEXTTRACK, WA_NOTHING) end
  36. private
  37. def send_message(*args)
  38. Win32API.new(“user32”, “SendMessage”, [‘L’] * 4, ‘L’).call *args
  39. end
  40. def find_window(*args)
  41. Win32API.new(‘user32’,‘FindWindow’, ‘PI’, ‘I’).call *args
  42. end
  43. end

Depois criei um controle: “winamp”

  1. class WinampController < ApplicationController
  2. @@winamp = Winamp.new
  3. def index
  4. end
  5. def play
  6. @@winamp.play
  7. redirect_to(:action => “index”)
  8. end
  9. def stop
  10. @@winamp.stop
  11. redirect_to(:action => “index”)
  12. end
  13. def pause
  14. @@winamp.pause
  15. redirect_to(:action => “index”)
  16. end
  17. def next
  18. @@winamp.faixa_seguinte
  19. redirect_to(:action => “index”)
  20. end
  21. def preview
  22. @@winamp.faixa_anterior
  23. redirect_to(:action => “index”)
  24. end
  25. def vol_mais
  26. 6.times {@@winamp.vol_mais}
  27. redirect_to(:action => “index”)
  28. end
  29. def vol_menos
  30. 6.times {@@winamp.vol_menos}
  31. redirect_to(:action => “index”)
  32. end
  33. end

Criaremos agora o “index.rhtml” do metodo index do controle winamp:

  1. <img src=http://munichshardesthits.com/pics/winamp_logo.jpg&#8217; />
  2. Winamp Controle 1.0
  3. <table>
  4. <tr>
  5. <td>
  6. <%= start_form_tag :action => ‘play’ %>
  7. <%= submit_tag “Play” %>
  8. <%= end_form_tag %>
  9. </td>
  10. <td>
  11. <%= start_form_tag :action => ‘stop’ %>
  12. <%= submit_tag “Stop” %>
  13. <%= end_form_tag %>
  14. </td>
  15. <td>
  16. <%= start_form_tag :action => ‘pause’ %>
  17. <%= submit_tag “Pause” %>
  18. <%= end_form_tag %>
  19. </td>
  20. <td>
  21. <%= start_form_tag :action => ‘preview’ %>
  22. <%= submit_tag “Preview” %>
  23. <%= end_form_tag %>
  24. </td>
  25. <td>
  26. <%= start_form_tag :action => ‘next’ %>
  27. <%= submit_tag “Next” %>
  28. <%= end_form_tag %>
  29. </td>
  30. <td>
  31. <%= start_form_tag :action => ‘vol_mais’ %>
  32. <%= submit_tag “+” %>
  33. <%= end_form_tag %>
  34. </td>
  35. <td>
  36. <%= start_form_tag :action => ‘vol_menos’ %>
  37. <%= submit_tag “-“ %>
  38. <%= end_form_tag %>
  39. </td>
  40. <tr>
  41. </table>

colocar no environment.rb

require ‘winamp’

Blz Pessoal, terminamos aqui… Aqui na empresa usei esse esquema para qualquer pessoa controlar o Winamp que fica em outra sala… podendo escolher, diminuir ou aumentar o som…

Ainda não sei se foi uma boa ideia😛 !

Estava querendo ver se conseguia retornar a lista das musicas no site ! Quem puder ajudar… sera bem vindo !😀

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s