Skip to content

Sistemas Multimidia

Informações para alunos da disciplina Sistemas Multimídia, do módulo V do curso de Tecnologia em Análise e Desenvolvimento de Sistemas do IFPI.

Apresentação

A disciplina de sistemas multimídia visa apresentar ao aluno as técnicas de programação usadas para se apresentar, manipular e/ou criar conteúdo multimídia. O objetivo da disciplina é ir além do trivial, e mostrar os limites e as oportunidades existentes ao se decidir trabalhar programaticamente com mídia (áudio, imagens, vídeo, etc), ao invés de se limitar apenas ao uso de bancos de dados, operações CRUD e OLAP básicas.

A disciplina consiste principalmente de dois grupos de conteúdo, apresentados nessa sequência:

  • Processamento de sinais – estruturas de dados e algoritmos para representação, manipulação e criação de sinais de mídia (áudio, imagem, vídeo), e as principais técnicas aplicadas de programação para criar software interessante com essas mídias (identificação de voz, software de karaokê, processamento de imagens, visão computacional, etc);
  • Computação gráfica – estruturas de dados e algoritmos para a representação, manipulação e criação de desenhos vetoriais (2D e 3D). Aplicação dessas técnicas em criação de jogos, animação, etc;

Nessa disciplina, também buscamos também explorar os limites da integração entre soluções de software a criação de hardware especializado, o que é trabalhado em um projeto final a ser desenvolvido individualmente pelos alunos.

Requisitos

Para o melhor aproveitamento do conteúdo que é apresentado, discutido e praticado nessa disciplina, apenas um requisito (embora abrangente) é necessário:

  • Saber programar fluentemente – se você não se sente perfeitamente confortável para programar em uma linguagem OO nova (isso mesmo, você não deve se limitar a apenas uma linguagem), você poderá ter dificuldade em acompanhar a disciplina. Também é recomendado que você nem mesmo se limite ao paradigma OO, já que iremos apresentar linguagens alternativas bastante interessantes, e nem todas usam o paradigma OO. Por exemplo: PD (Pure Data, ver link abaixo) usa programação visual através de blocos para representar o fluxo de sinal de áudio; Matlab mescla conceitos matemáticos (matrizes, vetores) e programação de forma bastante ágil, e é muito útil na prototipação de idéias complexas;

Auto-teste para saber se você já sabe o conteúdo da disciplina:

  • Implementar um software para mobile (Android, iOS ou Windows Phone) que capture em tempo-real o áudio do microfone, e identifique, de forma estável, a nota (pitch) fundamental que está sendo cantada/falada. Você não pode pegar um código pronto para isso, no máximo usar uma biblioteca/função para cálculo de uma transformada (FFT, por exemplo), devendo implementar o algoritmo principal (de qualquer forma, não existem boas soluções de código já prontas na internet para essa questão, apenas boas sugestões de algoritmos, e alguns códigos fragmentados).

Como se auto-avaliar:

  • a) Já sei como fazer isso, e vou levar menos de 4h para solucionar a tarefa;
  • b) Imagino como isso pode ser feito, mas vou levar mais de 24h para conseguir solucionar;
  • c) Não sei como solucionar, e posso levar uma semana para conseguir fazer, precisando estudar, e usando apoio de alguns colegas mais experientes;
  • d) Não faço idéia de por onde começar;
  • e) Não sei programar. Já não existe um software na Play Store que faça isso pra mim? É só baixar…

Interpretação:

Letra a: possivelmente já sabe uma parte do conteúdo. Você será útil para ajudar os colegas, aproveite a disciplina para expandir seus limites, talvez criando um projeto mais ambicioso;

Letras b, c e d: onde a maioria dos alunos possivelmente estejam. Os mais experientes devem ajudar os que estiverem menos confiantes;

Letra e: você não está preparado para fazer a disciplina.

Referências interessantes para assuntos abordados (esses links podem mudar):

Livro de Processamento de Sinais (livro texto principal);

– Cores

– Material de processamento de sinais das universidades Princeton e Purdue.

– Processamento de Imagens

– Transformações 2D e 3D

Outros Links úteis:

Ferramentas de programação/prototipação:

processing.org – linguagem e IDE para prototipação de sketches interativos. Muito útil para realizar experimentos com imagens, vídeo, áudio e interação. Gera executáveis para Mac, Linux e Win, além de Applets. Possui um port Javascript, mas recomenda-se usar a versão original. O site oficial inclui muitos tutoriais introdutórios e intermediários.

Pure Data – linguagem de programação visual (mesmo, arrastar caixinhas) para processamento de sinais em real-time (áudio, vídeo, etc). Para verem do que é capaz, o software de música eletrônica da mesa ReacTable foi feito com PD.

OpenCV – biblioteca C/C++ para processamento de imagens/vídeos que implementa os principais algoritmos de visão computacional de maneira eficiente.

Arduino – hardware programável (a linguagem e IDE são baseadas em processing.org) que pode ser usado para prototipação de experimentos interativos que vão “além do computador”. O professor da disciplina possui alguns kits disponíveis para os projetos.

Unity3D – popular engine para criação de jogos e aplicativos interativos em 3D. Versão básica é gratuita, e gera executáveis para Win e Mac. Possui excelente documentação e uma comunidade bastante ativa.

Matlab (comercial)/Octave (free) – ferramentas de programação matemática muito úteis para prototipação de idéias complexas.

Sugestões de projetos interessantes:

Make Magazine – muitos projetos úteis e divertidos, muitas vezes envolvendo hacking de dispositivos e montagem de equipamentos.

Instructables – outro site com muitos exemplos de projetos “faça você mesmo”.

Para ir alem da disciplina:

Trabalho de colegas do MIT Media Lab sobre displays 3D em camadas (3D de verdade).

Site da universidade de Stanford com informações sobre Light Fields, a representação prática mais completa da luz existente em uma cena. É a base para o que se imagina ser o futuro da fotografia e captura de imagens.

%d bloggers like this: