Notícias:

SMF - Just Installed!

Menu principal

Áudio e vídeo em Prisma

Iniciado por adalberto, Setembro 07, 2015, 04:58:12 PM

tópico anterior - próximo tópico

adalberto

Para funcionar corretamente baixe a atualização Prisma do dia 7/09/15 ou superior.

Download: http://linguagemprisma.br4.biz/blog/igvlc-biblioteca-audio-e-video-basica/



Versão 0.1 – igvlc.dll e vlc.pris são as bibliotecas de funções para criação de players de música e vídeo em Prisma:



Para usar basta instalar a lib igvlc, e no início de seu programa incluir o comando: inclua'vlc' ;

O tamanho dessa lib é um pouco extenso devido a pasta de plugins, cerca de 17MB compactado em 7z. A vantagem é que muitos formatos de áudio e vídeo podem ser tocados sem problemas, desde um simples mp3 até mp4 ou avi.

Arquivos locais ou de servidores podem ser abertos com as funções:

midia = vlc.midia_com_arquivo( inst_vlc , 'nome.avi') //local

midia = vlc.midia_locacao( inst_vlc , 'http//site.net/arquivo.mp4′ );

Comece já a criar seu próprio player.


Exemplo de áudio sem interface gráfica:



Prisma



  vlc = inclua'vlc'
 
  // criando uma instancia (objeto) vlc
    inst = vlc.crie();

    // crie uma midia a partir de um arquivo
    m = vlc.midia_com_arquivo(inst, "teste.mp3");
    //experimente tambem criar a partir de uma url:
    //m = vlc.midia_locacao( inst , 'http://nome_site.net/destino/musica.mp3')

    // crie um player a partir da midia criada acima.
    mp = vlc.midia_player_com_midia(m);

    // nao precisamos mais da midia, entao liberamos da memoria:
    vlc.midia_destrua(m);

    // comeca a tocar o player
    vlc.midia_player_play(mp);

    sis.durma(20000); //espera por 20 segundos, enquanto toca a musiquinha

    // parando a musica
    vlc.midia_player_pare(mp);

    // liberando da memoria o player e a instancia:
    vlc.midia_player_destrua(mp);

    vlc.destrua(inst);







Exemplo de áudio com interface:

Prisma




//simples player por Adalberto AF
//licença: livre para usar, modificar, comercializar.

//primeiro vamos importar as bibliotecas necessárias:

inclua'igbr'; //esta para interface gráfica
vlc = inclua'vlc'; //esta para multimídia

//crie uma janela com titulo, largura e altura:
janela = ig.janela('teste audio' , 500 , 250 );
ig.janela_destrua( janela ); //para fechar corretamente

//crie um conteiner fixo para adicionar os componentes
fixo = ig.fixo();
ig.ad( janela , fixo); //ad(icionando) na janela;



//crie um objeto vlc para suportar o áudio:
vlc_objeto = vlc.crie();

//carregando uma midia de um arquivo
//midia = vlc.midia_com_arquivo(vlc_objeto, 'teste.mp3');

//voce pode passar uma url assim:
midia = vlc.midia_locacao( vlc_objeto , 'http://linguagemprisma.net/music/teste.mp3' )

//agora crie o player a partir da midia carregada.
midia_player = vlc.midia_player_com_midia(midia);

//crie as funcoes de play, pare, pause, def_volume

funcao play()
   vlc.midia_player_play(midia_player);
fim

funcao pare()
  vlc.midia_player_pare( midia_player);
fim

funcao pause()
    vlc.midia_player_pause(midia_player);
fim

funcao def_volume(escala)
    local valor = ig.escala_obt_valor(escala);
    vlc.midia_player_def_volume(midia_player,valor);
fim

//crie os botoes e conecte às funcoes acima

bt_play = ig.botao_estoque( ig.estoque_play_midia);
ig.fixo_ad( fixo , bt_play , 10 , 100 );
ig.conecte_funcao( bt_play , ig.clique , play );

bt_pare = ig.botao_estoque( ig.estoque_parar_midia);
ig.fixo_ad( fixo , bt_pare , 100 , 100 );
ig.conecte_funcao( bt_pare , ig.clique , pare );


bt_pause = ig.botao_estoque( ig.estoque_pausar_midia);
ig.fixo_ad( fixo , bt_pause , 200 , 100 );
ig.conecte_funcao( bt_pause , ig.clique , pause );

volume = ig.escalah_com_limite( 0 , 300 , 10 );
ig.escala_def_valor( volume , 100 );
ig.componente_def_tamanho( volume , 100 , 40 );
ig.fixo_ad( fixo , ig.rotulo'Volume' , 300 , 80 )
ig.fixo_ad( fixo , volume , 300 , 90 );

ig.conecte_funcao( volume , ig.valor_mudado , def_volume );


ig.botao_mostre_imagem( verdadeiro ); //torna as imagens visiveis nos botoes

ig.componente_mostre_todos(janela);
ig.fimprograma();

//para fechar corretamente, libere a memoria depois o loop de eventos:
//destruindo o player e o objeto vlc:
vlc.midia_player_destrua(midia_player);
vlc.destrua( vlc_objeto);







Exemplo vídeo:

Player vlc usando ig e igvlcPrisma




//simples player por Adalberto AF
//licença: livre para usar, modificar, comercializar.

//primeiro vamos importar as bibliotecas necessárias:


inclua'igbr'; //esta para interface gráfica
inclua'vlc'; //esta para multimídia

//crie uma janela com titulo, largura e altura:
janela = ig.janela('teste video' , 500 , 250 );
ig.janela_destrua( janela ); //para fechar corretamente

//crie um conteiner vertical:
//caixav = ig.caixavertical(falso,0);
fixo = ig.fixo();
ig.ad( janela , fixo); //ad(icionando) na janela;

//crie uma area para desenhar o vídeo:

area_video = ig.desenho_area();
ig.componente_def_tamanho( area_video , 300 , 200 );
ig.fixo_ad(fixo , area_video, 1,1);//colocando a area na caixa vertical

//de uma cor preta inicial para a area do vídeo:
cor_preta = ig.cor_analise(ig.preto);
ig.componente_modifique_corfundo(area_video , ig.estado_normal, cor_preta );


//crie um objeto vlc para suportar o vídeo:
vlc_objeto = vlc.crie();

//agora crie o player a partir do objeto e um arquivo:
midia_player = vlc.midia_player_com_arquivo( vlc_objeto, "teste.mp4");

//crie uma função para exibir o vídeo na area de vídeo criada acima
funcao player_mostre_video( compo , player)
//colocando o player na area de vídeo:
  vlc.midia_player_def_hwnd( midia_player , area_video );
//o hwnd é um numero identificador para o componente area_video em windows.
fim


//agora conecte a funcao acima no evente realize
ig.conecte_funcao( area_video , ig.realize ,player_mostre_video , nulo );
   

funcao play()
   vlc.midia_player_play(midia_player);
fim

play();


ig.componente_mostre_todos(janela);
ig.fimprograma();

//para fechar corretamente, libere a memoria depois o loop de eventos:
//destruindo o player e o objeto vlc:
vlc.midia_player_destrua(midia_player);
vlc.destrua( vlc_objeto);







Exemplo de vídeo um pouco mais complexo:

Prisma



inclua'igbr'
vlc = inclua'vlc';

ig.botao_mostre_imagem(verdadeiro);

janela = ig.janela("Teste Video" , 600, 400 ); //criando a janela
ig.janela_destrua(janela); //fecha o aplicativo corretamente

caixavertical = ig.caixavertical(falso , 0 ); //cria uma caixa vertical
ig.ad( janela , caixavertical);  //adiciona a caixa na janela


player = ig.desenho_area();
ig.ad( caixavertical , player );

cor_preto = ig.cor_analise(ig.preto);

ig.componente_modifique_corfundo ( player , ig.estado_normal , cor_preto );
//definindo a cor preta do video




vlc_inst = vlc.crie();
   
   
   
   
   se args[1] entao
      midia_arquivo = args[1]
   senao
     midia_arquivo = "teste.mp4";
   fim
//primeiro criamos uma midia passando a instancia vlc e o nome do arquivo
m = vlc.midia_com_arquivo(vlc_inst, midia_arquivo);
//m = vlc.midia_locacao( vlc_inst , "http://linguagemprisma.net/canto/video/Eis-a-oferta-mais-aceita-do-Senhor.mp4");
  //depois criamos um player com a midia do arquivo
midia_player = vlc.midia_player_com_midia( m);
vlc.midia_destrua(m); //nao precisamos mais da midia entao liberamos da memoria;

//outra forma mais fácil seria:
//midia_player = vlc.midia_player_com_arquivo ( vlc_inst, midia_arquivo);



   
         
   //esta funcao exibe a midia no componente drawing_area (desenho_area)
    funcao player_componente_ao_exibir( compo , midia_player)
         vlc.midia_player_def_hwnd( midia_player, compo );
    fim
   //iniciando o player:
    funcao play()
              vlc.midia_player_play(midia_player);
    fim

   //parando o player:
   funcao pare()
        vlc.midia_player_pare(midia_player);
   fim

//pausando o player:
    funcao pause()
       vlc.midia_player_pause( midia_player );
    fim

//obtendo e mostrando algumas informações do arquivo:
  funcao mostre_info()
     vlc.midia_player_pause(midia_player);
     local tmp_total = vlc.midia_player_obt_tamanho(midia_player) / 1000 ;
     local pos = vlc.midia_player_obt_posicao ( midia_player )*100;
       pos = string.formate( "%.2f" , pos); //força 2 casas apos o ponto decimal
       
     local tempo =  vlc.midia_player_obt_tempo( midia_player) / 1000;
     ig.msg( janela , "INFORMAÇÃO" ,
      'Este vídeo tem: ' .. tmp_total .. ' seconds de duração' ..
      "\nEste vídeo está em " .. pos .. " por cento visualizado" ..
      "\nEstá no tempo: " .. tempo .. " segundos"

       );
     vlc.midia_player_play(midia_player);
  fim

  funcao aumente_volume()
   local vol = vlc.midia_player_obt_volume( midia_player )
   se vol <> 400 entao
   vlc.midia_player_def_volume( midia_player, vol + 5 );
   fim
   se vol <> -1 entao
   ig.rotulo_def_texto( rot_volume , convstring(vol) );
   fim
  fim

  funcao diminua_volume()
   local vol = vlc.midia_player_obt_volume( midia_player )
   se vol <> 0 entao
   vlc.midia_player_def_volume( midia_player, vol - 5 );
   fim
   se vol <> -1 entao
   ig.rotulo_def_texto( rot_volume , convstring(vol) );
   fim
  fim

funcao cb_escala( escala )
local estado = vlc.midia_player_obt_estado( midia_player);
se estado <> 3 entao //se nao estiver rodando (pausado por exemple)
vlc.midia_player_def_posicao( midia_player , ig.estensor_obt_valor(escala) );
fim //se
fim

//escala_com_limite ( inicial , final , incremento )
  escalah = ig.escalah_com_limite( 0 , 1 , 0.0001 );
  ig.caixa_ad(caixavertical , escalah  , falso , falso , 0 );
  ig.conecte_funcao( escalah , 'value-changed' , cb_escala , nulo);
  ig.conecte_funcao(escalah , ig.dentro , enter_esc , nulo);     

    caixah = ig.caixahorizontal(falso,0);
    ig.caixa_ad( caixavertical , caixah , falso , falso , 0);
   
   
    bt_play = ig.botao_estoque( ig.estoque_play_midia) ;
    ig.conecte_funcao( bt_play , ig.clique , play , nulo );
    ig.caixa_ad ( caixah , bt_play , falso , falso ,  2 );

    bt_pause = ig.botao_estoque( ig.estoque_pausar_midia);
    ig.conecte_funcao( bt_pause , ig.clique , pause , nulo );
    ig.caixa_ad( caixah , bt_pause , falso , falso , 2 );
   
     
    bt_pare = ig.botao_estoque(ig.estoque_parar_midia);
    ig.conecte ( bt_pare , ig.clique , 'pare()' );
    ig.caixa_ad ( caixah , bt_pare , falso , falso ,  2);

    bt_info = ig.botao('informação');
    ig.conecte ( bt_info , ig.clique , 'mostre_info()' );
    ig.caixa_ad( caixah , bt_info , falso , falso , 2 );

    bt_vol_max = ig.botao('volume + ');
    ig.conecte( bt_vol_max , ig.clique , 'aumente_volume()');
    ig.caixa_ad( caixah , bt_vol_max , falso , falso , 2 );

    rot_volume = ig.rotulo'--'
    ig.caixa_ad( caixah , rot_volume , falso , falso , 1 );

    bt_vol_min = ig.botao("volume - ");
    ig.conecte( bt_vol_min , ig.clique , 'diminua_volume()');
    ig.caixa_ad( caixah , bt_vol_min , falso , falso , 2);


funcao voltar()

  local tmp = vlc.midia_player_obt_tempo( midia_player);
  se pos <> 0 entao
    vlc.midia_player_def_tempo( midia_player , tmp - 2000 );
  fim

fim

funcao avancar()

  local tmp = vlc.midia_player_obt_tempo( midia_player);
  se pos <> vlc.midia_player_obt_tamanho(midia_player) entao
    vlc.midia_player_def_tempo( midia_player , tmp + 2000 );
  fim

fim
   
    bt_voltar = ig.botao'<';
    ig.conecte( bt_voltar , ig.clique , 'voltar()' );
    ig.caixa_ad( caixah , bt_voltar , falso , falso , 2);

     bt_avancar = ig.botao('>');
    ig.conecte( bt_avancar , ig.clique , 'avancar()');
    ig.caixa_ad(caixah , bt_avancar , falso , falso , 2);
     

  //conecta a funcao que mostra o vídeo na janela.
    ig.conecte_funcao( player, ig.realize ,player_componente_ao_exibir, midia_player );
   
    se args[1] entao play(1) fim;

    // IDLE = 0 , CLOSE=0, OPENING=1, BUFFERING=2, PLAYING=3, PAUSED=4, STOPPING=5, ENDED=6, ERROR=7

     estados = { [0] = 'idle/fechado' , 'abrindo' , 'bufferizando' , 'rodando' , 'pausado' , 'finalizado' , 'tendo erro' };
     


funcao execute_temp()
    // sis.execute'cls'
     local tempo = vlc.midia_player_obt_tempo(midia_player) / 1000;
     local tam = vlc.midia_player_obt_tamanho(midia_player)/1000;
     ig.janela_def_titulo( janela , "Tempo: " .. tempo .. ' de ' .. tam );

     //imprima( vlc.midia_player_obt_rate(midia_player) ); //obtem o rate (a taxa)
    //imprima( vlc.midia_player_obt_midia( midia_player)  ); //obtem a midia definida no player
    imprima( vlc.midia_player_obt_hwnd( midia_player ) );
     local stat = vlc.midia_player_obt_estado( midia_player)
     imprima('o video esta' , estados[ stat ] , stat );
     imprima('fps:' , vlc.midia_player_obt_fps(midia_player) );
     imprima('n titulos' , vlc.midia_player_obt_titulos_quantos(midia_player) );
     imprima('posicao em porcentagem do video' , vlc.midia_player_obt_posicao(midia_player) );
  se stat == 3 entao   ig.estensor_def_valor( escalah ,  vlc.midia_player_obt_posicao(midia_player)   );
  fim
     
fim

temporizador_1 = ig.temporizador( 1 , 100, janela , "execute_temp()" );
ig.temporizador_inicie( temporizador_1 , janela);
   
ig.componente_mostre_todos(janela);
   
ig.fimprograma ();

    vlc.midia_player_destrua(midia_player);
    vlc.destrua(vlc_inst);





Bom, é isso aí, espero que seja útil, até logo.