terça-feira, 30 de junho de 2009

Extrair o áudio de um vídeo no formato MP3

A linha de comando é mesmo um canivete suíço.

mencoder file.wmv -of rawaudio -oac mp3lame -ovc copy -o file.mp3


É como Master Foo disse uma vez: "There is more Unix-nature in one line of shell script than there is in ten thousands lines of C".

O google também é ótimo... achei essa linha em: http://knowledge.drun.net/viewtopic.php?id=174

domingo, 28 de junho de 2009

TORCS: O Simulador de Corrida Aberto

Estou fazendo um curso de pós-graduação na Unioeste sobre Desenvolvimento de Software e Novas Tecnologias. Até agora está um pouco chato, pois tá chovendo bastante no molhado, mas também já aprendi algumas coisas legais. Além disso, temos que desenvolver um artigo para o final do curso, sendo assim eu consegui juntar o útil com o agradável, ou seja trabalhar com desenvolvimento de jogos.

A versão final do artigo só deverá ser entregue em setembro de 2010, porém já tivemos que fazer um esboço do trabalho final. O título do trabalho que tenho até agora é: "Inteligência Artificial Aplicada a Evolução de Carros de Corrida sem Treinamento". Ainda não estou satisfeito com este título, pois acho que não sintetiza de forma clara o que quero fazer, mas como era só um esboço inicial ficou assim mesmo.

Neste projeto eu irei utilizar o jogo torcs, http://torcs.sf.net, e meu objetivo é utilizar técnicas de inteligência artificial para conseguir evolução de tempos de volta e que isto seja feito em tempo real, ou seja, durante a corrida. A idéia é fazer com que o "robô" seja sensível as mundanças da pista e tenha a sensibilidade para melhorar sua tocada, sendo assim ser capaz de chegar aos limites do carro.

O pessoal que desenvolve o torcs criou um tutorial muito legal sobre criação de "robôs": http://www.berniw.org/, através dele é possível desenvolver uma IA bastante completa, que permite um carro frear, acelerar (claro :-), passar marcha, voltar para a pista depois de uma rodada, realizar ultrapassagens e parar nos boxes.

Com todas estas características vou deixar um pouco de lado minhas brincadeiras com a CrystalSpace3D e vou me dedicar a terminar de implementar o que está descrito no tutorial, pois além de oferecer a implementação, existem muitas explicações e referências a documentações mais completas sobre os conceitos abordados. Uma ótima pedida a quem quer brincar com IA em jogos de corrida.

Com isso espero começar a contribuir também com o jogo, aproveitando o que já está implementado para oferecer um jogo completo de F1. Na verdade, não falta muito para se ter isso, o que já está implementado é bem legal para ser oferecido como um jogo, basta oferecer mais conteúdo relacionado a F1, tais como equipes e pistas. É claro que para fazer comparações com jogos comerciais ainda é necessário evoluir bastante, mas com toda a sinceridade, é o jogo de corrida mais legal que vi até agora para o mundo do software livre.

terça-feira, 9 de junho de 2009

Compilando CrystalSpace3D (CS) e Crystal Entity Layer (CEL) no Slackware 12.2

Estou brincando com a CS e a CEL por aqui. Se você pretende utilizar esta biblioteca para desenvolver jogos ou qualquer outra aplicação com recursos 3D eu diria para levar em consideração esta mensagem http://sourceforge.net/mailarchive/forum.php?thread_name=742a36470902230603y27874edaid465aec69e0f78fc%40mail.gmail.com&forum_name=crystal-main. No entanto, você é dono do seu sistema, então trabalhe com qualquer versão da biblioteca que você quiser.

Compilar tais bibliotecas é muito fácil, pois a docuemtação é simples, porém espera-se que você já tenha compilado algo, mas não deve fugir de um ./configure, make e make install e em alguns casos jam e jam install. Esta última é a ferramenta utilizada pela CS e CEL para compilar a árvore dos fontes.

A maioria das dependências utilizadas podem ser encontradas em www.slacky.eu e www.slackbuilds.org. Outra ferramenta interessante é a pkgcreate (http://www.din.uem.br/~msambinelli/download/), que facilita bastante o processo de criar pacotes a partir dos fontes.

As informações para compilar e instalar a CS está disponível em: http://www.crystalspace3d.org/docs/online/1.4/manual/Building.html#0

Algumas dependências já vêm instaladas com o Slack, são elas: zlib, libpng, libjpeg, freetype, bibliotecas de desenvolvimento do X e da OpenGL, libogg, libvorbis, libmng. Outras já possuem seus pacotes prontinhos para serem instaladas, são elas:

Jam: http://www.slacky.eu/aadm/pkgs/index.php?ver=6&pkg=658
wxWidgets 2.8.10: http://www.slacky.eu/aadm/pkgs/index.php?ver=6&pkg=1165
libmspack: http://www.slacky.eu/aadm/pkgs/index.php?ver=6&pkg=792 (dependência da wxWidgets acima)
CEGUI 0.6.2: http://www.slacky.eu/aadm/pkgs/index.php?ver=6&pkg=635

Outros possuem SlackBuild's prontos:

ODE 0.8: http://slackbuilds.org/repository/12.1/libraries/ode/ (utilizei a versão para o Slack 12.1 e que funciona muito bem no 12.2, pois esta é a versão recomendada para a CS). Aqui está o link para o pacote que compilei: ode-0.8-i486-1_SBo.tgz

Não instalei algumas dependências, pois não pretendo utilizar, sendo ela a biblioteca Bullet, pois pretendo utilizar a ODE.

Estas bibliotecas compilei utilizando o pkgcreate:

cal3d-0.11.0-i686-1_PKGC.tgz
lib3ds-1.3.0-i686-1_PKGC.tgz
libcaca-0.99.beta13-i686-1_PKGC.tgz (o pacote oficial do Slack deve ser substituído por este, pois esta versão é requerida, porém tal biblioteca é opcional, sendo apenas necessária se você quiser a saída do seu programa em ASCII :-)

Binários da Cg Toolkit podem ser encontrados no site http://developer.nvidia.com/object/cg_toolkit.html. Aqui instalei a versão 2.1, porém a partir do site da CS, qualquer versão acima da 1.4 deve funcionar.

Muito bem, depois de instalado todos esses arquivos, basta compilar a CS. Baixe os fontes através do comando:

svn co https://crystal.svn.sourceforge.net/svnroot/crystal/CS/branches/release/V1.4 CS_1.4

Agora vá tomar um café enquanto os fontes são baixados. Depois disso, acesse o diretório criado e agora digite ./configure e make ou jam (neste caso o make é uma capa para o jam). E vá tomar outro café :-). Após alguns minutos ou horas, dependendo da sua máquina você estará com a CS compiladinha :D. Não irei dizer para você instalar a biblioteca, pois tive problemas ao fazer isso, o sistema de detecção de colisões não funcionou corretamente, então utilize a biblioteca a partir do local onde esta está.

Vamos partir para a CEL agora, que é uma biblioteca de entidades construída sobre a CS que pode ser considerada uma engine para jogos. Assim como a CS, as informações para compilar e instalar a CEL também estão disponíveis online: http://crystalspace3d.org/cel/docs/online/manual-1.2/Building.html#0. Tais informações não são muito completas, mas já é melhor do que nada.

Esta é bem mais fácil para compilar, já que não exige a instalação de muitas dependências, pois python é padrão em qualquer distribuição. Além desta existe um pacote opcional, o HawkNL, caso você queira suporte a redes, o que eu acho uma ótima idéia. Para esta dependência eu não encontrei pacotes e também não consegui gerar o pacote através do pkgcreate e também fui preguiçoso o suficiente para apenas compilá-la e instalá-la, sem criar pacote algum. O site da HawkNL é http://www.hawksoft.com/hawknl/. Outra coisa importante é exportar a variável CRYSTAL com o caminho onde você compilou a CS.

Pronto, feito isso basta rodar o comando "jam" e ir tomar um café. Após isso você já pode utilizar a biblioteca para criar seus próprios programas assim como rodar os vários exemplos que vem com ela. Para rodar os exemplos você deve exportar a variável LD_LIBRARY_PATH para apontar para onde você compilou a CS.