JUCE is an open-source cross-platform C++ application framework for desktop and mobile applications, including VST, VST3, AU, AUv3, RTAS and AAX audio plug-ins.

Overview

alt text

JUCE is an open-source cross-platform C++ application framework for creating high quality desktop and mobile applications, including VST, VST3, AU, AUv3, RTAS and AAX audio plug-ins. JUCE can be easily integrated with existing projects via CMake, or can be used as a project generation tool via the Projucer, which supports exporting projects for Xcode (macOS and iOS), Visual Studio, Android Studio, Code::Blocks and Linux Makefiles as well as containing a source code editor.

Getting Started

The JUCE repository contains a master and develop branch. The develop branch contains the latest bugfixes and features and is periodically merged into the master branch in stable tagged releases (the latest release containing pre-built binaries can be also downloaded from the JUCE website).

JUCE projects can be managed with either the Projucer (JUCE's own project-configuration tool) or with CMake.

The Projucer

The repository doesn't contain a pre-built Projucer so you will need to build it for your platform - Xcode, Visual Studio and Linux Makefile projects are located in extras/Projucer/Builds (the minumum system requirements are listed in the System Requirements section below). The Projucer can then be used to create new JUCE projects, view tutorials and run examples. It is also possible to include the JUCE modules source code in an existing project directly, or build them into a static or dynamic library which can be linked into a project.

For further help getting started, please refer to the JUCE documentation and tutorials.

CMake

Version 3.15 or higher is required. To use CMake, you will need to install it, either from your system package manager or from the official download page. For comprehensive documentation on JUCE's CMake API, see the JUCE CMake documentation. For examples which may be useful as starting points for new CMake projects, see the CMake examples directory.

Building Examples

To use CMake to build the examples and extras bundled with JUCE, simply clone JUCE and then run the following commands, replacing "DemoRunner" with the name of the target you wish to build.

cd /path/to/JUCE
cmake . -B cmake-build -DJUCE_BUILD_EXAMPLES=ON -DJUCE_BUILD_EXTRAS=ON
cmake --build cmake-build --target DemoRunner

Minimum System Requirements

Building JUCE Projects

  • macOS/iOS: Xcode 9.2 (macOS 10.12.6)
  • Windows: Windows 8.1 and Visual Studio 2015 Update 3 64-bit
  • Linux: g++ 5.0 or Clang 3.4 (for a full list of dependencies, see here).
  • Android: Android Studio on Windows, macOS or Linux

Deployment Targets

  • macOS: macOS 10.7
  • Windows: Windows Vista
  • Linux: Mainstream Linux distributions
  • iOS: iOS 9.0
  • Android: Jelly Bean (API 16)

Contributing

For bug reports and features requests, please visit the JUCE Forum - the JUCE developers are active there and will read every post and respond accordingly. When submitting a bug report, please ensure that it follows the issue template. We don't accept third party GitHub pull requests directly due to copyright restrictions but if you would like to contribute any changes please contact us.

License

The core JUCE modules (juce_audio_basics, juce_audio_devices, juce_core and juce_events) are permissively licensed under the terms of the ISC license. Other modules are covered by a GPL/Commercial license.

There are multiple commercial licensing tiers for JUCE, with different terms for each:

  • JUCE Personal (developers or startup businesses with revenue under 50K USD) - free
  • JUCE Indie (small businesses with revenue under 500K USD) - $40/month
  • JUCE Pro (no revenue limit) - $130/month
  • JUCE Educational (no revenue limit) - free for bona fide educational institutes

For full terms see LICENSE.md.

Comments
  • LV2 support

    LV2 support

    for a cross-platform environment, it would be great if juce could include LV2 as supported audio plugins.

    see https://forum.juce.com/t/juce-lv2-plugin-wrapper/14209 for a discussion on this.

    opened by umlaeute 44
  • Projucer Linux Makefile Linking error: undefined reference to symbol

    Projucer Linux Makefile Linking error: undefined reference to symbol

    Hi! I created a simple GUI project in Projucer in my Ubuntu 18.10 64 bits system.

    When trying to compile such project using make, I got

    Linking Juce_GUI_Test - App /usr/bin/ld: build/intermediate/Debug/include_juce_graphics_f817e147.o: undefined reference to symbol 'png_set_sBIT@@PNG16_0' /usr/bin/ld: //usr/lib/x86_64-linux-gnu/libpng16.so.16: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status make: *** [Makefile:96: build/Juce_GUI_Test] Error 1

    I had to add the following flags to the JUCE_LDFLAGS macro in the Makefile in order to make it work: -lpng16 -lz -ljpeg -lFLAC -logg -lvorbis -lvorbisenc -lvorbisfile

    The workaround is achieved specifically following these steps:

    1. Open the Makefile in any text editor you like.
    2. Go to line 44, the line JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -fvisibility=hidden -lGL -ldl -lpthread -lrt $(LDFLAGS) should appear.
    3. Add the flags before $(LDFLAGS) so now line 44 should be JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama webkit2gtk-4.0 gtk+-x11-3.0) -lGL -ldl -lpthread -lrt -lpng16 -lz -ljpeg -lFLAC -logg -lvorbis -lvorbisenc -lvorbisfile $(LDFLAGS).
    4. Now compilation does work after running make.

    I think that it has something to do with function StringArray getLinkerFlags (const BuildConfiguration& config) const of the jucer_ProjectExport_Make files of the repository.

    Hope it helps!

    opened by fbosio 32
  • Plugin standalone version window doesn't change size

    Plugin standalone version window doesn't change size

    	setResizeLimits (150, 100, 600, 400);
    	getConstrainer ()->setFixedAspectRatio (1.5);
    	setSize (600, 400);
    

    When you click on the resizer control in the bottom right corner, the editor resizes, but the standalone window retains it's full size.

    Windows 10, 64-bit

    opened by reFX-Mike 23
  • API-doc search not available / many content like jucePlatformDefs is missing / isPositiveAndBelow not findable

    API-doc search not available / many content like jucePlatformDefs is missing / isPositiveAndBelow not findable

    The inheritance diagrams of the doxygen generated api-docs on the website don't work. Eventually due to javascript. The search field is no longer present.

    To be observed with

    • firefox on Mac OSX 10.10,
    • Chrome on Mac OSX
    • Safari on Mac OSX
    Bug 
    opened by ffAudio 17
  • Visual Studio 2015 : '_InterlockedDecrement': ambiguous call to overloaded function

    Visual Studio 2015 : '_InterlockedDecrement': ambiguous call to overloaded function

    Hi there,

    I have been playing with the faust2juce script of the Faust language which generate a ready to compile JUCE project. Here is the generated cpp file I'm using: https://gist.github.com/xaviergodart/66e3b7ac9483735bb8ec1bba82ec923b

    I'm targeting VST 64bits. It works perfectly when using the Linux Makefile exporter. However, when using the Visual Studio 2015 exporter on Windows 7 64bits, I get the following error:

    Error	C2668	'_InterlockedDecrement': ambiguous call to overloaded function (compiling source file ..\..\FaustPluginProcessor.cpp)	gainCtl	c:\users\xavier\documents\juce\juce-grapefruit-windows\juce\modules\juce_core\memory\juce_Atomic.h	260	
    

    It seems that there is some sort of collision between Windows headers. I'm fairly new to cpp development, especially on Windows, and I can't figure out if the problem is coming from the faust generated file, JUCE, or my side.

    I tried both 4.3.1 and the develop branch.

    Here is the build log:

    1>c:\users\xavier\documents\juce\juce-grapefruit-windows\juce\modules\juce_core\memory/juce_Atomic.h(260): error C2668: '_InterlockedDecrement': ambiguous call to overloaded function (compiling source file ..\..\FaustPluginProcessor.cpp)
    1>  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\intrin.h(209): note: could be 'long _InterlockedDecrement(volatile long *)' (compiling source file ..\..\FaustPluginProcessor.cpp)
    1>  C:\Program Files (x86)\Windows Kits\8.1\Include\um\winbase.h(8875): note: or       'unsigned __int64 `anonymous-namespace'::_InterlockedDecrement(volatile unsigned __int64 *)' (compiling source file ..\..\FaustPluginProcessor.cpp)
    1>  C:\Program Files (x86)\Windows Kits\8.1\Include\um\winbase.h(8864): note: or       'unsigned long `anonymous-namespace'::_InterlockedDecrement(volatile unsigned long *)' (compiling source file ..\..\FaustPluginProcessor.cpp)
    1>  C:\Program Files (x86)\Windows Kits\8.1\Include\um\winbase.h(8855): note: or       'unsigned int `anonymous-namespace'::_InterlockedDecrement(volatile unsigned int *)' (compiling source file ..\..\FaustPluginProcessor.cpp)
    1>  C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h(2706): note: or       '`anonymous-namespace'::LONG `anonymous-namespace'::_InterlockedDecrement(volatile `anonymous-namespace'::LONG *)' (compiling source file ..\..\FaustPluginProcessor.cpp)
    1>  c:\users\xavier\documents\juce\juce-grapefruit-windows\juce\modules\juce_core\memory/juce_Atomic.h(260): note: while trying to match the argument list '(volatile long *)' (compiling source file ..\..\FaustPluginProcessor.cpp)
    1>  c:\users\xavier\documents\juce\juce-grapefruit-windows\juce\modules\juce_core\memory/juce_Atomic.h(259): note: while compiling class template member function 'int juce::WindowsInterlockedHelpersBase<Type,4>::dec(volatile Type *) noexcept'
    1>          with
    1>          [
    1>              Type=int
    1>          ] (compiling source file ..\..\FaustPluginProcessor.cpp)
    1>  c:\users\xavier\documents\juce\juce-grapefruit-windows\juce\modules\juce_core\memory/juce_Atomic.h(381): note: see reference to function template instantiation 'int juce::WindowsInterlockedHelpersBase<Type,4>::dec(volatile Type *) noexcept' being compiled
    1>          with
    1>          [
    1>              Type=int
    1>          ] (compiling source file ..\..\FaustPluginProcessor.cpp)
    1>  c:\users\xavier\documents\juce\juce-grapefruit-windows\juce\modules\juce_core\memory/juce_Atomic.h(305): note: see reference to class template instantiation 'juce::WindowsInterlockedHelpersBase<Type,4>' being compiled
    1>          with
    1>          [
    1>              Type=int
    1>          ] (compiling source file ..\..\FaustPluginProcessor.cpp)
    1>  c:\users\xavier\documents\juce\juce-grapefruit-windows\juce\modules\juce_core\memory/juce_Atomic.h(322): note: see reference to class template instantiation 'juce::WindowsInterlockedHelpers<Type>' being compiled
    1>          with
    1>          [
    1>              Type=int
    1>          ] (compiling source file ..\..\FaustPluginProcessor.cpp)
    1>  c:\users\xavier\documents\juce\juce-grapefruit-windows\juce\modules\juce_core\memory/juce_Atomic.h(317): note: while compiling class template member function 'int juce::Atomic<int>::get(void) noexcept const' (compiling source file ..\..\FaustPluginProcessor.cpp)
    1>  c:\users\xavier\documents\juce\juce-grapefruit-windows\juce\modules\juce_core\memory/juce_ReferenceCountedObject.h(103): note: see reference to function template instantiation 'int juce::Atomic<int>::get(void) noexcept const' being compiled (compiling source file ..\..\FaustPluginProcessor.cpp)
    1>  c:\users\xavier\documents\juce\juce-grapefruit-windows\juce\modules\juce_core\memory/juce_LeakedObjectDetector.h(101): note: see reference to class template instantiation 'juce::Atomic<int>' being compiled (compiling source file ..\..\FaustPluginProcessor.cpp)
    1>  c:\users\xavier\documents\juce\juce-grapefruit-windows\juce\modules\juce_core\memory/juce_LeakedObjectDetector.h(88): note: see reference to class template instantiation 'juce::LeakedObjectDetector<OwnerClass>::LeakCounter' being compiled (compiling source file ..\..\FaustPluginProcessor.cpp)
    1>  c:\users\xavier\documents\juce\juce-grapefruit-windows\juce\modules\juce_core\memory/juce_LeakedObjectDetector.h(114): note: see reference to class template instantiation 'juce::LeakedObjectDetector<OwnerClass>' being compiled (compiling source file ..\..\FaustPluginProcessor.cpp)
    1>  juce_osc.cpp
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    
    

    Thank you very much for your help.

    opened by xaviergodart 16
  • contribution guidelines

    contribution guidelines

    @ed95 @julianstorer

    is there a way to submit patches without having them rewritten by someone else with no mention of the original author (see #548 and e206bbe)?

    if copyright ownership is an issue, isn't it what a Contributor License Agreement is about? besides the fact that for such one-liner fixes, signing a CLA should not even be required.

    README.md mentions contacting the authors, so here i go. I do have a few of such simple fixes for linux down the pipe.

    cheers, Paul

    opened by piem 15
  • [Bug]: Raspberry Pi broken Graphics since 7.0.3 (tested on 64-bit)

    [Bug]: Raspberry Pi broken Graphics since 7.0.3 (tested on 64-bit)

    Detailed steps on how to reproduce the bug

    Install fresh raspbian 64-bit on raspberry 4 clone JUCE make launch Projucer

    The window is buggy

    Additional notes :

    I’ve been compiling on CI for raspberry many times without problems, and I just discovered that one of my apps is having troubles rendering the main window on raspberry. Strangely, I have another app that works just fine. I decided to compile it directly from the Raspberry, starting with the Projucer, and I discovered that the Projucer itself is having the exact same problem

    image

    I’ll try to summarize my findings, you can try the bleeding edge version to see the problem

    OS = Raspbian Bullseye 64-bit JUEC : Fork synchronized to latest commit of develop branch (slightly modified but no big UI changes) App1 = Chataigne ( Chataigne | Chataigne 1 ) App2 = LGML ( LGML | Le Grand Mechant Loop )

    Normal GUI Mode (not using OpenGL Renderer) : App1 = Works App2 = Does not work (screenshot above) Projucer = Does not work (screenshot above)

    OpenGL renderer mode : App1 = Works App2 = Works but not really : the app shows quite alright but the menubar is showing the same bug Projucer = Not tested with GL renderer

    App1 & App2 are both using the same sub-framework for generating the UI ( OrganicUI : GitHub - benkuper/juce_organicui: A massive JUCE module that adds multiple UI and control features 1 ) which allows to switch between renderers.

    It’s quite reassuring that Projucer is having the same problem but then I don’t know why App1 is actually working…

    If you have any idea about that I’m all ears ! Thank you

    What is the expected behaviour?

    The GUI is showing normally

    Operating systems

    Linux, Other

    What versions of the operating systems?

    Raspbian OS 64-bit JUCE 7.0.3 (latest develop branch)

    Architectures

    ARM, 64-bit

    Stacktrace

    No response

    Plug-in formats (if applicable)

    No response

    Plug-in host applications (DAWs) (if applicable)

    No response

    Testing on the develop branch

    The bug is present on the develop branch

    Code of Conduct

    • [X] I agree to follow the Code of Conduct
    opened by benkuper 14
  • [Bug]: JUCE 6.1.5 fails to compile with 20220209 release of llvm-mingw

    [Bug]: JUCE 6.1.5 fails to compile with 20220209 release of llvm-mingw

    Detailed steps on how to reproduce the bug

    Containerised repro using JUCE audio plugin example:

    git clone https://github.com/Birch-san/juce-repro.git
    cd juce-repro
    docker build .
    

    juce_win32_ComInterfaces.h attempts to define UIA_ constants. These clash with the macros defined in MinGW's uiautomationclient.h.

    When we compile with llvm-mingw 20220209, we get the following error:

    In file included from /linux_native/include/JUCE-6.1.5/modules/juce_gui_basics/juce_gui_basics.cpp:309:
    /linux_native/include/JUCE-6.1.5/modules/juce_gui_basics/native/accessibility/juce_win32_ComInterfaces.h:123:12: error: expected unqualified-id
    const long UIA_InvokePatternId = 10000;
               ^
    /opt/llvm-mingw/x86_64-w64-mingw32/include/uiautomationclient.h:34:30: note: expanded from macro 'UIA_InvokePatternId'
    #define UIA_InvokePatternId (10000)
    

    JUCE tries to declare a constant:

    const long UIA_InvokePatternId = 10000;
    

    But the token UIA_InvokePatternId already exists as a MinGW macro, and expands to (10000), making the statement:

    const long (10000) = 10000;
    

    This compiles fine in llvm-mingw 20211002. Perhaps the MinGW uiautomationclient.h header was different back then?

    I am currently working around the problem by telling MinGW not to define any UIA_ macros, and manually supplying the macros upon which JUCE depends.

    What is the expected behaviour?

    Successful compilation. JUCE should not declare any constants whose names would clash with macros provided by MinGW.

    Operating systems

    Linux

    What versions of the operating systems?

    Ubuntu 22.04 cross-compiling for Windows 7 x86_64

    Architectures

    x86_64

    Stacktrace

    Full stack here:
    https://gist.github.com/Birch-san/0364f650a70505ce8c4b1859eab19b0e
    
    In file included from /linux_native/include/JUCE-6.1.5/modules/juce_gui_basics/juce_gui_basics.cpp:309:
    /linux_native/include/JUCE-6.1.5/modules/juce_gui_basics/native/accessibility/juce_win32_ComInterfaces.h:123:12: error: expected unqualified-id
    const long UIA_InvokePatternId = 10000;
               ^
    /opt/llvm-mingw/x86_64-w64-mingw32/include/uiautomationclient.h:34:30: note: expanded from macro 'UIA_InvokePatternId'
    #define UIA_InvokePatternId (10000)
    

    Plug-in formats (if applicable)

    No response

    Plug-in host applications (DAWs) (if applicable)

    No response

    Testing on the develop branch

    I have not tested against the develop branch

    Code of Conduct

    • [X] I agree to follow the Code of Conduct
    opened by Birch-san 13
  • PopupMenu broken on embedded, bridged plugins

    PopupMenu broken on embedded, bridged plugins

    A number of DAWs these days feature bridge processes to enable loading 32-bit plugins into a 64-bit host, or vice-versa. The plugin is loaded into the bridge process, with which the host communicates to process/generate audio. A number of DAWs also embed VST GUIs into their main window, usually as an MDI child. However, when a VST from a bridge process is embedded as a child window of the DAW, JUCE's PopupMenus can break, where the popup menu does not appear, or only appears very briefly.

    This was originally observed with the Helm VST loaded into LMMS, but I have reproduced it with Helm in Hermann Seib's VSTHost too. (I have heard others have had this problem with other JUCE-based VSTs such as Dexed, but I have not been able to reproduce this particular case.)

    To reproduce: download Helm and VSTHost (both 32- and 64-bit). Load an instance of Helm with a matching architecture to that of VSTHost, and observe that opening the "PATTERN" menu under "ARP" and the "TYPE" menu under "DISTORTION" behaves exactly as expected. Now load an instance with a non-matching architecture. VSTHost will load this in a bridge process, and attempts to open the same menus will not succeed, the menus either not appearing, or only appearing very briefly.

    This behaviour occurs for both 32- and 64-bit VST2 builds under Windows. It may well exist in other versions but I don't own a host with the capabilities to test this. I have built Helm with the latest version of JUCE's develop branch (f80df37 at time of writing; a few simple patches to Helm were required) and the issue still persists.

    The issue seems to stem from the Win32 version of Process::isForegroundProcess https://github.com/WeAreROLI/JUCE/blob/f80df37183382a3194023129f3c2badf23176b74/modules/juce_gui_basics/native/juce_win32_Windowing.cpp#L3699-L3710 which returns false in the case that the plugin is bridged and embedded, since the foreground window belongs to the DAW, which is in a different process to the plugin. Then MenuWindow::doesAnyJuceCompHaveFocus returns false, causing MouseSourceState::checkButtonState to immediately dismiss the menu.

    FL Studio, while it can have embedded, bridged plugins, has a workaround; they don't set the WS_CHILD style on their VST wrapper window when embedding. Thus, while the plugin is embedded as a child of FL, Windows recognises it as a separate top-level window for the purposes of GetForegroundWindow and so the above code works as intended. This, however, is not standard/correct usage of the Win32 API as far as I am aware - child windows should always have WS_CHILD set - and so ideally should not be required.

    opened by DomClark 13
  • CoreAudioReader::readSamples() bug

    CoreAudioReader::readSamples() bug

    There is a bug in CoreAudioReader::readSamples(). The bug is present in develop branch at least of revision 16dd266

    The bug stems from the fact that the interface to ExtAudioFileRead specifies that for the non-const pointer argument *ioNumberFrames, "Fewer frames may be read than were requested".

    However CoreAudioReader::readSamples() treats ExtAudioFileRead() as if it either returns exactly the number of frames requested or fails. As a consequence readSamples() works incorrectly when the number of frames read by ExtAudioFileRead() is lower than requested.

    This can be seen in the code excerpt below:

    auto numThisTime = jmin (8192, numSamples);
    auto numBytes = sizeof (float) * (size_t) numThisTime;
    
    audioDataBlock.ensureSize (numBytes * numChannels, false);
    auto* data = static_cast<float*> (audioDataBlock.getData());
    
    for (int j = (int) numChannels; --j >= 0;)
    {
        bufferList->mBuffers[j].mNumberChannels = 1;
        bufferList->mBuffers[j].mDataByteSize = (UInt32) numBytes;
        bufferList->mBuffers[j].mData = data;
        data += numThisTime;
    }
    
    auto numFramesToRead = (UInt32) numThisTime;
    auto status = ExtAudioFileRead (audioFileRef, &numFramesToRead, bufferList);
    
    /****************************************************************************************************************/
    //     BUG
    //     numFramesToRead may now be less than numThisTime
    /****************************************************************************************************************/
    
    if (status != noErr)
        return false;
    
    for (int i = numDestChannels; --i >= 0;)
    {
        auto* dest = destSamples[(i < (int) numChannels ? channelMap[i] : i)];
    
        if (dest != nullptr)
        {
            if (i < (int) numChannels)
    
               /****************************************************************************************************************/
               //     BUG!!! 
               //     numBytes is numThisTime * sizeof(float) but should be numFramesToRead * sizeof(float) 
               /****************************************************************************************************************/
    
                memcpy (dest + startOffsetInDestBuffer, bufferList->mBuffers[i].mData, numBytes); 
            else
                zeromem (dest + startOffsetInDestBuffer, numBytes);
        }
    }
    

    If needed I can provide a simple JUCE project with an audio file that produces erroneous audio output as a result of the above.

    opened by jamiebullock 12
  • VST3 in Ardour on Linux - resizing fix

    VST3 in Ardour on Linux - resizing fix

    Hi JUCE team, I believe this PR fixes resize loop issues I have been experiencing trying to build VST3 plugins on Linux to run in Ardour.

    Initially I took a look at the Ardour VST3 host code to see if there was an issue there. That lead to this PR, but upon further digging I found that JUCE's call to updateBounds on the ComponentPeer seems to be interfering with Ardour's own window resizing. It seems like JUCE is trying to modify the plugin window size directly during the onSize callback, while the VST3 spec indicates that the host should handle window resizing.

    Prior to this change, any resizable JUCE plugin causes huge performance issues in Ardour (Linux) when the GUI is opened and immediately enters a resize loop. It's not usable at all. After the change is applied, the plugin UI behaves fine and everything seems stable.

    opened by ctsexton 10
  • [Bug]: special locations ignore XDG environment variables

    [Bug]: special locations ignore XDG environment variables

    Detailed steps on how to reproduce the bug

    • configure JUCE to build the extras
    • build JUCE with extras
    • export the XDG_CONFIG_HOME envvar, setting it to /tmp/
    • run the SystemInfoDemo:
      XDG_CONFIG_HOME=/tmp/ ./SystemInfoDemo_artefacts/SystemInfoDemo
      
    
    notice that the SystemInfoDemo window says:
    
    > User application data folder:   /home/user/.config
    
    ### What is the expected behaviour?
    
    i expect it to honour the `XDG_CONFIG_HOME` *envvar, so that SystemInfoDemo says:
    
    > User application data folder:   /tmp
    
    
    
    note, that adding a line `XDG_CONFIG_HOME=/tmp`  to the `~/.config/user-dirs.dirs` file works.
    
    however, when i read the [specifications](https://specifications.freedesktop.org/basedir-spec/latest) i only see that the *environment variables* must be honoured.
    i guess that falling back to values in `~/.config/user-dirs.dirs` is fine, as long as the environment variables take precedence.
    
    it should be simple enough to first check the envvar whether it exists, before parsing the `user-dirs.dirs` file for a fallback.
    
    ### Operating systems
    
    Linux
    
    ### What versions of the operating systems?
    
    Debian/bookworm
    
    ### Architectures
    
    x86_64
    
    ### Stacktrace
    
    _No response_
    
    ### Plug-in formats (if applicable)
    
    _No response_
    
    ### Plug-in host applications (DAWs) (if applicable)
    
    _No response_
    
    ### Testing on the `develop` branch
    
    I have not tested against the `develop` branch
    
    ### Code of Conduct
    
    - [X] I agree to follow the Code of Conduct
    opened by umlaeute 0
  • Fix default mouse cursors on macos

    Fix default mouse cursors on macos

    The issue has been described on the JUCE Forum: thread.

    The are two commits in this PR, the first one is important and fixes the issue and the second one is just formatting, but they can be squashed into one.

    opened by pierreguillot 0
  • Fix dark mode notification on macOS

    Fix dark mode notification on macOS

    The issue has been described on the JUCE Forum: thread.

    This PR reverts the commit. that introduced the bug with some minor adaptations to fix the conflicts with later modifications.

    opened by pierreguillot 0
  • Fix projucer when building with clang under linux

    Fix projucer when building with clang under linux

    When the Projucer is built under Linux, the symbol "linux" must be undefined to avoid colliding with the TargetOS::OS::linux enumeration member. Presently, this is only done when building with GCC. This pull request modifies jucer_CommonHeaders.h to also under it when building with clang.

    opened by dave-billin 0
  • [Bug]: SCHED_IDLE isn't defined on FreeBSD

    [Bug]: SCHED_IDLE isn't defined on FreeBSD

    Detailed steps on how to reproduce the bug

    here

    What is the expected behaviour?

    n/a

    Operating systems

    Other

    What versions of the operating systems?

    7.0.3

    Architectures

    x86_64

    Stacktrace

    n/a
    

    Plug-in formats (if applicable)

    No response

    Plug-in host applications (DAWs) (if applicable)

    n/a

    Testing on the develop branch

    The bug is present on the develop branch

    Code of Conduct

    • [X] I agree to follow the Code of Conduct
    opened by yurivict 0
  • Multichannel support for AudioFormatReader::searchForLevel

    Multichannel support for AudioFormatReader::searchForLevel

    AudioFormatReader::searchForLevel currently just checks the first two channels in a given file, regardless of channel count. The screenshots below show a simple command line utility I wrote, which checks for the first and last non-zero samples in an audio file, regardless of channel count. The bottom two files in the table include results from analyzing multi-channel files after making this change, with 8- and 10-channel files respectively.

    image image

    opened by acendan 2
Releases(7.0.4)
Owner
JUCE
The JUCE Framework
JUCE
vintage - a declarative API for C++ audio plug-ins

This is an experiment in seeing how far modern C++ features allow to write purely declarative code and introspect this code through various reflection-like features.

Jean-Michaël Celerier 29 Sep 29, 2022
PeakEater is a free open-source VST3/AU waveshaper plugin

PeakEater Free open source VST3/AU wave shaping plugin for macOS and Windows. View Demo · Download · Report Bug Table of Contents About The Project Fe

Vladyslav Voinov 45 Dec 17, 2022
PortAudio is a portable audio I/O library designed for cross-platform support of audio

PortAudio is a cross-platform, open-source C language library for real-time audio input and output.

PortAudio 786 Jan 1, 2023
SuperCollider as a VST3 plugin

PluginCollider PluginCollider is an experimental fork of https://github.com/supercollider/SuperColliderAU and it is still not complete since it only b

Pascal Gauthier 33 Dec 23, 2022
An OBS plugin that allows capture of independant application audio streams on Windows, in a similar fashion to OBS's game capture and Discord's application streaming.

win-capture-audio An OBS plugin based on OBS's win-capture/game-capture that hooks WASAPI's audio output functions (rather than the various graphics A

Joe Kaushal 3k Jan 9, 2023
A basic infrastructure for a polyphonic synthesiser, written with the JUCE framework.

JuceSynthBase This JUCE module is a complete infrastructure for a polyphonic synthesizer, providing voice management, MIDI management, and some more a

Ben Vining 14 May 28, 2021
C++ library for audio and music analysis, description and synthesis, including Python bindings

Essentia Essentia is an open-source C++ library for audio analysis and audio-based music information retrieval released under the Affero GPL license.

Music Technology Group - Universitat Pompeu Fabra 2.3k Jan 7, 2023
projectM - cross-platform music visualization. Open-source and Milkdrop-compatible

projectM - cross-platform music visualization. Open-source and Milkdrop-compatible

projectM Visualizer 2.5k Dec 31, 2022
C library for cross-platform real-time audio input and output

libsoundio C library providing cross-platform audio input and output. The API is suitable for real-time software such as digital audio workstations as

Andrew Kelley 1.6k Jan 6, 2023
Tenacity is an easy-to-use, cross-platform multi-track audio editor/recorder for Windows, MacOS, GNU/Linux

Tenacity is an easy-to-use, cross-platform multi-track audio editor/recorder for Windows, MacOS, GNU/Linux and other operating systems and is developed by a group of volunteers as open source software.

null 59 Jan 1, 2023
Cross platform C++11 library for decoding audio (mp3, wav, ogg, opus, flac, etc)

Libnyquist is a small C++11 library for reading sampled audio data from disk or memory. It is intended to be used an audio loading frontend for games, audio sequencers, music players, and more.

Dimitri Diakopoulos 442 Jan 2, 2023
Sparklines For JUCE AudioBlocks

Melatonin Audio Sparklines This is a C++ JUCE module that summarizes and visualizes what's in an AudioBlock. It's very useful to get a quick idea of w

Sudara Williams 74 Nov 17, 2022
Free and open-source (GPL3+) VCVrack modules made by Allieway Audio

AlliewayAudio_Freebies Free and open source VCVrack modules made by Allieway Audio with love <3 Disclaimer: All direct clones or recreations were made

Allie 5 Jan 10, 2022
AudMonkey - Free and open source audio editor

AudMonkey is an easy-to-use, multi-track audio editor and recorder for Windows, Mac OS X, GNU/Linux and other operating systems. AudMonkey is open source software licensed under GPL, version 2 or later.

AudMonkey 36 Mar 15, 2022
Open source digital sound effects based on JACK audio connection kit.

Noiseworks Digital Audio Effects Repository Open source digital sound effects based on JACK audio connection kit. This repository is intended to provi

null 5 Jul 29, 2022
Open-source audio fingerprint by MusicIP

README for the Open Fingerprint Architecture library "LIBOFA" Copyright (C) 2006, MusicIP Corporation 605 E. Huntington Dr. Suite 201, Monrovia CA 910

Adriano Bonat 40 Sep 1, 2022
PendulumSynth is an on-going and open-source project, running on Arduino platform with the goal of mixing real-world physics into music composition and musical performance.

PendulumSynth PendulumSynth is an on-going and open-source project, running on Arduino platform with the goal of mixing real-world physics into music

Mohammadreza Anvari 3 Oct 7, 2022
The open source framework for sample based instruments

HISE Build Status macOS: Build Status Windows: The open source framework for sample based instruments. HISE is a cross-platform open source audio appl

null 662 Jan 8, 2023