ruby-gnome2-hiki-pt_BR****@sourc*****
ruby-gnome2-hiki-pt_BR****@sourc*****
2004年 4月 11日 (日) 07:45:31 JST
------------------------- REMOTE_ADDR = 200.216.145.78 REMOTE_HOST = URL = http://ruby-gnome2.sourceforge.jp/pt_BR/?tut-gst-helloworld ------------------------- = Ruby/GStreamer: OlMundo {{link("tut-gst-elements-state", nil, "tut-gst", "tut-gst-helloworld-conclusion")}} Criaremos uma primeira aplica艫o simples, um tocador completo de MP3, usando os componentes de GStreamer padrs. O tocador lerde um arquivo que seja fornecido como o primeiro argumento para o programa. == O Cigo require 'gst' Gst.init unless ARGV.length == 1 $stderr.puts "Uso: #{__FILE__} <arquivo mp3>" exit 1 end # cria um novo "pipeline" para guardar os elementos pipeline = Gst::Pipeline.new # cria um leitor de disco filesrc = Gst::ElementFactory.make("filesrc") filesrc.location = ARGV.first # agora hora de pegar o decodificador decoder = Gst::ElementFactory.make("mad") # e um "sink" de 疼dio audiosink = Gst::ElementFactory.make("osssink") # adiciona objetos ao "pipeline" principal pipeline.add(filesrc, decoder, audiosink) # conecta os elementos filesrc >> decoder >> audiosink # inicia a tocar pipeline.play while pipeline.iterate do end # para o "pipeline" pipeline.stop == O Cigo Explicado Vamos atrav駸 deste exemplo passo a passo. A primeira coisa que voctem que fazer carregar a biblioteca Ruby/GStreamer e inicializar o framework. require 'gst' Gst.init ... Iremos criar um "pipeline" vazio. Como vocviu na introdu鈬o b疽ica, esse "pipeline" guardare gerenciartodos os elementos que n iremos carregar nele. ... # cria um novo "pipeline" para guardar os elementos pipeline = Gst::Pipeline.new ... A gente usa o construtor padr縊 para um "pipeline": Gst::Pipeline.new. A gente ent縊 cria um elemento de origem de disco. O elemento de origem de disco capaz de ler de um arquivo. A gente usa o mecanismo padr縊 de propriedade de GLib::Object para configurar uma propriedade do elemento: o arquivo de onde serlido. ... # cria um leitor de disco filesrc = Gst::ElementFactory.make("filesrc") filesrc.location = ARGV.first ... ((*Nota*)) Vocpode verificar se filesrc.nil? para verificar a cria鈬o do elemento de origem de disco. Agora a gente cria o elemento decodificador de MP3. Isso assume que o plugin 'mad' estinstalado no sistema onde a aplica鈬o for executada. ... # agora hora de pegar o decodificador decoder = Gst::ElementFactory.make("mad") ... O Gst::ElementFactory.make pode levar dois argumentos: uma string que iridentificar o elemento que vocprecisa e um segundo argumento: como vocquer nomear o elemento. O nome do elemento aldo que vocpode escolher e pode ser usado para recuperar o elemento de um "bin/pipeline". Aqui a gente escolheu n縊 fornecer um nome para o elemento, isso significa que o GStreamer irgerar automaticamente um nome para a gente. Finalmente a gente cria o nosso elemento "sink" de 疼dio. Esse elemento sercapaz de tocar o 疼dio usando OSS. ... # e um "sink" de 疼dio audiosink = Gst::ElementFactory.make("osssink") ... A gente ent縊 adiciona os elementos ao "pipeline". ... # adiciona objetos ao "pipeline" principal pipeline.add(filesrc, decoder, audiosink) ... A gente conecta os diferentes "pads" dos elementos, assim: ... # conecta os elementos filesrc >> decoder >> audiosink ... Agora a gente criou um "pipeline" completo. A gente pode visualizar o "pipeline" como a seguir: {{image_left("en:hello-world.png")}} {{br}} Tudo estconfigurado para come軋r a tocar. A gente usa os cigos a seguir para alterar o estado do "pipeline": ... # inicia a tocar pipeline.play ... ((*Nota*)) O GStreamer cuidardos estados "READY" e "PAUSED" para vocao sair de "NULL" para "PLAYING". Como a gente n縊 usa threads, nada vai acontecer ainda. A gente tem que chamar Gst::Bin#iterate para executar uma itera鈬o do "pipeline". ... while pipeline.iterate do end ... O m騁odo Gst::Bin#iterate retornar"true" a menos que algo interessante tenha ocorrido dentro do "pipeline". Quando o final do arquivo foi alcan軋do, o m騁odo Gst::Bin#iterate retornar"false" e aa gente pode finalizar o loop. ... # para o "pipeline" pipeline.stop ((*Nota*)) N縊 esque軋 de para o "pipeline" ap o uso. Isso liberartodos os recursos seguros pelos elementos. == Executando o OlMundo Apenas salve o cigo em um arquivo chamado (({helloworld.rb})) e fa軋: ruby helloworld.rb foo.mp3