JUCE — это кроссплатформенный фреймворк приложений C++ с открытым исходным кодом , используемый для разработки настольных и мобильных приложений. JUCE используется, в частности, для своих библиотек GUI и подключаемых модулей . Он имеет двойную лицензию под GPLv3 и коммерческую лицензию. [2]
Цель JUCE — позволить писать программное обеспечение таким образом, чтобы один и тот же исходный код компилировался и работал одинаково на платформах Windows , macOS и Linux . Он поддерживает различные среды разработки и компиляторы.
JUCE появился в результате разделения базового кода C++ , разработанного Джулианом Сторером для создания графических и аудиовозможностей DAW Tracktion (теперь Waveform) . Впервые он был выпущен для публики в 2004 году. Он распространяется по двойной лицензии GPL /коммерческой лицензии.
В ноябре 2014 года компании JUCE и Raw Material Software были приобретены лондонским производителем оборудования ROLI за нераскрытую сумму. [3]
В апреле 2020 года было объявлено, что JUCE был продан компанией ROLI компании PACE Anti-Piracy Inc. [4]
JUCE предназначен для использования абсолютно одинаково на разных платформах и компиляторах. Raw Material Software приводит следующий список платформ и компиляторов, поддержка которых официально подтверждена; другие могут работать, но официально не тестировались.
JUCE поддерживается на следующих платформах.
Официально подтверждено, что JUCE корректно работает со следующими компиляторами.
Как и многие другие фреймворки (например, Qt , wxWidgets , GTK и т. д.), JUCE содержит классы, предоставляющие ряд функций, которые охватывают элементы пользовательского интерфейса, графику, аудио, анализ XML и JSON , сетевые технологии , криптографию , многопоточность , интегрированный интерпретатор, имитирующий синтаксис ECMAScript , и различные другие часто используемые функции. Разработчики приложений, которым требуется несколько сторонних библиотек, могут, таким образом, объединить и использовать только библиотеку JUCE или, по крайней мере, сократить количество используемых ими сторонних библиотек. В этом случае первоначальным источником вдохновения был JDK Java , а JUCE был задуман как «нечто подобное для C++».
Примечательной особенностью JUCE по сравнению с другими подобными фреймворками является его большой набор аудиофункций; это связано с тем, что JUCE изначально разрабатывался как фреймворк для Tracktion , аудиосеквенсора, прежде чем был выделен в отдельный продукт. JUCE поддерживает аудиоустройства (такие как CoreAudio , ASIO , ALSA , JACK , WASAPI , DirectSound ) и воспроизведение MIDI , полифонические синтезаторы , встроенные ридеры для распространенных форматов аудиофайлов (таких как WAV , AIFF , FLAC , MP3 и Vorbis ), а также оболочки для создания различных типов аудиоплагинов, таких как эффекты и инструменты VST . Это привело к его широкому использованию в сообществе разработчиков аудио. [5]
JUCE поставляется с классами-оболочками для создания аудио- и браузерных плагинов. При создании аудиоплагина создается один двоичный файл, который поддерживает несколько форматов плагинов ( VST и VST3, RTAS , AAX, Audio Units ). Поскольку весь код, специфичный для платформы и формата, содержится в оболочке, пользователь может создавать VST/VST3/RTAS/AAX/AU для Mac и Windows из одной кодовой базы. Так как JUCE7 также возможно нацеливание и размещение плагинов LV2 . [6] Ранее это делалось с использованием различных форков. [7] [8]
Плагины браузера обрабатываются аналогичным образом: создается один двоичный файл, который функционирует и как плагин NPAPI , и как плагин ActiveX .
"Projucer" — это IDE- инструмент для создания и управления проектами JUCE. Когда файлы и настройки для проекта JUCE указаны, Projucer автоматически генерирует набор сторонних файлов проекта, чтобы проект можно было скомпилировать нативно на каждой целевой платформе. В настоящее время он может генерировать проекты Xcode , проекты Visual Studio , файлы Makefile Linux, сборки Android Ant и проекты CodeBlocks . Помимо предоставления способа управления файлами и настройками проекта, он также имеет редактор кода, интегрированный редактор GUI, мастера для создания новых проектов и файлов, а также механизм кодирования в реальном времени, полезный для проектирования пользовательского интерфейса.