O qmmp é um player de audio de codigo aberto escrito em C++ usando a a biblioteca Qt. Tem suporte para Linux, FreeBSD e Microsoft Windows.A interface grafica do qmmp é baseada no Winamp
A classe OutputWriter herda a classe Qthread, assim ela implementa a função run(), e nela roda uma thread disponibilizada pela biblioteca Qt.
bool initialize() - prepara o objeto para ser usado, e preconfigura os parametros de audio, como o mapa de canais, returnando true para sucesso na inicialização e false para fracasso, caso algum erro ocorra manda uma mensagem atraves de qWarning().
void pause() - pausa o que estiver tocando no programa, caso ja pausado, o audio volta a ser tocado. essa função utiliza um mutex para alterar a a a variavel q sinaliza a pausa (m_pause).
void stop() - para a musica essa função estabelece o estado da variavel de parado (m_stop).
void setMuted()- muta e restaura o volume essa função estabelece o estado da variavel de mutado (m_muted).
void finish()- requere que o audio pare de tocar a variavel que estabelece o estado de terminado como verdadeiro.
void seek()- faz uma busca no tempo passado por parametro, em milisegundos, caso o parametro reset seja true o buffer de saida sao limpos, caso contrario nada ocorre com os buffers
void run() - funcionamento da thread
A abstractengine.cpp fornece a interface base do motor de áudio. O motor de áudio é composto pelos algoritmos responsáveis pelo carregamento, descompressão, modificação e reprodução do áudio nos auto-falantes.
void loadPlugins() - carrega plugins no formato .dll ou .so, ambos bastante comuns em players de áudio para importar bibliotecas, por exemplo.
As demais funções tratam dos algoritmos (na forma de objetos), aqui chamados de engines (1 engine = 1 algoritmo). Fazem coisas como criar, verificar quais existem, quais estão ativas, ativam engines e encontram plugins.
É válido notar que no .h, funções do outputwriter.cpp como play, pause e stop estão definidas como virtual, que é usado para sobrepor funções da classe base em classes derivadas. Lá, todas estão sendo inicializadas com 0.
Essa classe é a principal no que se trata de funções relacionadas a áudio do QMMP. Tudo que foi utilizado na outputwriter.cpp e abstractengine.cpp se encontra aqui, de forma mais generalizada. As duas classes citadas anteriormente especificam as funções.
Prepara o objeto parea ser usado por uma nova thread para evitar warnings sobre o pai de outra thread