# JUCE

JUCE é uma estrutura de aplicação específica de código aberto e multiplataforma, escrita em C++ e utilizada para o desenvolvimento de aplicações móveis e de ambiente de trabalho. O JUCE é utilizado em particular pelas suas bibliotecas GUI e plug-in.
O objetivo do JUCE é permitir que o software seja escrito de forma a que o mesmo código-fonte seja compilado e executado de forma idêntica nas plataformas Windows, MacOS e Linux. Suporta vários ambientes de desenvolvimento e compiladores, tais como GCC, Xcode e Code::Blocks.

## História

JUCE foi o resultado de uma divisão do código C++ subjacente desenvolvido por Julian Storer para criar as capacidades de áudio e gráficos da DAW do Tracktion (atualmente Waveform). Foi lançado ao público pela primeira vez em 2004. Está coberto por uma licença GPL/comercial dupla.
A JUCE e a Raw Material Software foram adquiridas em novembro de 2014 pelo fabricante de hardware ROLI, com sede em Londres, por um montante não revelado. Como parte da aquisição, o fundador da JUCE, Jules Storer, juntou-se à ROLI como diretor de arquitetura de software e editor-chefe da JUCE. Jules anunciou aos utilizadores da JUCE que:

## Apoio oficial

JUCE foi projetado para ser usado exatamente da mesma forma em múltiplas plataformas e compiladores. A Raw Material Software oferece a seguinte lista de plataformas e compiladores nos quais o suporte está oficialmente confirmado; outros podem funcionar, mas não foram oficialmente testados.

### Plataformas suportadas

JUCE suporta as seguintes plataformas.
* Windows Vista, 7, 8 e 10.
* MacOS versões 10.7 e posteriores.
* iOS Versões 9 e posteriores.
* Kernel Linux séries 2.6 e posteriores.
* Android usando NDK-v5 e posterior.

### Compiladores suportados

JUCE está oficialmente confirmado para funcionar corretamente com os seguintes compiladores.
* GCC Versões 5 e posteriores.
* LLVM - LLVM Clang versões 3.4 e posteriores
* Microsoft Visual Studio - Visual C++ 2015 e posteriores.
* MinGW.

## Características

Como muitos outros frameworks (por exemplo, Qt, wxWidgets, GTK+, etc.), JUCE contém classes que fornecem uma gama de funções que cobrem elementos da interface do usuário, gráficos, áudio, XML e JSON, rede, criptografia, multi-threading, um interpretador integrado que imita a sintaxe ECMAScript e vários outros recursos comumente usados. Os programadores de aplicações que necessitam de várias bibliotecas de terceiros podem, por conseguinte, consolidar e utilizar apenas a biblioteca JUCE ou, pelo menos, reduzir o número de bibliotecas de terceiros que utilizam. Neste caso, a inspiração original foi o JDK de Java e a JUCE pretendia ser “algo semelhante para C++”.
Uma caraterística notável do JUCE em comparação com outros frameworks similares é seu grande conjunto de recursos de áudio; isso porque o JUCE foi originalmente desenvolvido como um framework para o Tracktion, um sequenciador de áudio, antes de ser dividido em um produto independente. JUCE tem suporte para dispositivos de áudio (como CoreAudio, ASIO, ALSA, JACK, WASAPI, DirectSound) e reprodução de MIDI, sintetizadores polifônicos, leitores embutidos para formatos de arquivos de áudio (como WAV, AIFF, FLAC, Mp3 e Vorbis), bem como wrappers para criar vários tipos de plug-ins de áudio, como instrumentos e efeitos VST. Isso levou ao seu uso generalizado na comunidade de desenvolvimento de áudio.
JUCE vem com classes contentoras para criar plugins de áudio e de browser. Ao construir um plugin de áudio, é produzido um único binário que suporta múltiplos formatos de plugin (VST & VST3, RTAS, AAX, Audio Units). Como todo o código específico da plataforma e do formato está contido no contentor, um utilizador pode construir VST / VST3 / RTAS / AAX / AU para Mac e Windows a partir de uma única base de código.
Os plug-ins de navegador são tratados de forma semelhante: é produzido um único binário que funciona como um plug-in NPAPI e um plug-in ActiveX.

## Ferramentas

O “Projucer” é uma ferramenta IDE para criar e gerir projectos JUCE. Quando os ficheiros e as configurações tiverem sido especificados para um projeto JUCE, o Projucer gera automaticamente uma coleção de ficheiros de projeto de terceiros para permitir que o projeto seja compilado nativamente em cada plataforma de destino. Atualmente, pode gerar projectos Xcode, projectos Visual Studio, Linux Makefiles, Android Ant builds e CodeBlocks. Além de fornecer uma forma de gerir os ficheiros e as definições de um projeto, também possui um editor de código, um editor de GUI integrado, assistentes para criar novos projectos e ficheiros e um motor de codificação em tempo real útil para a conceção da interface do utilizador.