/* * Carla Plugin Host * Copyright (C) 2011-2021 Filipe Coelho * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * For a full copy of the GNU General Public License see the doc/GPL.txt file. */ #include "CarlaHost.h" #include "CarlaUtils.h" #include "CarlaString.hpp" #if defined(HAVE_FLUIDSYNTH) && !defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) # include #endif #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wconversion" # pragma GCC diagnostic ignored "-Weffc++" # pragma GCC diagnostic ignored "-Wsign-conversion" # pragma GCC diagnostic ignored "-Wundef" # pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" #endif #ifdef USING_JUCE # include "AppConfig.h" # include "juce_core/juce_core.h" #else # include "rtaudio/RtAudio.h" # include "rtmidi/RtMidi.h" #endif #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) # pragma GCC diagnostic pop #endif #ifdef CARLA_OS_MAC # import #endif #include "water/files/File.h" // ------------------------------------------------------------------------------------------------------------------- const char* carla_get_complete_license_text() { carla_debug("carla_get_complete_license_text()"); static CarlaString retText; if (retText.isEmpty()) { retText = "

This current Carla build is using the following features and 3rd-party code:

" "
    " // Plugin formats "
  • LADSPA plugin support
  • " "
  • DSSI plugin support
  • " "
  • LV2 plugin support
  • " #if defined(USING_JUCE) && JUCE_PLUGINHOST_VST "
  • VST2 plugin support (using JUCE)
  • " #else "
  • VST2 plugin support (using VeSTige header by Javier Serrano Polo)
  • " #endif #if defined(USING_JUCE) && JUCE_PLUGINHOST_VST3 "
  • VST3 plugin support (using JUCE)
  • " #endif #if defined(USING_JUCE) && JUCE_PLUGINHOST_AU "
  • AU plugin support (using JUCE)
  • " #endif // Sample kit libraries #if defined(HAVE_FLUIDSYNTH) && !defined(BUILD_BRIDGE_ALTERNATIVE_ARCH) "
  • FluidSynth library v" FLUIDSYNTH_VERSION " for SF2/3 support
  • " #endif "
  • SFZero module for SFZ support
  • " // misc libs "
  • base64 utilities based on code by Ren\u00E9 Nyffenegger
  • " "
  • dr_mp3 for mp3 file support
  • " #ifdef HAVE_LIBLO "
  • liblo library for OSC support
  • " #endif #ifdef HAVE_SNDFILE "
  • libsndfile library for base audio file support
  • " #endif "
  • rtmempool library by Nedko Arnaudov" "
  • serd, sord, sratom and lilv libraries for LV2 discovery
  • " #ifndef USING_JUCE "
  • RtAudio v" RTAUDIO_VERSION " and RtMidi v" RTMIDI_VERSION " for native Audio and MIDI support
  • " #endif "
  • zita-resampler for audio file sample rate resampling
  • " // Internal plugins "
  • MIDI Sequencer UI code by Perry Nguyen
  • " // External plugins #ifdef HAVE_EXTERNAL_PLUGINS "
  • Nekobi plugin code based on nekobee by Sean Bolton and others
  • " "
  • VectorJuice and WobbleJuice plugin code by Andre Sklenar
  • " # ifdef HAVE_ZYN_DEPS "
  • ZynAddSubFX plugin code by Mark McCurry and Nasca Octavian Paul
  • " # endif #endif // HAVE_EXTERNAL_PLUGINS // end "
"; } return retText; } const char* carla_get_juce_version() { carla_debug("carla_get_juce_version()"); static CarlaString retVersion; #ifdef USING_JUCE if (retVersion.isEmpty()) { if (const char* const version = juce::SystemStats::getJUCEVersion().toRawUTF8()) retVersion = version+6; else retVersion = "Unknown"; } #endif return retVersion; } const char* const* carla_get_supported_file_extensions() { carla_debug("carla_get_supported_file_extensions()"); // NOTE: please keep in sync with CarlaEngine::loadFile!! static const char* const extensions[] = { // Base types "carxp", "carxs", // plugin files and resources #ifdef HAVE_FLUIDSYNTH "sf2", "sf3", #endif #ifdef HAVE_FLUIDSYNTH_INSTPATCH "dls", "gig", #endif #ifdef HAVE_ZYN_DEPS "xmz", "xiz", #endif #ifdef CARLA_OS_MAC "vst", #else "dll", "so", #endif "vst3", // Audio files #ifdef HAVE_SNDFILE "aif", "aifc", "aiff", "au", "bwf", "flac", "htk", "iff", "mat4", "mat5", "oga", "ogg", "opus", "paf", "pvf", "pvf5", "sd2", "sf", "snd", "svx", "vcc", "w64", "wav", "xi", #endif #ifdef HAVE_FFMPEG "3g2", "3gp", "aac", "ac3", "amr", "ape", "mp2", "mp3", "mpc", "wma", # ifndef HAVE_SNDFILE // FFmpeg without sndfile "flac", "oga", "ogg", "w64", "wav", # endif #else // dr_mp3 "mp3", #endif // MIDI files "mid", "midi", // SFZ "sfz", // terminator nullptr }; return extensions; } const char* const* carla_get_supported_features() { carla_debug("carla_get_supported_features()"); static const char* const features[] = { #ifdef HAVE_FLUIDSYNTH "sf2", #endif #ifdef HAVE_FLUIDSYNTH_INSTPATCH "dls", "gig", #endif #ifdef HAVE_HYLIA "link", #endif #ifdef HAVE_LIBLO "osc", #endif #if defined(HAVE_LIBMAGIC) || defined(CARLA_OS_WIN) "bridges", #endif #ifdef HAVE_PYQT "gui", #endif #ifdef USING_JUCE "juce", "vst3", # if defined(CARLA_OS_MAC) "au", # endif #endif nullptr }; return features; } // ------------------------------------------------------------------------------------------------------------------- const char* carla_get_library_filename() { carla_debug("carla_get_library_filename()"); static CarlaString ret; if (ret.isEmpty()) { using water::File; ret = File(File::getSpecialLocation(File::currentExecutableFile)).getFullPathName().toRawUTF8(); } return ret; } const char* carla_get_library_folder() { carla_debug("carla_get_library_folder()"); static CarlaString ret; if (ret.isEmpty()) { using water::File; ret = File(File::getSpecialLocation(File::currentExecutableFile).getParentDirectory()).getFullPathName().toRawUTF8(); } return ret; } // -------------------------------------------------------------------------------------------------------------------