# JUCE

JUCE es un particular marco de aplicación de código abierto y multiplataforma, escrito en C++ y utilizado para el desarrollo de aplicaciones móviles y de escritorio. JUCE es utilizado en particular por su GUI y sus bibliotecas de complemento.
El objetivo de JUCE es permitir que el software se escriba de forma tal que el mismo código fuente se compile y ejecute de manera idéntica en plataformas Windows, Mac OS.X y Linux. Admite varios entornos de desarrollo y compiladores, como GCC, Xcode y Code::Blocks.

## Historia

JUCE fue el resultado de una división del código subyacente C++ desarrollado por Julián Storer para crear las capacidades de gráficos y audio DAW de Tracktion's (ahora Waveform). Se lanzó por primera vez al público en 2004. Está cubierto por una doble licencia GPL/comercial.
JUCE y Raw Material Software, fueron adquiridos en noviembre de 2014 por el fabricante de hardware con sede en Londres ROLI, por una cantidad no revelada. Como parte de la adquisición, el fundador de JUCE, Jules Storer, se uniría ROLI como director de arquitectura de software y editor jefe de JUCE. Jules anunció a los usuarios de JUCE que:
   "... en el futuro previsible, todavía seré yo quien escriba o apruebe cada línea de código que ingrese a la biblioteca. Espero que dentro de un par de años tengamos un equipo de codificadores geniales que están sacando un código que coincide perfectamente con la calidad y el estilo de la base de código JUCE ".

## Soporte oficial

JUCE está diseñado para ser utilizado exactamente de la misma manera en múltiples plataformas y compiladores. Raw Material Software ofrece la siguiente lista de plataformas y compiladores en los que el soporte se confirma oficialmente; otros pueden funcionar, pero no han sido probados oficialmente.

### Plataformas soportadas

JUCE es compatible con las siguientes plataformas.
* Windows XP, Vista, 7, 8, y 10.
* Mac OS X versiones 10.5 y posterior.
* iOS Versiones 3 y posterior.
* Linux kernel serie 2.6 y posterior.
* Android usando NDK-v5 y posterior.

### Compiladores soportados

Se confirma oficialmente que JUCE funciona correctamente con los siguientes compiladores.
* GCC Versiones 4.0 y posterior.
* LLVM - LLVM Clang.
* Microsoft Visual Studio - Visual C++ 2013 y posterior.
* MinGW.

## Características

Al igual que muchos otros Frameworks (p. ej., Qt, wxWidgets, GTK+, etc.), JUCE contiene clases que proporcionan una gama de funciones que abarca elementos de la interfaz del usuario, gráficos, audio, XML y JSON, redes, networking, criptografía, multi-threading, un intérprete integrado que imita la sintaxis de ECMAScript y varias otras características de uso común. Los desarrolladores de aplicaciones que necesitan varias bibliotecas de terceros pueden, por lo tanto, ser capaces de consolidar y usar solo la biblioteca JUCE, o al menos reducir el número de bibliotecas de terceros que utilizan. En esto, la inspiración original fue Java's JDK, y JUCE estaba destinado a ser "algo similar para C++"
Una característica notable de JUCE en comparación con otros Frameworks similares es su gran conjunto de funciones de audio; esto se debe a que JUCE se desarrolló originalmente como un framework para Tracktion, un secuenciador de audio, antes de dividirse en un producto independiente. JUCE tiene soporte para dispositivos de audio (como CoreAudio, ASIO, ALSA, JACK, WASAPI, DirectSound) y reproducción MIDI, sintetizadores polifónicos, lectores incorporados para formatos de archivos de audio (como WAV, AIFF, FLAC, Mp3 y Vorbis), así como envoltorios para crear varios tipos de complementos de audio, como instrumentos VST y efectos. Esto ha llevado a su uso generalizado en la comunidad de desarrollo de audio.
JUCE viene con clases de contenedor para crear audio y complementos de navegador. Al construir un complemento de audio, se produce un solo binario que admite múltiples formatos de plugin (VST & VST3, RTAS, AAX, Unidades de Audio). Como toda la plataforma y el código específico de formato están contenidos en el contenedor, un usuario puede construir Mac y Windows VST / VST3 / RTAS / AAX / AU desde una única base de código.
Los complementos del navegador se manejan de manera similar: se produce un solo binario que funciona como un complemento NPAPI y un complemento ActiveX.

## Herramientas

El "Projucer" es una herramienta IDE para crear y gestionar proyectos JUCE. Cuando se han especificado los archivos y configuraciones para un proyecto JUCE, Projucer genera automáticamente una colección de archivos de proyectos de terceros para permitir que el proyecto se compile de forma nativa en cada plataforma objetivo. Actualmente pueda generar proyectos de Xcode, proyectos de Visual Studio, Linux Makefiles, compilaciones de Android Ant y CodeBlocks. Además de proporcionar una manera de administrar los archivos y configuraciones de un proyecto, también tiene un editor de código, un editor de GUI integrado, asistentes para crear nuevos proyectos y archivos, y un motor de codificación en vivo útil para el diseño de la interfaz del usuario.