JUCE (Jules’ Utility Class Extensions)是由Raw MaterialSoftware发布的一套基于C++的跨平台应用程序框架类库(Windows, Mac,Linux)。JUCE的特殊之处在于其友好的用户界面以及强大的音频、图像处理能力。JUCE适合那些想使用干净、快捷、高层的API,而不想 把时间浪费在使用不同类库,面向不同平台上的开发者。JUCE能够胜任大型、复杂的应用程序(C++)的开发。

与其他应用程序框架类似,JUCE有众多覆盖音频、图像、XML分析、网络等方面的类。JUCE的开发者就是被JAVA的JDK所启发,然后想做出基于C++的对等物。

JUCE最突出的特点是其对音频的特殊支持。JUCE原本是作为Tracktion audiosequencer的一部分而开发的,但后来脱离出来成为了一个独立的工程。JUCE支持音频和MIDI回放,复音合成器,对多种音频格式文件 的读取。同时,JUCE还封装了诸如VST、RTAS、AU等技术的代码,能够开发各种音源、效果插件。众多音频厂商如Imageline、M-AUDIO、cycling74、KORG、Presonus、TC Group等等都是JUCE的使用者。

兼容WinXP / Win32系统的版本是 3.2.0


商业许可

许可 一次性
JUCE Personal(针对收入低于5万美元收入限制的开发商或初创企业) 免费 免费
JUCE Indie(针对收入低于50万美元限制的小型企业) 40美元 800美元
JUCE Pro(无收入限制) 130美元 2600美元
JUCE Educational(无收入限制)真正的教育机构 对费 免费

所有许可证都允许您在商业上发布应用程序,只要您不超过收入限制并支付适用的费用。一旦您的业务达到您的JUCE许可级别的收入限制,要继续分发您的应用程序,您必须升级您的JUCE许可证, 或者根据GNU General Public license v.3发布您的应用程序,这意味着您必须提供应用程序的源代码。


中文字体显示

$ vi modules/juce_graphics/native/juce_win32_Fonts.cpp

struct DefaultFontNames
{
    DefaultFontNames()
    {
        if (juce_isRunningInWine())
        {
            defaultSans     = "Bitstream Vera Sans";
            defaultSerif    = "Bitstream Vera Serif";
            defaultFixed    = "Bitstream Vera Sans Mono";
        }
        else
        {
            // 替换成支持中文的字体
*            defaultSans     = "Verdana";
*            defaultSerif    = "Times New Roman";
*            defaultFixed    = "Lucida Console";
*            defaultFallback = "Tahoma";  // (contains plenty of unicode characters)
        }
    }

    String defaultSans, defaultSerif, defaultFixed, defaultFallback;
};


去掉 SplashScreen

$ vi modules/juce_gui_basics/windows/juce_ResizableWindow.cpp
- #if !JucePlugin_Build_Standalone
-   splashScreen = new JUCESplashScreen (*this);
- #endif


去掉 JUCE Version print

$ vi JUCE/modules/juce_core/system/juce_SystemStats.cpp
 49 #if JUCE_DEBUG && ! JUCE_DISABLE_JUCE_VERSION_PRINTING                                                                          
 50  struct JuceVersionPrinter                                                                                                      
 51  {                                                                                                                              
 52   ¦ ¦JuceVersionPrinter()                                                                                                       
 53   ¦ ¦{                                                                                                                          
 54   ¦ ¦ ¦ ¦DBG (SystemStats::getJUCEVersion());                                                                                   
 55   ¦ ¦}                                                                                                                          
 56  };                                                                                                                             
 57                                                                                                                                 
 58  static JuceVersionPrinter juceVersionPrinter;                                                                                  
 59 #endif


mingw

error: 'mutex' in namespace 'std' does not name a type
error: 'thread' in namespace 'std' does not name a type
error: 'condition_variable' in namespace 'std' does not name a type

https://github.com/meganz/mingw-std-threads

cp mingw.* /usr/x86_64-w64-mingw32/include/

cp mingw.* /usr/x86_64-w64-mingw32/include/../../share/mingw-w64/include/

sed -i “s/#include /\#include /g" `grep "#include " -rl *`

sed -i “s/#include /\#include /g" `grep "#include " -rl *`

sed -i “s/#include /\#include /g" `grep "#include " -rl *`

$ vi CMakeLists.txt

 49 if (CMAKE_SYSTEM_NAME MATCHES "Windows")   
 50   ¦ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
 51   ¦ ¦ ¦ message(STATUS "current platform: MINGW")
 52   ¦ ¦ ¦ add_definitions(-D_WIN32_WINNT=0x0600)
 53   ¦ ¦ ¦ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
 54   ¦ endif()
 55 endif()

以上问题没有解决??

$ ll /usr/bin/x86_64-w64-mingw32-g++*
lrwxrwxrwx 1 root root      40 6月   8 08:29 /usr/bin/x86_64-w64-mingw32-g++ -> /etc/alternatives/x86_64-w64-mingw32-g++
-rwxr-xr-x 2 root root 1066664 6月  21  2019 /usr/bin/x86_64-w64-mingw32-g++-posix
-rwxr-xr-x 2 root root 1066664 6月  21  2019 /usr/bin/x86_64-w64-mingw32-g++-win32

$ update-alternatives --display x86_64-w64-mingw32-g++
x86_64-w64-mingw32-g++ - 自动模式
  最佳链接版本为 /usr/bin/x86_64-w64-mingw32-g++-win32
 链接目前指向 /usr/bin/x86_64-w64-mingw32-g++-win32
  链接 x86_64-w64-mingw32-g++ 指向 /usr/bin/x86_64-w64-mingw32-g++
  从链接 x86_64-w64-mingw32-c++ 指向 /usr/bin/x86_64-w64-mingw32-c++
/usr/bin/x86_64-w64-mingw32-g++-posix - 优先级 30
  次要 x86_64-w64-mingw32-c++:/usr/bin/x86_64-w64-mingw32-c++-posix
/usr/bin/x86_64-w64-mingw32-g++-win32 - 优先级 60
  次要 x86_64-w64-mingw32-c++:/usr/bin/x86_64-w64-mingw32-c++-win32

$ sudo update-alternatives --config x86_64-w64-mingw32-g++
有 2 个候选项可用于替换 x86_64-w64-mingw32-g++ (提供 /usr/bin/x86_64-w64-mingw32-g++)。

  选择       路径                                 优先级  状态
------------------------------------------------------------
* 0            /usr/bin/x86_64-w64-mingw32-g++-win32   60        自动模式
  1            /usr/bin/x86_64-w64-mingw32-g++-posix   30        手动模式
  2            /usr/bin/x86_64-w64-mingw32-g++-win32   60        手动模式

要维持当前值[*]请按<回车键>,或者键入选择的编号:1
$ sudo update-alternatives --config x86_64-w64-mingw32-gcc


$ cd JUCE

$ cmake . -B cmake-build -DJUCE_BUILD_EXAMPLES=ON -DJUCE_BUILD_EXTRAS=ON -DCMAKE_TOOLCHAIN_FILE=~/mingw32_x86_64.cmake -DCMAKE_VERBOSE_MAKEFILE=ON

$ cmake --build cmake-build --target DemoRunner