mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-28 02:30:05 +00:00
Merge branch 'juce-framework:master' into master
This commit is contained in:
commit
fc0c2382c6
3070 changed files with 520511 additions and 163491 deletions
23
.clang-tidy
Normal file
23
.clang-tidy
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
Checks: >
|
||||
-clang-analyzer-cplusplus.NewDeleteLeaks,
|
||||
-clang-analyzer-optin.performance.Padding,
|
||||
-clang-analyzer-security.FloatLoopCounter,
|
||||
-clang-analyzer-security.insecureAPI.strcpy,
|
||||
modernize-concat-nested-namespaces,
|
||||
|
||||
WarningsAsErrors: '*'
|
||||
|
||||
# No negative lookahead available here, which makes things difficult.
|
||||
#
|
||||
# We want checks to run on JUCE files included from the JUCE modules. We can
|
||||
# restrict these to files named `juce_.*`.
|
||||
#
|
||||
# We also want checks to run on any files inlcuded from the examples or extras
|
||||
# directories. However, some include paths generated by the Android Studio build
|
||||
# system look like:
|
||||
#
|
||||
# ~/JUCE/examples/DemoRunner/Builds/Android/app/../../../../../modules/juce_box2d/box2d/Collision/b2CollideEdge.cpp
|
||||
#
|
||||
# Since we can only opt-in to paths, we restrict the maximum depth of the path
|
||||
# past examples/extras.
|
||||
HeaderFilterRegex: '(.*\/modules\/juce_.*juce_[^\/]*$)|(\/(examples|extras)(\/[^\/]*){1,7}$)'
|
||||
9
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
9
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
|
|
@ -48,10 +48,11 @@ body:
|
|||
multiple: true
|
||||
options:
|
||||
- x86_64
|
||||
- ARM
|
||||
- Other
|
||||
- 64-bit
|
||||
- 32-bit
|
||||
- Arm64/aarch64
|
||||
- Arm64EC (Windows)
|
||||
- x86 (Windows, Android)
|
||||
- 32 bit Arm (Linux, Android)
|
||||
- Unsupported
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
|
|
|
|||
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -65,3 +65,5 @@ extras/Projucer/JUCECompileEngine.dylib
|
|||
/build
|
||||
|
||||
CMakeUserPresets.json
|
||||
.editorconfig
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
include:
|
||||
- project: 'juce-repos/JUCE-utils'
|
||||
file: '/CI/gitlab-ci.yml'
|
||||
variables:
|
||||
REF: &REF master
|
||||
|
||||
include:
|
||||
- project: juce-repos/JUCE-utils
|
||||
file: /CI/gitlab-ci.yml
|
||||
ref: *REF
|
||||
inputs:
|
||||
ref: *REF
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,16 +1,132 @@
|
|||
== Major JUCE features and updates ==
|
||||
# Major JUCE features and updates
|
||||
|
||||
This file just lists the more notable headline features. For more detailed info
|
||||
about changes and bugfixes please see the git log and BREAKING-CHANGES.txt.
|
||||
This file lists the more notable headline features. For more detailed info
|
||||
about changes and bugfixes please see the git log and BREAKING_CHANGES.md.
|
||||
|
||||
## Version 8.0.4
|
||||
|
||||
- Simplified singleton creation
|
||||
- Fixed some Javascript and C++ interoperability issues
|
||||
- Added exact passthrough of MIDI CC timestamps
|
||||
- Switched to obtaining MIDI plug-in properties at runtime
|
||||
- Improved Windows Arm CMake support
|
||||
- Improved ShapedText
|
||||
- Fixed some issues with Windows DLL builds
|
||||
- Add system-provided timestamps to VBlankAttachment and animations
|
||||
- Fixed some iOS deprecation warnings
|
||||
- Updated embedded CHOC version
|
||||
- Updated embedded Oboe version
|
||||
- Moved the JavaScript implementation into a separate module
|
||||
|
||||
## Version 8.0.3
|
||||
|
||||
- Updated the AAX SDK to 2.8.0
|
||||
- Fixed multiple Direct2D drawing issues
|
||||
- Fixed buffer size and sample rate selection on iOS 18
|
||||
|
||||
## Version 8.0.2
|
||||
|
||||
- Fixed some issues handling large images in Direct2D
|
||||
- Enabled rounded window corners in Windows 11
|
||||
- Fixed some compiler warnings in Xcode 16
|
||||
- Improved macOS and Android GU rendering performance
|
||||
- Added support for C++20 and C++23
|
||||
- Fixed a Windows mouse response issue
|
||||
- Updated the VST3 SDK to 3.7.12
|
||||
|
||||
## Version 8.0.1
|
||||
|
||||
- Fixed some issues with text layout
|
||||
- Removed source code for unsupported platforms
|
||||
- Fixed some Direct2D issues
|
||||
- Update the embedded version of harfbuzz
|
||||
- Added more surround formats
|
||||
|
||||
## Version 8.0.0
|
||||
|
||||
- Added a new Direct2D renderer
|
||||
- Added support for WebView based UIs
|
||||
- Added consistent unicode support across platforms
|
||||
- Added a new animation module
|
||||
- Bundled the AAX SDK
|
||||
|
||||
## Version 7.0.12
|
||||
|
||||
- Fixed an issue with timers in Pro Tools
|
||||
- Fixed an issue with Projucer Xcode code signing
|
||||
|
||||
## Version 7.0.11
|
||||
|
||||
- Fixed an issue with paths containing a tilde in Xcode
|
||||
- Multiple fixes for plug-in deployment and code signing in Xcode
|
||||
- Fixed an issue painting an empty RectangleList
|
||||
- Improved the performance of TreeView rendering
|
||||
|
||||
## Version 7.0.10
|
||||
|
||||
- Fixed multiple issues selecting devices in AudioDeviceSelector
|
||||
- Updated the bundled Oboe version
|
||||
- Fixed multiple issues with Timer
|
||||
- Updated the bundled version of FLAC
|
||||
- Added configuration options for sockets
|
||||
- Added new JSON::Formatter
|
||||
- Added support for Xcode 15.1
|
||||
- Update OpenGL compatibility headers
|
||||
- Added ChildProcessManager
|
||||
- Fixed multiple MIDI-CI issues
|
||||
|
||||
## Version 7.0.9
|
||||
|
||||
- Added MIDI-CI support
|
||||
- Added enumerate utility function
|
||||
- Fixed a macOS/iOS CMake signing issue
|
||||
|
||||
## Version 7.0.8
|
||||
|
||||
- Added macOS/iOS AudioWorkgroup support
|
||||
- Added Xcode 15, macOS Sonoma and LLVM 17 compatibility
|
||||
- Added serialisation tools
|
||||
- Fixed some VST3 manifest generation issues
|
||||
- Fixed a MessageManager locking bug
|
||||
- Fixed GCC 7 VST3 support
|
||||
- Fixed some SVG scaling issues
|
||||
|
||||
## Version 7.0.7
|
||||
|
||||
- Fixed some macOS 14.0 deprecations
|
||||
- Fixed some issues with VST3 manifest generation
|
||||
- Fixed a Metal layer rendering issue
|
||||
- Fixed an issue setting realtime thread priorities
|
||||
- Fixed a crash in VirtualDesktopWatcher
|
||||
- Fixed an AUv3 bundling problem
|
||||
|
||||
## Version 7.0.6
|
||||
|
||||
- Added support for VST3 bundles and moduleinfo.json
|
||||
- Improved message box dismissal
|
||||
- Improved WebView support
|
||||
- Updated to the latest VST3 and AAX SDKs
|
||||
- Fixed some Metal layer rendering issues
|
||||
- Improved ambisonic support
|
||||
- Improved machine ID support
|
||||
- Improved the HighResolutionTimer implementation
|
||||
|
||||
## Version 7.0.5
|
||||
|
||||
- Fixed Windows 7 compatibility
|
||||
- Fixed dark mode notifications on macOS
|
||||
- Improved the performance of AudioProcessorGraph
|
||||
|
||||
## Version 7.0.4
|
||||
|
||||
Version 7.0.4
|
||||
- Improved Metal device handling
|
||||
- Adopted more C++17 features
|
||||
- Improved input handling on macOS and iOS
|
||||
- Fixed a GUI display issue on Linux
|
||||
- Fixed some compiler warnings
|
||||
|
||||
Version 7.0.3
|
||||
## Version 7.0.3
|
||||
|
||||
- Added a unique machine ID
|
||||
- Added new threading classes
|
||||
- Improved the performance of multiple OpenGL contexts
|
||||
|
|
@ -19,18 +135,21 @@ Version 7.0.3
|
|||
- Fixed Studio One drawing performance
|
||||
- Updated the FLAC library
|
||||
|
||||
Version 7.0.2
|
||||
## Version 7.0.2
|
||||
|
||||
- Fixed accessibility table navigation
|
||||
- Fixed Android file access on older APIs
|
||||
- Improved Linux VST3 threading
|
||||
- Improved ARA integration
|
||||
|
||||
Version 7.0.1
|
||||
## Version 7.0.1
|
||||
|
||||
- Fixed some Xcode and MSVC compiler warnings
|
||||
- Improved VST3 bus configuration and channel handling
|
||||
- Fixed some Metal layer rendering bugs
|
||||
|
||||
Version 7.0.0
|
||||
## Version 7.0.0
|
||||
|
||||
- Added Audio Random Access (ARA) SDK support
|
||||
- Added support for authoring and hosting LV2 plug-ins
|
||||
- Added a default renderer for macOS and iOS
|
||||
|
|
@ -40,14 +159,16 @@ Version 7.0.0
|
|||
- Revamped AudioPlayHead functionality
|
||||
- Improved accessibility support
|
||||
|
||||
Version 6.1.6
|
||||
## Version 6.1.6
|
||||
|
||||
- Improved the handling of AU multichannel layouts
|
||||
- Added JUCE_NODISCARD to builder-patten functions
|
||||
- Added recursion options to DirectoryIterator
|
||||
- Unified the loading of OpenGL 3.2 core profiles
|
||||
- Improved macOS full-screen behaviour with non-native titlebars
|
||||
|
||||
Version 6.1.5
|
||||
## Version 6.1.5
|
||||
|
||||
- Improved the accessibility framework
|
||||
- Added handling of non-Latin virtual key codes on macOS
|
||||
- Improved X11 compatibility
|
||||
|
|
@ -56,12 +177,14 @@ Version 6.1.5
|
|||
- Improved MinGW-w64 compatibility
|
||||
- Added an MPEKeyboardComponent class
|
||||
|
||||
Version 6.1.4
|
||||
## Version 6.1.4
|
||||
|
||||
- Restored Projucer project saving behavior
|
||||
- Fixed a CGImage memory access violation on Monterey
|
||||
- Improved macOS thread priority management
|
||||
|
||||
Version 6.1.3
|
||||
## Version 6.1.3
|
||||
|
||||
- Added support for Visual Studio 2022 to the Projucer
|
||||
- Added support for creating OpenGL 3.2 contexts on Windows
|
||||
- Added support for plugin hosts to easily retrieve stable parameter IDs
|
||||
|
|
@ -72,12 +195,14 @@ Version 6.1.3
|
|||
- Improved macOS 12 compatibility, including OpenGL and FileChooser fixes
|
||||
- Improved accessibility support
|
||||
|
||||
Version 6.1.2
|
||||
## Version 6.1.2
|
||||
|
||||
- Fixed an OpenGL display refresh rate issue on macOS
|
||||
- Improved the scaling behaviour of hosted VST3 plug-ins
|
||||
- Improved accessibility support
|
||||
|
||||
Version 6.1.1
|
||||
## Version 6.1.1
|
||||
|
||||
- Fixed a CMake installation issue
|
||||
- Improved parameter value loading after plug-in restarts
|
||||
- Fixed some problems with multi-line text layouts
|
||||
|
|
@ -85,7 +210,8 @@ Version 6.1.1
|
|||
- Fixed an issue setting OpenGL repaint events
|
||||
- Improved accessibility support
|
||||
|
||||
Version 6.1.0
|
||||
## Version 6.1.0
|
||||
|
||||
- Added accessibility support
|
||||
- Enabled use of VST3 plug-in extensions
|
||||
- Improved OpenGL function loading
|
||||
|
|
@ -102,7 +228,8 @@ Version 6.1.0
|
|||
- Improved modal dismissing
|
||||
- Improved assertion handling on macOS ARM
|
||||
|
||||
Version 6.0.8
|
||||
## Version 6.0.8
|
||||
|
||||
- Fixed a macOS graphics invalidation region issue
|
||||
- Improved the handling of modal dialog dismissal
|
||||
- Fixed audio glitching in CoreAudio before microphone permission is granted
|
||||
|
|
@ -116,11 +243,13 @@ Version 6.0.8
|
|||
- Fixed some DSP convolution issues
|
||||
- Added host detection on macOS ARM
|
||||
|
||||
Version 6.0.7
|
||||
## Version 6.0.7
|
||||
|
||||
- Fixed a macOS drawing issue
|
||||
- Updated the DemoRunner bundle ID
|
||||
|
||||
Version 6.0.6
|
||||
## Version 6.0.6
|
||||
|
||||
- Moved to the new CoreMIDI API on supported platforms
|
||||
- Added support for the "New Build System" in Xcode
|
||||
- Made the audio format readers more robust
|
||||
|
|
@ -128,7 +257,8 @@ Version 6.0.6
|
|||
- Fixed a VST3 program parameter issue
|
||||
- Updated to Oboe 1.5 on Android
|
||||
|
||||
Version 6.0.5
|
||||
## Version 6.0.5
|
||||
|
||||
- Added more support for styling PopupMenus
|
||||
- Fixed some race conditions in the IPC and name named pipe classes
|
||||
- Implemented multiple FileChooser improvements
|
||||
|
|
@ -136,16 +266,19 @@ Version 6.0.5
|
|||
- Prevented CoreAudio glitches before accepting audio access permissions
|
||||
- Made reading MIDI and audio files more robust
|
||||
|
||||
Version 6.0.4
|
||||
## Version 6.0.4
|
||||
|
||||
- Improved the Projucer update mechanism
|
||||
- Fixed an AUv3 parameter normalisation issue
|
||||
- Fixed WASAPI exclusive mode sample rate selection bug
|
||||
- Fixed a Linux build issue when omitting ALSA
|
||||
|
||||
Version 6.0.3
|
||||
## Version 6.0.3
|
||||
|
||||
- Fixed version numbers in project files
|
||||
|
||||
Version 6.0.2
|
||||
## Version 6.0.2
|
||||
|
||||
- Added support for macOS 11 and arm64
|
||||
- Added Windows IAudioClient3 support for low latency audio drivers
|
||||
- Added Windows and macOS precompiled header support in the Projucer
|
||||
|
|
@ -155,7 +288,8 @@ Version 6.0.2
|
|||
- Improved resave diffs in Projucer project files
|
||||
- Fixed some Linux JACK issues
|
||||
|
||||
Version 6.0.1
|
||||
## Version 6.0.1
|
||||
|
||||
- Fixed a bug in the Projucer GUI editor causing existing code to be overwritten
|
||||
- Updated Android Oboe to 1.4.2
|
||||
- Bumped default Android Studio gradle and plugin versions to the latest
|
||||
|
|
@ -169,7 +303,8 @@ Version 6.0.1
|
|||
- Fixed Projucer CLion exporter generated CMakeLists.txt
|
||||
- Fixed drag and drop for non-DPI aware plug-ins on Windows
|
||||
|
||||
Version 6.0.0
|
||||
## Version 6.0.0
|
||||
|
||||
- Added support for building JUCE projects with CMake
|
||||
- Revamped the DSP module
|
||||
- Added VST3 support on Linux
|
||||
|
|
@ -195,7 +330,8 @@ Version 6.0.0
|
|||
- Windows and Linux hiDPI scaling improvements
|
||||
- Various bug-fixes, improvements and documentation updates
|
||||
|
||||
Version 5.4.7
|
||||
## Version 5.4.7
|
||||
|
||||
- Fixed a macOS focus bug causing Components to not receive mouse events
|
||||
- Fixed a potential NullPointerException in the Android IAP code
|
||||
- Fixed an entitlements file generation bug in the Projucer
|
||||
|
|
@ -203,7 +339,8 @@ Version 5.4.7
|
|||
- Fixed some build errors and warnings when using Clang on Windows
|
||||
- Changed the default architecture specified in Linux Makefiles generated by the Projucer
|
||||
|
||||
Version 5.4.6
|
||||
## Version 5.4.6
|
||||
|
||||
- Fixed compatibility with macOS versions below 10.11
|
||||
- Multiple thread safety improvements
|
||||
- Added dynamic parameter and parameter group names
|
||||
|
|
@ -212,7 +349,8 @@ Version 5.4.6
|
|||
- Replaced WaitableEvent internals with std::condition_variable
|
||||
- Fixed some macOS text alignment issues
|
||||
|
||||
Version 5.4.5
|
||||
## Version 5.4.5
|
||||
|
||||
- Improved message queue performance on Linux
|
||||
- Added missing lifecycle callbacks on Android Q
|
||||
- Refactored the AudioBlock class
|
||||
|
|
@ -224,7 +362,8 @@ Version 5.4.5
|
|||
- Replaced select() calls with poll()
|
||||
- Various bug-fixes, improvements and documentation updates
|
||||
|
||||
Version 5.4.4
|
||||
## Version 5.4.4
|
||||
|
||||
- Improvements to floating point number printing
|
||||
- Faster plug-in parameter indexing
|
||||
- Added support for persisting attachements to MIDI devices
|
||||
|
|
@ -234,7 +373,8 @@ Version 5.4.4
|
|||
- Added support for Visual Studio 2019
|
||||
- Removed support for Visual Studio 2013
|
||||
|
||||
Version 5.4.3
|
||||
## Version 5.4.3
|
||||
|
||||
- Added a Visual Studio 2019 exporter to the Projucer
|
||||
- Added options to configure macOS Hardened Runtime in the Projucer
|
||||
- Fixed a potential memory corruption when drawing on macOS/iOS
|
||||
|
|
@ -242,7 +382,8 @@ Version 5.4.3
|
|||
- Multiple DSP module enhancements
|
||||
- Various bug-fixes, improvements and documentation updates
|
||||
|
||||
Version 5.4.2
|
||||
## Version 5.4.2
|
||||
|
||||
- Restructured the low-level Android native code
|
||||
- Added an ADSR envelope class
|
||||
- AudioProcessorValueTreeState performance improvements
|
||||
|
|
@ -250,7 +391,8 @@ Version 5.4.2
|
|||
- Improved VST3 hosting
|
||||
- Windows hiDPI scaling enhancements
|
||||
|
||||
Version 5.4.1
|
||||
## Version 5.4.1
|
||||
|
||||
- Fixed a VST2 compilation error in VS2013
|
||||
- Fixed some live-build compilation errors in the Projucer
|
||||
- Fixed a bug in the Oversampling class
|
||||
|
|
@ -258,7 +400,8 @@ Version 5.4.1
|
|||
- Fixed some bugs in the Unity plug-in wrapper
|
||||
- Fixed some VS2015 compiler errors
|
||||
|
||||
Version 5.4.0
|
||||
## Version 5.4.0
|
||||
|
||||
- macOS Mojave and iOS 12 support
|
||||
- Windows hiDPI support
|
||||
- Unity native plug-in support
|
||||
|
|
@ -270,7 +413,8 @@ Version 5.4.0
|
|||
- Support for Android Studio 3.2
|
||||
- Various bug-fixes, improvements and documentation updates
|
||||
|
||||
Version 5.3.2
|
||||
## Version 5.3.2
|
||||
|
||||
- Removed the OSX 10.5 and 10.6 deployment target options from the Projucer and enabled more C++11 features across all platforms
|
||||
- Replaced all usage of ScopedPointer with std::unique_ptr
|
||||
- Added camera support for iOS and Android
|
||||
|
|
@ -285,7 +429,8 @@ Version 5.3.2
|
|||
- Fixed a bug causing an unintentional menu item highlight disco party when using a popup menu in a plug-in's UI
|
||||
- Marked as deprecated: String::empty, var::null, File::nonexistent, ValueTree::invalid and other problematic statically-initialised null values
|
||||
|
||||
Version 5.3.1
|
||||
## Version 5.3.1
|
||||
|
||||
- Add Android and iOS support to AudioPluginHost
|
||||
- Added support for Bela in the form of an AudioIODeviceType
|
||||
- Add bypass support to both hosting and plug-in client code
|
||||
|
|
@ -304,7 +449,8 @@ Version 5.3.1
|
|||
- Added a command-line option to use LF as linefeeds rather than CRLF in the Projucer cleanup tools
|
||||
- Multiple documentation updates
|
||||
|
||||
Version 5.3.0
|
||||
## Version 5.3.0
|
||||
|
||||
- Added support for Android OBOE (developer preview)
|
||||
- Updated JUCE's MPE classes to comply with the new MMA-adopted specification
|
||||
- Multiple documentation updates
|
||||
|
|
@ -317,7 +463,8 @@ Version 5.3.0
|
|||
- Added thread safe methods for getting and setting the AudioProcessorValueTreeState state
|
||||
- Added customisable MacOS icons
|
||||
|
||||
Version 5.2.1
|
||||
## Version 5.2.1
|
||||
|
||||
- Added native content sharing support for iOS and Android
|
||||
- Added iOS and Android native file chooser support
|
||||
- Implemented WebBrowserComponent on Android
|
||||
|
|
@ -343,7 +490,8 @@ Version 5.2.1
|
|||
- Multiple Projucer UI and UX improvements
|
||||
- Various documentation tweaks and fixes
|
||||
|
||||
Version 5.2.0
|
||||
## Version 5.2.0
|
||||
|
||||
- Added a CMake exporter to the Projucer
|
||||
- JUCE analytics module
|
||||
- Added support for push notifications on iOS and Android
|
||||
|
|
@ -362,7 +510,8 @@ Version 5.2.0
|
|||
- Improved the performance of 3D rendering when multiple OpenGL contexts are used at the same time
|
||||
- Tweaked the rate at which EdgeTable grows its internal storage, to improve performance rendering large and complex paths
|
||||
|
||||
Version 5.1.2
|
||||
## Version 5.1.2
|
||||
|
||||
- Fixed multiple plugin-resizing bugs
|
||||
- Added support for AUv3 MIDI and screen size negotiation
|
||||
- Added support for Xcode 9 and iOS 11
|
||||
|
|
@ -376,7 +525,8 @@ Version 5.1.2
|
|||
- Plug-in parameters can be explicitly marked as continuous or discrete
|
||||
- Multiple documentation updates
|
||||
|
||||
Version 5.1.1
|
||||
## Version 5.1.1
|
||||
|
||||
- Fixed Windows live build engine on Visual Studio 2017
|
||||
- Fixed a compiler error in juce_MathFunctions.h in Visual Studio 2013
|
||||
- Fixed a potential crash when using the ProcessorDuplicator
|
||||
|
|
@ -390,7 +540,8 @@ Version 5.1.1
|
|||
- Fixed an issue where a JUCE VST2 would not correctly report that it supports resizing of it’s plugin editor
|
||||
- Various documentation tweaks and fixes
|
||||
|
||||
Version 5.1.0
|
||||
## Version 5.1.0
|
||||
|
||||
- Release of the JUCE DSP module
|
||||
- Multichannel audio readers and writers
|
||||
- Plugin editor Hi-DPI scaling support
|
||||
|
|
@ -402,7 +553,8 @@ Version 5.1.0
|
|||
- Various documentation fixes
|
||||
- Various minor improvements and bug fixes
|
||||
|
||||
Version 5.0.2
|
||||
## Version 5.0.2
|
||||
|
||||
- Improved project save speed in the Projucer
|
||||
- Added option to save individual exporters in the Projucer
|
||||
- Added the ability to create custom colour schemes for the Projucer’s code editor
|
||||
|
|
@ -425,7 +577,8 @@ Version 5.0.2
|
|||
- Various documentation fixes
|
||||
- Various minor improvements and bug fixes
|
||||
|
||||
Version 5.0.1
|
||||
## Version 5.0.1
|
||||
|
||||
- Fixed Windows live build engine on Visual Studio 2017
|
||||
- Fixed memory-leak in Projucer live build engine
|
||||
- Fixed an issue where you could not paste your redeem serial number with Cmd+V on macOS
|
||||
|
|
@ -433,7 +586,8 @@ Version 5.0.1
|
|||
- Minor Projucer UI improvements
|
||||
- Various minor improvements and bug fixes
|
||||
|
||||
Version 5.0.0
|
||||
## Version 5.0.0
|
||||
|
||||
- New licensing model
|
||||
- Projucer UI/UX overhaul
|
||||
- New look and feel (version 4)
|
||||
|
|
@ -452,7 +606,8 @@ Version 5.0.0
|
|||
- Various minor improvements and bug fixes
|
||||
- Various documentation improvements
|
||||
|
||||
Version 4.3.1
|
||||
## Version 4.3.1
|
||||
|
||||
- Added support for iOS download tasks
|
||||
- Added support for AAX plug-in meters
|
||||
- Added support for dynamically disabling/enabling sidechains in ProTools
|
||||
|
|
@ -467,7 +622,8 @@ Version 4.3.1
|
|||
- Various minor improvements and bug fixes
|
||||
- Various documentation improvements
|
||||
|
||||
Version 4.3.0
|
||||
## Version 4.3.0
|
||||
|
||||
- Added API and examples for ROLI Blocks
|
||||
- Multiple Projucer live-build UI and diagnostics improvements
|
||||
- JUCE now supports hosting multi-bus plug-ins
|
||||
|
|
@ -480,7 +636,8 @@ Version 4.3.0
|
|||
- Various minor improvements and bug fixes
|
||||
- Various documentation improvements
|
||||
|
||||
Version 4.2.4
|
||||
## Version 4.2.4
|
||||
|
||||
- Pre-release of live build engine on Windows
|
||||
- Added FlexBox layout engine
|
||||
- Removed dependency on external Steinberg SDK when building and/or hosting VST2 plug-ins
|
||||
|
|
@ -504,18 +661,21 @@ Version 4.2.4
|
|||
- Various minor improvements and bug fixes
|
||||
- Various documentation improvements
|
||||
|
||||
Version 4.2.3
|
||||
## Version 4.2.3
|
||||
|
||||
- Various VST3 improvements: resizing VST3 windows, plug-in compatibility issues
|
||||
- Use NSURLSession on newer OS X versions
|
||||
- Add compatibility for VST 3 SDK update 3.6.6
|
||||
- Miscellaneous fixes and improvements
|
||||
|
||||
Version 4.2.1
|
||||
## Version 4.2.1
|
||||
|
||||
- New class CachedValue, for providing easy and efficient access to ValueTree properties
|
||||
- Reduced audio plug-in binary sizes on OS X and added symbol-stripping option
|
||||
- Miscellaneous fixes and improvements
|
||||
|
||||
Version 4.2
|
||||
## Version 4.2
|
||||
|
||||
- Added support for AudioUnit v3 on OS X and iOS
|
||||
- Simplified the JUCE module format. Removed the json module definition files, and made
|
||||
it easier to manually add modules to projects. The format is fully described in the
|
||||
|
|
@ -528,21 +688,25 @@ Version 4.2
|
|||
open-source project. This will allow everyone to compile the Projucer's IDE themselves, and
|
||||
having just one app instead of two will make things a lot less confusing!
|
||||
|
||||
Version 4.1
|
||||
## Version 4.1
|
||||
|
||||
- Added multi-bus support for audio plug-in clients
|
||||
- Added support for MIDI effect plug-ins (AU and AAX).
|
||||
- Added new example: Network Graphics Demo
|
||||
|
||||
Version 4.0.3
|
||||
## Version 4.0.3
|
||||
|
||||
- Added MPE (Multidimensional Polyphonic Expression) classes
|
||||
- Added full support for generating and parsing Midi RPN/NRPN messages
|
||||
- Made the LinearSmoothedValue class public
|
||||
- Miscellaneous fixes and minor improvements
|
||||
|
||||
Version 4.0.2
|
||||
## Version 4.0.2
|
||||
|
||||
- Miscellaneous fixes and house-keeping
|
||||
|
||||
Version 4.0.1
|
||||
## Version 4.0.1
|
||||
|
||||
- Initial release of the Projucer!
|
||||
- Full OSC support!
|
||||
- Android Studio exporting from the Introjucer
|
||||
|
|
@ -556,12 +720,14 @@ Version 4.0.1
|
|||
- Many updates to Introjucer
|
||||
- Many new tutorials and examples
|
||||
|
||||
Version 3.3.0
|
||||
## Version 3.3.0
|
||||
|
||||
- New functions for Base64 conversion
|
||||
- New command-line options in the introjucer for trimming whitespace and
|
||||
replacing tabs in source files
|
||||
|
||||
Version 3.2.0
|
||||
## Version 3.2.0
|
||||
|
||||
- Major OpenGL performance/stability improvements
|
||||
- Performance improvements to FloatVectorOperations math functions
|
||||
- New FloatVectorOperations: abs, min, max, addWithMultiply, clip
|
||||
364
CMakeLists.txt
364
CMakeLists.txt
|
|
@ -1,170 +1,194 @@
|
|||
# ==============================================================================
|
||||
#
|
||||
# This file is part of the JUCE library.
|
||||
# Copyright (c) 2022 - Raw Material Software Limited
|
||||
#
|
||||
# JUCE is an open source library subject to commercial or open-source
|
||||
# licensing.
|
||||
#
|
||||
# By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
# Agreement and JUCE Privacy Policy.
|
||||
#
|
||||
# End User License Agreement: www.juce.com/juce-7-licence
|
||||
# Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
#
|
||||
# Or: You may also use this code under the terms of the GPL v3 (see
|
||||
# www.gnu.org/licenses).
|
||||
#
|
||||
# JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
# EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
# DISCLAIMED.
|
||||
#
|
||||
# ==============================================================================
|
||||
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
|
||||
project(JUCE VERSION 7.0.4 LANGUAGES C CXX)
|
||||
|
||||
include(CMakeDependentOption)
|
||||
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS YES)
|
||||
|
||||
set(JUCE_MODULES_DIR "${JUCE_SOURCE_DIR}/modules" CACHE INTERNAL
|
||||
"The path to JUCE modules")
|
||||
|
||||
# This option will disable most of the JUCE helper functions and tools. This option exists to
|
||||
# facilitate existing CMake builds which handle things like bundle creation, icons, plists, and
|
||||
# binary data independently of JUCE. This option is not recommended - use at your own risk!
|
||||
|
||||
option(JUCE_MODULES_ONLY "Only configure the JUCE modules" OFF)
|
||||
|
||||
include(extras/Build/CMake/JUCEModuleSupport.cmake)
|
||||
|
||||
# This option controls whether dummy targets are added to the build, where these targets contain all
|
||||
# of the source files for each JUCE module. If you're planning to use an IDE and want to be able to
|
||||
# browse all of JUCE's source files, this may be useful. However, it will increase the size of
|
||||
# generated IDE projects and might slow down configuration a bit. If you enable this, you should
|
||||
# probably also add `set_property(GLOBAL PROPERTY USE_FOLDERS YES)` to your top level CMakeLists,
|
||||
# otherwise the module sources will be added directly to the top level of the project, instead of in
|
||||
# a nice 'Modules' subfolder.
|
||||
|
||||
cmake_dependent_option(JUCE_ENABLE_MODULE_SOURCE_GROUPS
|
||||
"Show all module sources in IDE projects" OFF
|
||||
"NOT JUCE_MODULES_ONLY" OFF)
|
||||
|
||||
add_subdirectory(modules)
|
||||
|
||||
if(JUCE_MODULES_ONLY)
|
||||
return()
|
||||
endif()
|
||||
|
||||
include(extras/Build/CMake/JUCEUtils.cmake)
|
||||
|
||||
set_directory_properties(PROPERTIES
|
||||
JUCE_COMPANY_NAME "JUCE"
|
||||
JUCE_COMPANY_WEBSITE "https://juce.com"
|
||||
JUCE_COMPANY_EMAIL "info@juce.com"
|
||||
JUCE_COMPANY_COPYRIGHT "Copyright (c) 2020 - Raw Material Software Limited")
|
||||
|
||||
option(JUCE_COPY_PLUGIN_AFTER_BUILD
|
||||
"Whether or not plugins should be installed to the system after building" OFF)
|
||||
set_property(GLOBAL PROPERTY JUCE_COPY_PLUGIN_AFTER_BUILD ${JUCE_COPY_PLUGIN_AFTER_BUILD})
|
||||
|
||||
set(CMAKE_CXX_EXTENSIONS FALSE)
|
||||
|
||||
juce_disable_default_flags()
|
||||
|
||||
add_subdirectory(extras/Build)
|
||||
|
||||
# If you want to build the JUCE examples with VST2/AAX/ARA support, you'll need to make the
|
||||
# VST2/AAX/ARA headers visible to the juce_audio_processors module. You can either set the paths on
|
||||
# the command line, (e.g. -DJUCE_GLOBAL_AAX_SDK_PATH=/path/to/sdk) if you're just building the JUCE
|
||||
# examples, or you can call the `juce_set_*_sdk_path` functions in your own CMakeLists after
|
||||
# importing JUCE.
|
||||
|
||||
if(JUCE_GLOBAL_AAX_SDK_PATH)
|
||||
juce_set_aax_sdk_path("${JUCE_GLOBAL_AAX_SDK_PATH}")
|
||||
endif()
|
||||
|
||||
if(JUCE_GLOBAL_VST2_SDK_PATH)
|
||||
juce_set_vst2_sdk_path("${JUCE_GLOBAL_VST2_SDK_PATH}")
|
||||
endif()
|
||||
|
||||
# The ARA_SDK path should point to the "Umbrella installer" ARA_SDK directory.
|
||||
# The directory can be obtained by recursively cloning https://github.com/Celemony/ARA_SDK and
|
||||
# checking out the tag releases/2.1.0.
|
||||
if(JUCE_GLOBAL_ARA_SDK_PATH)
|
||||
juce_set_ara_sdk_path("${JUCE_GLOBAL_ARA_SDK_PATH}")
|
||||
endif()
|
||||
|
||||
# We don't build anything other than the juceaide by default, because we want to keep configuration
|
||||
# speedy and the number of targets low. If you want to add targets for the extra projects and
|
||||
# example PIPs (there's a lot of them!), specify -DJUCE_BUILD_EXAMPLES=ON and/or
|
||||
# -DJUCE_BUILD_EXTRAS=ON when initially generating your build tree.
|
||||
|
||||
option(JUCE_BUILD_EXTRAS "Add build targets for the Projucer and other tools" OFF)
|
||||
|
||||
if(JUCE_BUILD_EXTRAS)
|
||||
add_subdirectory(extras)
|
||||
endif()
|
||||
|
||||
option(JUCE_BUILD_EXAMPLES "Add build targets for the DemoRunner and PIPs" OFF)
|
||||
|
||||
if(JUCE_BUILD_EXAMPLES)
|
||||
add_subdirectory(examples)
|
||||
endif()
|
||||
|
||||
# ==================================================================================================
|
||||
# Install configuration
|
||||
|
||||
include(CMakePackageConfigHelpers)
|
||||
write_basic_package_version_file("${JUCE_BINARY_DIR}/JUCEConfigVersion.cmake"
|
||||
VERSION ${JUCE_VERSION}
|
||||
COMPATIBILITY ExactVersion
|
||||
${extra_version_arg})
|
||||
|
||||
set(JUCE_INSTALL_DESTINATION "lib/cmake/JUCE-${JUCE_VERSION}" CACHE STRING
|
||||
"The location, relative to the install prefix, where the JUCE config file will be installed")
|
||||
|
||||
set(JUCE_MODULE_PATH "include/JUCE-${JUCE_VERSION}/modules")
|
||||
set(UTILS_INSTALL_DIR "${JUCE_INSTALL_DESTINATION}")
|
||||
set(JUCEAIDE_PATH "${JUCE_TOOL_INSTALL_DIR}/${JUCE_JUCEAIDE_NAME}")
|
||||
configure_package_config_file("${JUCE_CMAKE_UTILS_DIR}/JUCEConfig.cmake.in"
|
||||
"${JUCE_BINARY_DIR}/JUCEConfig.cmake"
|
||||
PATH_VARS UTILS_INSTALL_DIR JUCEAIDE_PATH JUCE_MODULE_PATH
|
||||
INSTALL_DESTINATION "${JUCE_INSTALL_DESTINATION}")
|
||||
|
||||
set(JUCE_MODULE_PATH "${JUCE_MODULES_DIR}")
|
||||
set(UTILS_INSTALL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/extras/Build/CMake")
|
||||
get_target_property(JUCEAIDE_PATH juceaide IMPORTED_LOCATION)
|
||||
configure_package_config_file("${JUCE_CMAKE_UTILS_DIR}/JUCEConfig.cmake.in"
|
||||
"${JUCE_BINARY_DIR}/JUCEExportConfig.cmake"
|
||||
PATH_VARS UTILS_INSTALL_DIR JUCEAIDE_PATH JUCE_MODULE_PATH
|
||||
INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}"
|
||||
INSTALL_DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
|
||||
install(FILES "${JUCE_BINARY_DIR}/JUCEConfigVersion.cmake"
|
||||
"${JUCE_BINARY_DIR}/JUCEConfig.cmake"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/JUCECheckAtomic.cmake"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/JUCEHelperTargets.cmake"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/JUCEModuleSupport.cmake"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/JUCEUtils.cmake"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/JuceLV2Defines.h.in"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/LaunchScreen.storyboard"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/PIPAudioProcessor.cpp.in"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/PIPAudioProcessorWithARA.cpp.in"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/PIPComponent.cpp.in"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/PIPConsole.cpp.in"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/RecentFilesMenuTemplate.nib"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/UnityPluginGUIScript.cs.in"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/checkBundleSigning.cmake"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/copyDir.cmake"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/juce_runtime_arch_detection.cpp"
|
||||
DESTINATION "${JUCE_INSTALL_DESTINATION}")
|
||||
|
||||
if("${CMAKE_SOURCE_DIR}" STREQUAL "${JUCE_SOURCE_DIR}")
|
||||
_juce_add_lv2_manifest_helper_target()
|
||||
install(TARGETS juce_lv2_helper EXPORT LV2_HELPER DESTINATION "bin/JUCE-${JUCE_VERSION}")
|
||||
install(EXPORT LV2_HELPER NAMESPACE juce:: DESTINATION "${JUCE_INSTALL_DESTINATION}")
|
||||
endif()
|
||||
|
||||
# ==============================================================================
|
||||
#
|
||||
# This file is part of the JUCE framework.
|
||||
# Copyright (c) Raw Material Software Limited
|
||||
#
|
||||
# JUCE is an open source framework subject to commercial or open source
|
||||
# licensing.
|
||||
#
|
||||
# By downloading, installing, or using the JUCE framework, or combining the
|
||||
# JUCE framework with any other source code, object code, content or any other
|
||||
# copyrightable work, you agree to the terms of the JUCE End User Licence
|
||||
# Agreement, and all incorporated terms including the JUCE Privacy Policy and
|
||||
# the JUCE Website Terms of Service, as applicable, which will bind you. If you
|
||||
# do not agree to the terms of these agreements, we will not license the JUCE
|
||||
# framework to you, and you must discontinue the installation or download
|
||||
# process and cease use of the JUCE framework.
|
||||
#
|
||||
# JUCE End User Licence Agreement: https://juce.com/legal/juce-8-licence/
|
||||
# JUCE Privacy Policy: https://juce.com/juce-privacy-policy
|
||||
# JUCE Website Terms of Service: https://juce.com/juce-website-terms-of-service/
|
||||
#
|
||||
# Or:
|
||||
#
|
||||
# You may also use this code under the terms of the AGPLv3:
|
||||
# https://www.gnu.org/licenses/agpl-3.0.en.html
|
||||
#
|
||||
# THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL
|
||||
# WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF
|
||||
# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
|
||||
#
|
||||
# ==============================================================================
|
||||
|
||||
cmake_minimum_required(VERSION 3.22)
|
||||
|
||||
project(JUCE VERSION 8.0.4 LANGUAGES C CXX)
|
||||
|
||||
include(CMakeDependentOption)
|
||||
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS YES)
|
||||
|
||||
set(JUCE_MODULES_DIR "${JUCE_SOURCE_DIR}/modules" CACHE INTERNAL
|
||||
"The path to JUCE modules")
|
||||
|
||||
# This option will disable most of the JUCE helper functions and tools. This option exists to
|
||||
# facilitate existing CMake builds which handle things like bundle creation, icons, plists, and
|
||||
# binary data independently of JUCE. This option is not recommended - use at your own risk!
|
||||
|
||||
option(JUCE_MODULES_ONLY "Only configure the JUCE modules" OFF)
|
||||
|
||||
include(extras/Build/CMake/JUCEModuleSupport.cmake)
|
||||
|
||||
# This option controls whether dummy targets are added to the build, where these targets contain all
|
||||
# of the source files for each JUCE module. If you're planning to use an IDE and want to be able to
|
||||
# browse all of JUCE's source files, this may be useful. However, it will increase the size of
|
||||
# generated IDE projects and might slow down configuration a bit. If you enable this, you should
|
||||
# probably also add `set_property(GLOBAL PROPERTY USE_FOLDERS YES)` to your top level CMakeLists,
|
||||
# otherwise the module sources will be added directly to the top level of the project, instead of in
|
||||
# a nice 'Modules' subfolder.
|
||||
|
||||
cmake_dependent_option(JUCE_ENABLE_MODULE_SOURCE_GROUPS
|
||||
"Show all module sources in IDE projects" OFF
|
||||
"NOT JUCE_MODULES_ONLY" OFF)
|
||||
|
||||
add_subdirectory(modules)
|
||||
|
||||
if(JUCE_MODULES_ONLY)
|
||||
return()
|
||||
endif()
|
||||
|
||||
include(extras/Build/CMake/JUCEUtils.cmake)
|
||||
|
||||
set_directory_properties(PROPERTIES
|
||||
JUCE_COMPANY_NAME "JUCE"
|
||||
JUCE_COMPANY_WEBSITE "https://juce.com"
|
||||
JUCE_COMPANY_EMAIL "info@juce.com"
|
||||
JUCE_COMPANY_COPYRIGHT "Copyright (c) - Raw Material Software Limited")
|
||||
|
||||
option(JUCE_COPY_PLUGIN_AFTER_BUILD
|
||||
"Whether or not plugins should be installed to the system after building" OFF)
|
||||
set_property(GLOBAL PROPERTY JUCE_COPY_PLUGIN_AFTER_BUILD ${JUCE_COPY_PLUGIN_AFTER_BUILD})
|
||||
|
||||
set(CMAKE_CXX_EXTENSIONS FALSE)
|
||||
|
||||
juce_disable_default_flags()
|
||||
|
||||
add_subdirectory(extras/Build)
|
||||
|
||||
# If you want to build the JUCE examples with VST2/AAX/ARA support, you'll need to make the
|
||||
# VST2/AAX/ARA headers visible to the juce_audio_processors module. You can either set the paths on
|
||||
# the command line, (e.g. -DJUCE_GLOBAL_AAX_SDK_PATH=/path/to/sdk) if you're just building the JUCE
|
||||
# examples, or you can call the `juce_set_*_sdk_path` functions in your own CMakeLists after
|
||||
# importing JUCE.
|
||||
|
||||
if(JUCE_GLOBAL_AAX_SDK_PATH)
|
||||
juce_set_aax_sdk_path("${JUCE_GLOBAL_AAX_SDK_PATH}")
|
||||
endif()
|
||||
|
||||
if(JUCE_GLOBAL_VST2_SDK_PATH)
|
||||
juce_set_vst2_sdk_path("${JUCE_GLOBAL_VST2_SDK_PATH}")
|
||||
endif()
|
||||
|
||||
# The ARA_SDK path should point to the "Umbrella installer" ARA_SDK directory.
|
||||
# The directory can be obtained by recursively cloning https://github.com/Celemony/ARA_SDK and
|
||||
# checking out the tag releases/2.1.0.
|
||||
if(JUCE_GLOBAL_ARA_SDK_PATH)
|
||||
juce_set_ara_sdk_path("${JUCE_GLOBAL_ARA_SDK_PATH}")
|
||||
endif()
|
||||
|
||||
# We don't build anything other than the juceaide by default, because we want to keep configuration
|
||||
# speedy and the number of targets low. If you want to add targets for the extra projects and
|
||||
# example PIPs (there's a lot of them!), specify -DJUCE_BUILD_EXAMPLES=ON and/or
|
||||
# -DJUCE_BUILD_EXTRAS=ON when initially generating your build tree.
|
||||
|
||||
option(JUCE_BUILD_EXTRAS "Add build targets for the Projucer and other tools" OFF)
|
||||
|
||||
if(JUCE_BUILD_EXTRAS)
|
||||
add_subdirectory(extras)
|
||||
endif()
|
||||
|
||||
option(JUCE_BUILD_EXAMPLES "Add build targets for the DemoRunner and PIPs" OFF)
|
||||
|
||||
if(JUCE_BUILD_EXAMPLES)
|
||||
add_subdirectory(examples)
|
||||
endif()
|
||||
|
||||
string(CONCAT webview2_option_message "Location that overrides the default directory where our "
|
||||
"FindWebView2 script is looking for the "
|
||||
"*Microsoft.Web.WebView2* directory")
|
||||
|
||||
option(JUCE_WEBVIEW2_PACKAGE_LOCATION ${webview2_option_message} "")
|
||||
|
||||
# ==================================================================================================
|
||||
# Install configuration
|
||||
|
||||
include(CMakePackageConfigHelpers)
|
||||
write_basic_package_version_file("${JUCE_BINARY_DIR}/JUCEConfigVersion.cmake"
|
||||
VERSION ${JUCE_VERSION}
|
||||
COMPATIBILITY ExactVersion)
|
||||
|
||||
set(JUCE_INSTALL_DESTINATION "lib/cmake/JUCE-${JUCE_VERSION}" CACHE STRING
|
||||
"The location, relative to the install prefix, where the JUCE config file will be installed")
|
||||
|
||||
set(JUCE_MODULE_PATH "include/JUCE-${JUCE_VERSION}/modules")
|
||||
set(UTILS_INSTALL_DIR "${JUCE_INSTALL_DESTINATION}")
|
||||
set(JUCEAIDE_PATH "${JUCE_TOOL_INSTALL_DIR}/${JUCE_JUCEAIDE_NAME}")
|
||||
configure_package_config_file("${JUCE_CMAKE_UTILS_DIR}/JUCEConfig.cmake.in"
|
||||
"${JUCE_BINARY_DIR}/JUCEConfig.cmake"
|
||||
PATH_VARS UTILS_INSTALL_DIR JUCEAIDE_PATH JUCE_MODULE_PATH
|
||||
INSTALL_DESTINATION "${JUCE_INSTALL_DESTINATION}")
|
||||
|
||||
set(JUCE_MODULE_PATH "${JUCE_MODULES_DIR}")
|
||||
set(UTILS_INSTALL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/extras/Build/CMake")
|
||||
get_target_property(JUCEAIDE_PATH juceaide IMPORTED_LOCATION)
|
||||
configure_package_config_file("${JUCE_CMAKE_UTILS_DIR}/JUCEConfig.cmake.in"
|
||||
"${JUCE_BINARY_DIR}/JUCEExportConfig.cmake"
|
||||
PATH_VARS UTILS_INSTALL_DIR JUCEAIDE_PATH JUCE_MODULE_PATH
|
||||
INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}"
|
||||
INSTALL_DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
|
||||
install(FILES "${JUCE_BINARY_DIR}/JUCEConfigVersion.cmake"
|
||||
"${JUCE_BINARY_DIR}/JUCEConfig.cmake"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/JUCECheckAtomic.cmake"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/JUCEHelperTargets.cmake"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/JUCEModuleSupport.cmake"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/JUCEUtils.cmake"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/JuceLV2Defines.h.in"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/LaunchScreen.storyboard"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/PIPAudioProcessor.cpp.in"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/PIPAudioProcessorWithARA.cpp.in"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/PIPComponent.cpp.in"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/PIPConsole.cpp.in"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/RecentFilesMenuTemplate.nib"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/UnityPluginGUIScript.cs.in"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/checkBundleSigning.cmake"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/copyDir.cmake"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/juce_runtime_arch_detection.cpp"
|
||||
"${JUCE_CMAKE_UTILS_DIR}/juce_LinuxSubprocessHelper.cpp"
|
||||
DESTINATION "${JUCE_INSTALL_DESTINATION}")
|
||||
|
||||
if(("${CMAKE_SOURCE_DIR}" STREQUAL "${JUCE_SOURCE_DIR}") AND (NOT JUCE_BUILD_HELPER_TOOLS))
|
||||
_juce_add_lv2_manifest_helper_target()
|
||||
|
||||
if(TARGET juce_lv2_helper)
|
||||
install(TARGETS juce_lv2_helper EXPORT LV2_HELPER DESTINATION "bin/JUCE-${JUCE_VERSION}")
|
||||
install(EXPORT LV2_HELPER NAMESPACE juce:: DESTINATION "${JUCE_INSTALL_DESTINATION}")
|
||||
endif()
|
||||
|
||||
_juce_add_vst3_manifest_helper_target()
|
||||
|
||||
if(TARGET juce_vst3_helper)
|
||||
install(TARGETS juce_vst3_helper EXPORT VST3_HELPER DESTINATION "bin/JUCE-${JUCE_VERSION}")
|
||||
install(EXPORT VST3_HELPER NAMESPACE juce:: DESTINATION "${JUCE_INSTALL_DESTINATION}")
|
||||
endif()
|
||||
endif()
|
||||
|
|
|
|||
132
CODE_OF_CONDUCT.md
Normal file
132
CODE_OF_CONDUCT.md
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, caste, color, religion, or sexual
|
||||
identity and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the overall
|
||||
community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or advances of
|
||||
any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email address,
|
||||
without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
[info@juce.com](mailto:info@juce.com).
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series of
|
||||
actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or permanent
|
||||
ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within the
|
||||
community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.1, available at
|
||||
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
||||
|
||||
Community Impact Guidelines were inspired by
|
||||
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
|
||||
[https://www.contributor-covenant.org/translations][translations].
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
||||
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||
[FAQ]: https://www.contributor-covenant.org/faq
|
||||
[translations]: https://www.contributor-covenant.org/translations
|
||||
89
LICENSE.md
89
LICENSE.md
|
|
@ -1,37 +1,66 @@
|
|||
# The JUCE Library
|
||||
# The JUCE Framework
|
||||
|
||||
**BY DOWNLOADING, INSTALLING OR USING ANY PART OF THE JUCE LIBRARY, YOU AGREE
|
||||
TO THE [JUCE 7 END-USER LICENSE AGREEMENT](https://www.juce.com/juce-7-licence)
|
||||
AND THE [JUCE PRIVACY POLICY](https://www.juce.com/juce-privacy-policy), WHICH
|
||||
ARE BINDING AGREEMENTS BETWEEN YOU AND RAW MATERIAL SOFTWARE LIMITED. IF YOU DO
|
||||
NOT AGREE TO THE TERMS, DO NOT USE THE JUCE LIBRARY.**
|
||||
The JUCE Framework is an open source framework licensed under a combination of
|
||||
open source and commercial licences.
|
||||
|
||||
JUCE has tier-leveled license terms, with different terms for each available
|
||||
license: JUCE Personal (for developers or startup businesses with revenue under
|
||||
the 50K USD Revenue Limit; free), JUCE Indie (for small businesses with under
|
||||
500K USD Revenue Limit; $40/month), JUCE Pro (no Revenue Limit; $130/month),
|
||||
and JUCE Educational (no Revenue Limit; free for bona fide educational
|
||||
institutions). All licenses allow you to commercially release applications as
|
||||
long as you do not exceed the Revenue Limit and pay the applicable Fees. Once
|
||||
your business hits the Revenue Limit for your JUCE license tier, to continue
|
||||
distributing your Applications you will either have to upgrade your JUCE
|
||||
license, or instead release your Applications under the
|
||||
[GNU General Public License v.3](https://www.gnu.org/licenses/gpl-3.0.en.html),
|
||||
which means, amongst other things, that you must make the source code of your
|
||||
Applications available.
|
||||
The JUCE Framework modules are dual-licensed under the
|
||||
[AGPLv3](https://www.gnu.org/licenses/agpl-3.0.en.html) and the commercial [JUCE
|
||||
licence](https://juce.com/legal/juce-8-licence/).
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE, ARE DISCLAIMED.
|
||||
## The JUCE Licence
|
||||
|
||||
The juce_audio_basics, juce_audio_devices, juce_core and juce_events modules
|
||||
are permissively licensed under the terms of the [ISC
|
||||
license](http://www.isc.org/downloads/software-support-policy/isc-license).
|
||||
If you are not licensing the JUCE Framework modules under the
|
||||
[AGPLv3](https://www.gnu.org/licenses/agpl-3.0.en.html) then by downloading,
|
||||
installing, or using the JUCE Framework, or combining the JUCE Framework with
|
||||
any other source code, object code, content or any other copyrightable work, you
|
||||
agree to the terms of the the [JUCE 8 End User Licence
|
||||
Agreement](https://juce.com/legal/juce-8-licence/), and all incorporated terms
|
||||
including the [JUCE Privacy Policy](https://juce.com/legal/juce-privacy-policy/)
|
||||
and the [JUCE Website Terms of
|
||||
Service](https://juce.com/legal/juce-website-terms-of-service/), as applicable,
|
||||
which will bind you. If you do not agree to the terms of this Agreement, we will
|
||||
not license the JUCE Framework to you, and you must discontinue the installation
|
||||
or download process and cease use of the JUCE Framework.
|
||||
|
||||
For more information, visit the website:
|
||||
[www.juce.com](https://www.juce.com)
|
||||
THE JUCE FRAMEWORK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING WARRANTY OF MERCHANTABILITY OR FITNESS
|
||||
FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.
|
||||
|
||||
FULL JUCE TERMS:
|
||||
- [JUCE 7 END-USER LICENSE AGREEMENT](https://www.juce.com/juce-7-licence)
|
||||
- [JUCE PRIVACY POLICY](https://www.juce.com/juce-privacy-policy)
|
||||
For more information, visit the [JUCE website](https://juce.com).
|
||||
|
||||
Full licence terms:
|
||||
- [JUCE 8 End User Licence Agreement](https://juce.com/legal/juce-8-licence/)
|
||||
- [JUCE Privacy Policy](https://juce.com/legal/juce-privacy-policy/)
|
||||
- [JUCE Website Terms of Service](https://juce.com/legal/juce-website-terms-of-service/)
|
||||
|
||||
## The JUCE Framework Dependencies
|
||||
|
||||
The JUCE modules contain the following dependencies:
|
||||
- [AudioUnitSDK](modules/juce_audio_plugin_client/AU/AudioUnitSDK/) ([Apache 2.0](modules/juce_audio_plugin_client/AU/AudioUnitSDK/LICENSE.txt))
|
||||
- [Oboe](modules/juce_audio_devices/native/oboe/) ([Apache 2.0](modules/juce_audio_devices/native/oboe/LICENSE))
|
||||
- [FLAC](modules/juce_audio_formats/codecs/flac/) ([BSD](modules/juce_audio_formats/codecs/flac/Flac%20Licence.txt))
|
||||
- [GLEW](modules/juce_opengl/opengl/juce_gl.h) ([BSD](modules/juce_opengl/opengl/juce_gl.h)), including [Mesa](modules/juce_opengl/opengl/juce_gl.h) ([MIT](modules/juce_opengl/opengl/juce_gl.h)) and [Khronos](modules/juce_opengl/opengl/juce_gl.h) ([MIT](modules/juce_opengl/opengl/juce_gl.h))
|
||||
- [Ogg Vorbis](modules/juce_audio_formats/codecs/oggvorbis/) ([BSD](modules/juce_audio_formats/codecs/oggvorbis/Ogg%20Vorbis%20Licence.txt))
|
||||
- [jpeglib](modules/juce_graphics/image_formats/jpglib/) ([Independent JPEG Group License](modules/juce_graphics/image_formats/jpglib/README))
|
||||
- [CHOC](modules/juce_core/javascript/choc/) ([ISC](modules/juce_core/javascript/choc/LICENSE.md)), including [QuickJS](modules/juce_core/javascript/choc/javascript/choc_javascript_QuickJS.h) ([MIT](modules/juce_core/javascript/choc/javascript/choc_javascript_QuickJS.h))
|
||||
- [LV2](modules/juce_audio_processors/format_types/LV2_SDK/) ([ISC](modules/juce_audio_processors/format_types/LV2_SDK/lv2/COPYING))
|
||||
- [pslextensions](modules/juce_audio_processors/format_types/pslextensions/ipslcontextinfo.h) ([Public domain](modules/juce_audio_processors/format_types/pslextensions/ipslcontextinfo.h))
|
||||
- [AAX](modules/juce_audio_plugin_client/AAX/SDK/) ([Proprietary Avid AAX License/GPLv3](modules/juce_audio_plugin_client/AAX/SDK/LICENSE.txt))
|
||||
- [VST3](modules/juce_audio_processors/format_types/VST3_SDK/) ([Proprietary Steinberg VST3 License/GPLv3](modules/juce_audio_processors/format_types/VST3_SDK/LICENSE.txt))
|
||||
- [Box2D](modules/juce_box2d/box2d/) ([zlib](modules/juce_box2d/box2d/Box2D.h))
|
||||
- [pnglib](modules/juce_graphics/image_formats/pnglib/) ([zlib](modules/juce_graphics/image_formats/pnglib/LICENSE))
|
||||
- [zlib](modules/juce_core/zip/zlib/) ([zlib](modules/juce_core/zip/zlib/README))
|
||||
- [HarfBuzz](modules/juce_graphics/fonts/harfbuzz/) ([Old MIT](modules/juce_graphics/fonts/harfbuzz/COPYING))
|
||||
- [SheenBidi](modules/juce_graphics/unicode/sheenbidi/) ([Apache](modules/juce_graphics/unicode/sheenbidi/LICENSE))
|
||||
|
||||
The JUCE examples are licensed under the terms of the
|
||||
[ISC license](http://www.isc.org/downloads/software-support-policy/isc-license/).
|
||||
|
||||
Dependencies in the examples:
|
||||
- [reaper-sdk](examples/Plugins/extern/) ([zlib](examples/Plugins/extern/LICENSE.md))
|
||||
|
||||
Dependencies in the bundled applications:
|
||||
- [Projucer icons](extras/Projucer/Source/Utility/UI/jucer_Icons.cpp) ([MIT](extras/Projucer/Source/Utility/UI/jucer_Icons.cpp))
|
||||
|
||||
Dependencies in the build system:
|
||||
- [Android Gradle](examples/DemoRunner/Builds/Android/gradle/wrapper/LICENSE-for-gradlewrapper.txt) ([Apache 2.0](examples/DemoRunner/Builds/Android/gradle/wrapper/LICENSE-for-gradlewrapper.txt))
|
||||
|
|
|
|||
124
README.md
124
README.md
|
|
@ -1,33 +1,38 @@
|
|||

|
||||
|
||||
JUCE is an open-source cross-platform C++ application framework for creating high quality
|
||||
desktop and mobile applications, including VST, VST3, AU, AUv3, AAX and LV2 audio plug-ins
|
||||
and plug-in hosts. JUCE can be easily integrated with existing projects via CMake, or can
|
||||
be used as a project generation tool via the [Projucer](https://juce.com/discover/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.
|
||||
JUCE is an open-source cross-platform C++ application framework for creating
|
||||
desktop and mobile applications, including VST, VST3, AU, AUv3, AAX and LV2
|
||||
audio plug-ins and plug-in hosts. JUCE can be easily integrated with existing
|
||||
projects via CMake, or can be used as a project generation tool via the
|
||||
[Projucer](#the-projucer), which supports exporting projects for Xcode (macOS
|
||||
and iOS), Visual Studio, Android Studio, and Linux Makefiles as well as
|
||||
containing a source code editor.
|
||||
|
||||
## Getting Started
|
||||
|
||||
The JUCE repository contains a [master](https://github.com/juce-framework/JUCE/tree/master)
|
||||
and [develop](https://github.com/juce-framework/JUCE/tree/develop) branch. The develop branch
|
||||
contains the latest bugfixes and features and is periodically merged into the master
|
||||
branch in stable [tagged releases](https://github.com/juce-framework/JUCE/releases)
|
||||
(the latest release containing pre-built binaries can be also downloaded from the
|
||||
[JUCE website](https://juce.com/get-juce)).
|
||||
The JUCE repository contains a
|
||||
[master](https://github.com/juce-framework/JUCE/tree/master) and
|
||||
[develop](https://github.com/juce-framework/JUCE/tree/develop) branch. The
|
||||
develop branch contains the latest bug fixes and features and is periodically
|
||||
merged into the master branch in stable [tagged
|
||||
releases](https://github.com/juce-framework/JUCE/releases) (the latest release
|
||||
containing pre-built binaries can be also downloaded from the [JUCE
|
||||
website](https://juce.com/get-juce)).
|
||||
|
||||
JUCE projects can be managed with either the Projucer (JUCE's own project-configuration
|
||||
tool) or with CMake.
|
||||
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](/extras/Projucer/Builds)
|
||||
(the minimum 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 your platform - Xcode, Visual Studio and Linux Makefile projects are located
|
||||
in [extras/Projucer/Builds](/extras/Projucer/Builds) (the minimum system
|
||||
requirements are listed in the [minimum system
|
||||
requirements](#minimum-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](https://juce.com/learn/documentation) and
|
||||
|
|
@ -35,7 +40,7 @@ For further help getting started, please refer to the JUCE
|
|||
|
||||
### CMake
|
||||
|
||||
Version 3.15 or higher is required. To use CMake, you will need to install it,
|
||||
Version 3.22 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](https://cmake.org/download/). For comprehensive documentation on JUCE's
|
||||
CMake API, see the [JUCE CMake documentation](/docs/CMake%20API.md). For
|
||||
|
|
@ -56,19 +61,20 @@ of the target you wish to build.
|
|||
|
||||
#### Building JUCE Projects
|
||||
|
||||
- __macOS/iOS__: Xcode 10.1 (macOS 10.13.6)
|
||||
- __Windows__: Windows 8.1 and Visual Studio 2017
|
||||
- __C++ Standard__: 17
|
||||
- __macOS/iOS__: Xcode 12.4 (Intel macOS 10.15.4, Apple Silicon macOS 11.0)
|
||||
- __Windows__: Visual Studio 2019 (Windows 10)
|
||||
- __Linux__: g++ 7.0 or Clang 6.0 (for a full list of dependencies, see
|
||||
[here](/docs/Linux%20Dependencies.md)).
|
||||
- __Android__: Android Studio on Windows, macOS or Linux
|
||||
- __Android__: Android Studio (NDK 26) on Windows, macOS or Linux
|
||||
|
||||
#### Deployment Targets
|
||||
|
||||
- __macOS__: macOS 10.9
|
||||
- __Windows__: Windows Vista
|
||||
- __Linux__: Mainstream Linux distributions
|
||||
- __iOS__: iOS 9.0
|
||||
- __Android__: Jelly Bean (API 16)
|
||||
- __macOS__: macOS 10.11 (x86_64, Arm64)
|
||||
- __Windows__: Windows 10 (x86_64, x86, Arm64, Arm64EC)
|
||||
- __Linux__: Mainstream Linux distributions (x86_64, Arm64/aarch64, (32 bit Arm systems like armv7 should work but are not regularly tested))
|
||||
- __iOS__: iOS 12 (Arm64, Arm64e, x86_64 (Simulator))
|
||||
- __Android__: Android 5 - Lollipop (API Level 21) (arm64-v8a, armeabi-v7a, x86_64, x86)
|
||||
|
||||
## Contributing
|
||||
|
||||
|
|
@ -76,43 +82,37 @@ Please see our [contribution guidelines](.github/contributing.md).
|
|||
|
||||
## Licensing
|
||||
|
||||
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](http://www.isc.org/downloads/software-support-policy/isc-license/).
|
||||
Other modules are covered by a
|
||||
[GPL](https://www.gnu.org/licenses/gpl-3.0.en.html)/Commercial license.
|
||||
See [LICENSE.md](LICENSE.md) for licensing and dependency information.
|
||||
|
||||
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 or $800 perpetual
|
||||
- JUCE Pro (no revenue limit) - $130/month or $2600 perpetual
|
||||
- JUCE Educational (no revenue limit) - free for bona fide educational institutes
|
||||
## AAX Plug-Ins
|
||||
|
||||
For full terms see [LICENSE.md](LICENSE.md).
|
||||
AAX plug-ins need to be digitally signed using PACE Anti-Piracy's signing tools
|
||||
before they will run in commercially available versions of Pro Tools. These
|
||||
tools are provided free of charge by Avid. Before obtaining the signing tools,
|
||||
you will need to use a special build of Pro Tools, called Pro Tools Developer,
|
||||
to test your unsigned plug-ins. The steps to obtain Pro Tools Developer are:
|
||||
|
||||
The JUCE framework contains the following dependencies:
|
||||
- [Oboe](modules/juce_audio_devices/native/oboe/) ([Apache 2.0](modules/juce_audio_devices/native/oboe/LICENSE))
|
||||
- [FLAC](modules/juce_audio_formats/codecs/flac/) ([BSD](modules/juce_audio_formats/codecs/flac/Flac%20Licence.txt))
|
||||
- [Ogg Vorbis](modules/juce_audio_formats/codecs/oggvorbis/) ([BSD](modules/juce_audio_formats/codecs/oggvorbis/Ogg%20Vorbis%20Licence.txt))
|
||||
- [AudioUnitSDK](modules/juce_audio_plugin_client/AU/AudioUnitSDK/) ([Apache 2.0](modules/juce_audio_plugin_client/AU/AudioUnitSDK/LICENSE.txt))
|
||||
- [AUResources.r](modules/juce_audio_plugin_client/AUResources.r) ([Apple](modules/juce_audio_plugin_client/AUResources.r))
|
||||
- [LV2](modules/juce_audio_processors/format_types/LV2_SDK/) ([ISC](modules/juce_audio_processors/format_types/LV2_SDK/lv2/COPYING))
|
||||
- [pslextensions](modules/juce_audio_processors/format_types/pslextensions/ipslcontextinfo.h) ([Public domain](modules/juce_audio_processors/format_types/pslextensions/ipslcontextinfo.h))
|
||||
- [VST3](modules/juce_audio_processors/format_types/VST3_SDK/) ([Proprietary Steinberg VST3/GPLv3](modules/juce_audio_processors/format_types/VST3_SDK/LICENSE.txt))
|
||||
- [zlib](modules/juce_core/zip/zlib/) ([zlib](modules/juce_core/zip/zlib/README))
|
||||
- [Box2D](modules/juce_box2d/box2d/) ([zlib](modules/juce_box2d/box2d/Box2D.h))
|
||||
- [jpeglib](modules/juce_graphics/image_formats/jpglib/) ([Independent JPEG Group License](modules/juce_graphics/image_formats/jpglib/README))
|
||||
- [pnglib](modules/juce_graphics/image_formats/pnglib/) ([zlib](modules/juce_graphics/image_formats/pnglib/LICENSE))
|
||||
- [GLEW](modules/juce_opengl/opengl/juce_gl.h) ([BSD](modules/juce_opengl/opengl/juce_gl.h)), including [Mesa](modules/juce_opengl/opengl/juce_gl.h) ([MIT](modules/juce_opengl/opengl/juce_gl.h)) and [Khronos](modules/juce_opengl/opengl/juce_gl.h) ([MIT](modules/juce_opengl/opengl/juce_gl.h))
|
||||
1. Sign up as an AAX Developer [here](https://developer.avid.com/aax/).
|
||||
2. Request a Pro Tools Developer Bundle activation code by sending an email to
|
||||
[devauth@avid.com](mailto:devauth@avid.com).
|
||||
3. Download the latest Pro Tools Developer build from your Avid Developer
|
||||
account.
|
||||
|
||||
The JUCE examples are licensed under the terms of the
|
||||
[ISC license](http://www.isc.org/downloads/software-support-policy/isc-license/).
|
||||
When your plug-ins have been tested and debugged in Pro Tools Developer, and you
|
||||
are ready to digitally sign them, please send an email to
|
||||
[audiosdk@avid.com](mailto:audiosdk@avid.com) with the subject "PACE Eden
|
||||
Signing Tools Request". You need to include an overview of each plug-in along
|
||||
with a screen recording showing the plug-in running in Pro Tools Developer, with
|
||||
audio if possible.
|
||||
|
||||
Dependencies in the examples:
|
||||
- [reaper-sdk](examples/Plugins/extern/) ([zlib](examples/Plugins/extern/LICENSE.md))
|
||||
Please also include the following information:
|
||||
|
||||
Dependencies in the bundled applications:
|
||||
- [Projucer icons](extras/Projucer/Source/Utility/UI/jucer_Icons.cpp) ([MIT](extras/Projucer/Source/Utility/UI/jucer_Icons.cpp))
|
||||
- Company name
|
||||
- Admin full name
|
||||
- Telephone number
|
||||
|
||||
Dependencies in the build system:
|
||||
- [Android Gradle](examples/DemoRunner/Builds/Android/gradle/wrapper/LICENSE-for-gradlewrapper.txt) ([Apache 2.0](examples/DemoRunner/Builds/Android/gradle/wrapper/LICENSE-for-gradlewrapper.txt))
|
||||
Once the request is submitted, PACE Anti-Piracy will contact you directly with
|
||||
information about signing your plug-ins. When the plug-ins have been signed, you
|
||||
are free to sell and distribute them. If you are interested in selling your
|
||||
plug-ins on the Avid Marketplace, please send an email to
|
||||
[audiosdk@avid.com](mailto:audiosdk@avid.com).
|
||||
|
|
|
|||
|
|
@ -2,9 +2,8 @@
|
|||
|
||||
## System Requirements
|
||||
|
||||
- All project types require CMake 3.15 or higher.
|
||||
- All project types require CMake 3.22 or higher.
|
||||
- Android targets are not currently supported.
|
||||
- WebView2 on Windows via JUCE_USE_WIN_WEBVIEW2 flag in juce_gui_extra is not currently supported.
|
||||
|
||||
Most system package managers have packages for CMake, but we recommend using the most recent release
|
||||
from https://cmake.org/download. You should always use a CMake that's newer than your build
|
||||
|
|
@ -144,11 +143,10 @@ you can configure a Clang-cl build by passing "-T ClangCL" on your configuration
|
|||
If you wish to use Clang with GNU-like command-line instead, you can pass
|
||||
`-DCMAKE_CXX_COMPILER=clang++` and `-DCMAKE_C_COMPILER=clang` on your configuration commandline.
|
||||
clang++ and clang must be on your `PATH` for this to work. Only more recent versions of CMake
|
||||
support Clang's GNU-like command-line on Windows. CMake 3.12 is not supported, CMake 3.15 has
|
||||
support, CMake 3.20 or higher is recommended. Note that CMake doesn't seem to automatically link a
|
||||
runtime library when building in this configuration, but this can be remedied by setting the
|
||||
`MSVC_RUNTIME_LIBRARY` property. See the [official
|
||||
documentation](https://cmake.org/cmake/help/v3.15/prop_tgt/MSVC_RUNTIME_LIBRARY.html) of this
|
||||
support Clang's GNU-like command-line on Windows. Note that CMake doesn't seem to automatically
|
||||
link a runtime library when building in this configuration, but this can be remedied by setting
|
||||
the `MSVC_RUNTIME_LIBRARY` property. See the [official
|
||||
documentation](https://cmake.org/cmake/help/v3.22/prop_tgt/MSVC_RUNTIME_LIBRARY.html) of this
|
||||
property for usage recommendations.
|
||||
|
||||
### A note about compile definitions
|
||||
|
|
@ -169,10 +167,10 @@ appropriate:
|
|||
|
||||
target_compile_definitions(my_target PUBLIC NAME_OF_KEY=<value>)
|
||||
|
||||
The `JucePlugin_PreferredChannelConfig` preprocessor definition for plugins is difficult to specify
|
||||
in a portable way due to its use of curly braces, which may be misinterpreted in Linux/Mac builds
|
||||
using the Ninja/Makefile generators. It is recommended to avoid this option altogether, and to use
|
||||
the newer buses API to specify the desired plugin inputs and outputs.
|
||||
The `JucePlugin_PreferredChannelConfigurations` preprocessor definition for plugins is difficult to
|
||||
specify in a portable way due to its use of curly braces, which may be misinterpreted in Linux/Mac
|
||||
builds using the Ninja/Makefile generators. It is recommended to avoid this option altogether, and
|
||||
to use the newer buses API to specify the desired plugin inputs and outputs.
|
||||
|
||||
## API Reference
|
||||
|
||||
|
|
@ -224,6 +222,24 @@ plugin folders may be protected, so the build may require elevated permissions i
|
|||
installation to work correctly, or you may need to adjust the permissions of the destination
|
||||
folders.
|
||||
|
||||
#### `JUCE_MODULES_ONLY`
|
||||
|
||||
Only brings in targets for the built-in JUCE modules, and the `juce_add_module*` CMake functions.
|
||||
This is meant for highly custom use-cases where the `juce_add_gui_app` and `juce_add_plugin`
|
||||
functions are not required. Most importantly, the 'juceaide' helper tool is not built when this
|
||||
option is enabled, which may improve build times for established products that use other methods to
|
||||
handle plugin bundle structures, icons, plists, and so on. If this option is enabled, then
|
||||
`JUCE_ENABLE_MODULE_SOURCE_GROUPS` will have no effect.
|
||||
|
||||
#### `JUCE_WEBVIEW2_PACKAGE_LOCATION`
|
||||
|
||||
You can ask JUCE to link the WebView2 library statically to your target on Windows, by specifying
|
||||
the `NEEDS_WEBVIEW2` option when creating your target. In this case JUCE will search for the
|
||||
WebView2 package on your system. The default search location is
|
||||
`%userprofile%\AppData\Local\PackageManagement\NuGet\Packages`. This location can be overriden by
|
||||
specifying this option. The provided location should contain the `*Microsoft.Web.WebView2*`
|
||||
directory.
|
||||
|
||||
### Functions
|
||||
|
||||
#### `juce_add_<target>`
|
||||
|
|
@ -266,7 +282,7 @@ attributes directly to these creation functions, rather than adding them later.
|
|||
`BUNDLE_ID`
|
||||
- An identifier string in the form "com.yourcompany.productname" which should uniquely identify
|
||||
this target. Mainly used for macOS builds. If not specified, a default will be generated using
|
||||
the target's `COMPANY_NAME` and `PRODUCT_NAME`.
|
||||
the target's `COMPANY_NAME` and the name of the CMake target.
|
||||
|
||||
`MICROPHONE_PERMISSION_ENABLED`
|
||||
- May be either TRUE or FALSE. Adds the appropriate entries to an app's Info.plist.
|
||||
|
|
@ -398,6 +414,11 @@ attributes directly to these creation functions, rather than adding them later.
|
|||
are set on a JUCE target. By default, we don't link Webkit because you might not need it, but
|
||||
if you get linker or include errors that reference Webkit, just set this argument to `TRUE`.
|
||||
|
||||
`NEEDS_WEBVIEW2`
|
||||
- On Windows, JUCE may or may not need to link to WebView2 depending on the compile definitions that
|
||||
are set on a JUCE target. By default, we don't link WebView2 because you might not need it, but
|
||||
if you get linker or include errors that reference WebView2, just set this argument to `TRUE`.
|
||||
|
||||
`NEEDS_STORE_KIT`
|
||||
- On macOS, JUCE may or may not need to link to StoreKit depending on the compile definitions that
|
||||
are set on a JUCE target. By default, we don't link StoreKit because you might not need it, but
|
||||
|
|
@ -445,6 +466,11 @@ attributes directly to these creation functions, rather than adding them later.
|
|||
- A set of space-separated paths that will be added to this target's entitlements plist for
|
||||
accessing read/write absolute paths if `APP_SANDBOX_ENABLED` is `TRUE`.
|
||||
|
||||
`APP_SANDBOX_EXCEPTION_IOKIT`
|
||||
- A set of space-separated strings specifying IOUserClient subclasses to open or to set properties
|
||||
on. These will be added to this target's entitlements plist if `APP_SANDBOX_ENABLED` is `TRUE`.
|
||||
For more information see Apple's IOKit User Client Class Temporary Exception documentation.
|
||||
|
||||
`PLIST_TO_MERGE`
|
||||
- A string to insert into an app/plugin's Info.plist.
|
||||
|
||||
|
|
@ -499,6 +525,17 @@ attributes directly to these creation functions, rather than adding them later.
|
|||
`AAX_IDENTIFIER`
|
||||
- The bundle ID for the AAX plugin target. Matches the `BUNDLE_ID` by default.
|
||||
|
||||
`LV2URI`
|
||||
- This is a string that acts as a unique identifier for an LV2 plugin. If you make any incompatible
|
||||
changes to your plugin (remove parameters, reorder parameters, change preset format etc.) you MUST
|
||||
change this value. LV2 hosts will assume that any plugins with the same URI are interchangeable.
|
||||
By default, the value of this property will be generated based on the COMPANY_WEBSITE and
|
||||
PLUGIN_NAME. However, in some circumstances, such as the following, you'll need to override the
|
||||
default:
|
||||
- The plugin name contains characters such as spaces that are invalid in a URI; or
|
||||
- The COMPANY_WEBSITE omits the leading scheme identifier (http://); or
|
||||
- There's no website associated with the plugin, so you want to use a 'urn:' identifier instead.
|
||||
|
||||
`VST_NUM_MIDI_INS`
|
||||
- For VST2 and VST3 plugins that accept midi, this allows you to configure the number of inputs.
|
||||
|
||||
|
|
@ -507,7 +544,7 @@ attributes directly to these creation functions, rather than adding them later.
|
|||
|
||||
`VST2_CATEGORY`
|
||||
- Should be one of: `kPlugCategUnknown`, `kPlugCategEffect`, `kPlugCategSynth`,
|
||||
`kPlugCategAnalysis`, `kPlugCategMatering`, `kPlugCategSpacializer`, `kPlugCategRoomFx`,
|
||||
`kPlugCategAnalysis`, `kPlugCategMastering`, `kPlugCategSpacializer`, `kPlugCategRoomFx`,
|
||||
`kPlugSurroundFx`, `kPlugCategRestoration`, `kPlugCategOfflineProcess`, `kPlugCategShell`,
|
||||
`kPlugCategGenerator`.
|
||||
|
||||
|
|
@ -540,13 +577,9 @@ attributes directly to these creation functions, rather than adding them later.
|
|||
in GarageBand.
|
||||
|
||||
`AAX_CATEGORY`
|
||||
- Should be one or more of: `AAX_ePlugInCategory_None`, `AAX_ePlugInCategory_EQ`,
|
||||
`AAX_ePlugInCategory_Dynamics`, `AAX_ePlugInCategory_PitchShift`, `AAX_ePlugInCategory_Reverb`,
|
||||
`AAX_ePlugInCategory_Delay`, `AAX_ePlugInCategory_Modulation`, `AAX_ePlugInCategory_Harmonic`,
|
||||
`AAX_ePlugInCategory_NoiseReduction`, `AAX_ePlugInCategory_Dither`,
|
||||
`AAX_ePlugInCategory_SoundField`, `AAX_ePlugInCategory_HWGenerators`,
|
||||
`AAX_ePlugInCategory_SWGenerators`, `AAX_ePlugInCategory_WrappedPlugin`,
|
||||
`AAX_EPlugInCategory_Effect`
|
||||
- Should be one or more of: `None`, `EQ`, `Dynamics`, `PitchShift`, `Reverb`, `Delay`, `Modulation`,
|
||||
`Harmonic`, `NoiseReduction`, `Dither`, `SoundField`, `HWGenerators`, `SWGenerators`,
|
||||
`WrappedPlugin`, `Effect`, and `MIDIEffect`. You may also add the prefix `AAX_ePlugInCategory_`.
|
||||
|
||||
`PLUGINHOST_AU`
|
||||
- May be either TRUE or FALSE (defaults to FALSE). If TRUE, will add the preprocessor definition
|
||||
|
|
@ -635,6 +668,17 @@ attributes directly to these creation functions, rather than adding them later.
|
|||
`kARAPlaybackTransformationContentBasedFadeAtTail`,
|
||||
`kARAPlaybackTransformationContentBasedFadeAtHead`
|
||||
|
||||
`VST3_AUTO_MANIFEST`
|
||||
- May be either TRUE or FALSE (defaults to TRUE). When TRUE, a POST_BUILD step will be added to the
|
||||
VST3 target which will generate a moduleinfo.json file into the Resources subdirectory of the
|
||||
plugin bundle. This is normally desirable, but does require that the plugin can be successfully
|
||||
loaded immediately after building the VST3 target. If the plugin needs further processing before
|
||||
it can be loaded (e.g. custom signing), then set this option to FALSE to disable the automatic
|
||||
manifest generation. To generate the manifest at a later point in the build, use the
|
||||
`juce_enable_vst3_manifest_step` function. It is strongly recommended to generate a manifest for
|
||||
your plugin, as this allows compatible hosts to scan the plugin much more quickly, leading to
|
||||
an improved experience for users.
|
||||
|
||||
#### `juce_add_binary_data`
|
||||
|
||||
juce_add_binary_data(<name>
|
||||
|
|
@ -695,6 +739,19 @@ If your custom build steps need to use the location of the plugin artefact, you
|
|||
by querying the property `JUCE_PLUGIN_ARTEFACT_FILE` on a plugin target (*not* the shared code
|
||||
target!).
|
||||
|
||||
#### `juce_enable_vst3_manifest_step`
|
||||
|
||||
juce_enable_vst3_manifest_step(<target>)
|
||||
|
||||
You may call this function to manually enable VST3 manifest generation on a plugin. The argument to
|
||||
this function should be a target previously created with `juce_add_plugin`.
|
||||
|
||||
VST3_AUTO_MANIFEST TRUE will cause the VST3 manifest to be generated immediately after building.
|
||||
This is not always appropriate, if extra build steps (such as signing or modifying the plugin
|
||||
bundle) must be executed before the plugin can be loaded. In such cases, you should set
|
||||
VST3_AUTO_MANIFEST FALSE, use `add_custom_command(TARGET POST_BUILD)` to add your own post-build
|
||||
steps, and then finally call `juce_enable_vst3_manifest_step`.
|
||||
|
||||
#### `juce_set_<kind>_sdk_path`
|
||||
|
||||
juce_set_aax_sdk_path(<absolute path>)
|
||||
|
|
@ -738,8 +795,8 @@ CMakeLists in the `modules` directory.
|
|||
|
||||
This function parses the PIP metadata block in the provided header, and adds appropriate build
|
||||
targets for a console app, GUI app, or audio plugin. For audio plugin targets, it builds as many
|
||||
plugin formats as possible. To build AAX or VST2 targets, call `juce_set_aax_sdk_path` and/or
|
||||
`juce_set_vst2_sdk_path` *before* calling `juce_add_pip`.
|
||||
plugin formats as possible. To build VST2 targets, call `juce_set_vst2_sdk_path` *before* calling
|
||||
`juce_add_pip`.
|
||||
|
||||
This is mainly provided to build the built-in example projects in the JUCE repo, and for building
|
||||
quick proof-of-concept demo apps with minimal set-up. For any use-case more complex than a
|
||||
|
|
@ -755,6 +812,21 @@ This function sets the `CMAKE_<LANG>_FLAGS_<MODE>` to empty in the current direc
|
|||
allowing alternative optimisation/debug flags to be supplied without conflicting with the
|
||||
CMake-supplied defaults.
|
||||
|
||||
#### `juce_link_with_embedded_linux_subprocess`
|
||||
|
||||
juce_link_with_embedded_linux_subprocess(<target>)
|
||||
|
||||
This function links the provided target with an interface library that generates a barebones
|
||||
standalone executable file and embeds it as a binary resource. This binary resource is only used
|
||||
by the `juce_gui_extra` module and only when its `JUCE_WEB_BROWSER` capability is enabled. This
|
||||
executable will then be deployed into a temporary file only when the code is running in a
|
||||
non-standalone format, and will be used to host a WebKit view. This technique is used by audio
|
||||
plugins on Linux.
|
||||
|
||||
This function is automatically called if necessary for all targets created by one of the JUCE target
|
||||
creation functions i.e. `juce_add_gui_app`, `juce_add_console_app` and `juce_add_gui_app`. You don't
|
||||
need to call this function manually in these cases.
|
||||
|
||||
### Targets
|
||||
|
||||
#### `juce::juce_recommended_warning_flags`
|
||||
|
|
|
|||
|
|
@ -65,28 +65,28 @@ adding these files to their projects.
|
|||
The names of these source files must begin with the name of the module, but they can have
|
||||
a number or other suffix if there is more than one.
|
||||
|
||||
In order to specify that a source file should only be compiled on a specific platform,
|
||||
then the filename can be suffixed with one of the following strings:
|
||||
In order to specify that a source file should only be compiled for a specific platform,
|
||||
then the filename can be suffixed with one of the following (case insensitive) strings:
|
||||
|
||||
_OSX
|
||||
_Windows
|
||||
_Linux
|
||||
_Android
|
||||
_iOS
|
||||
_mac or _osx <- compiled for macOS and OSX platforms only
|
||||
_windows <- compiled for Windows platforms only
|
||||
_linux <- compiled for Linux and FreeBSD platforms only
|
||||
_andoid <- compiled for Android platforms only
|
||||
_ios <- compiled for iOS platforms only
|
||||
|
||||
e.g.
|
||||
|
||||
juce_mymodule/juce_mymodule_1.cpp <- compiled on all platforms
|
||||
juce_mymodule/juce_mymodule_2.cpp <- compiled on all platforms
|
||||
juce_mymodule/juce_mymodule_OSX.cpp <- compiled only on OSX
|
||||
juce_mymodule/juce_mymodule_Windows.cpp <- compiled only on Windows
|
||||
juce_mymodule/juce_mymodule_1.cpp <- compiled for all platforms
|
||||
juce_mymodule/juce_mymodule_2.cpp <- compiled for all platforms
|
||||
juce_mymodule/juce_mymodule_mac.cpp <- compiled for macOS and OSX platforms only
|
||||
juce_mymodule/juce_mymodule_windows.cpp <- compiled for Windows platforms only
|
||||
|
||||
Often this isn't necessary, as in most cases you can easily add checks inside the files
|
||||
to do different things depending on the platform, but this may be handy just to avoid
|
||||
clutter in user projects where files aren't needed.
|
||||
|
||||
To simplify the use of obj-C++ there's also a special-case rule: If the folder contains
|
||||
both a .mm and a .cpp file whose names are otherwise identical, then on OSX/iOS the .mm
|
||||
both a .mm and a .cpp file whose names are otherwise identical, then on macOS/iOS the .mm
|
||||
will be used and the cpp ignored. (And vice-versa for other platforms, of course).
|
||||
|
||||
|
||||
|
|
@ -95,8 +95,7 @@ will be used and the cpp ignored. (And vice-versa for other platforms, of course
|
|||
Precompiled libraries can be included in a module by placing them in a libs/ subdirectory.
|
||||
The following directories are automatically added to the library search paths, and libraries
|
||||
placed in these directories can be linked with projects via the OSXLibs, iOSLibs,
|
||||
windowsLibs, linuxLibs and mingwLibs keywords in the module declaration (see the following
|
||||
section).
|
||||
windowsLibs, and linuxLibs keywords in the module declaration (see the following section).
|
||||
|
||||
- OS X
|
||||
- libs/MacOSX - to support multiple architectures, you may place libraries built as universal
|
||||
|
|
@ -115,9 +114,6 @@ section).
|
|||
- libs/Linux/{arch}, where {arch} is the architecture you are targeting with the compiler. Some
|
||||
common examples of {arch} are "x86_64", "i386" and "armv6".
|
||||
|
||||
- MinGW
|
||||
- libs/MinGW/{arch}, where {arch} can take the same values as Linux.
|
||||
|
||||
- iOS
|
||||
- libs/iOS - to support multiple architectures, you may place libraries built as universal
|
||||
binaries at this location. For backwards compatibility, the Projucer will also include the
|
||||
|
|
@ -206,10 +202,6 @@ Possible values:
|
|||
- (Optional) A list (space or comma-separated) of static or dynamic libs that should be linked in a
|
||||
linux build (these are passed to the linker via the -l flag)
|
||||
|
||||
- mingwLibs
|
||||
- (Optional) A list (space or comma-separated) of static libs that should be linked in a
|
||||
win32 mingw build (these are passed to the linker via the -l flag)
|
||||
|
||||
- OSXLibs
|
||||
- (Optional) A list (space or comma-separated) of static or dynamic libs that should be linked in an
|
||||
OS X build (these are passed to the linker via the -l flag)
|
||||
|
|
@ -232,13 +224,12 @@ Here's an example block:
|
|||
name: JUCE audio and MIDI I/O device classes
|
||||
description: Classes to play and record from audio and MIDI I/O devices
|
||||
website: http://www.juce.com/juce
|
||||
license: GPL/Commercial
|
||||
license: AGPLv3/Commercial
|
||||
|
||||
dependencies: juce_audio_basics, juce_audio_formats, juce_events
|
||||
OSXFrameworks: CoreAudio CoreMIDI DiscRecording
|
||||
iOSFrameworks: CoreAudio CoreMIDI AudioToolbox AVFoundation
|
||||
linuxLibs: asound
|
||||
mingwLibs: winmm
|
||||
|
||||
END_JUCE_MODULE_DECLARATION
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,11 @@ or
|
|||
- libcurl4-openssl-dev (unless `JUCE_USE_CURL=0`)
|
||||
|
||||
#### juce_graphics
|
||||
- libfreetype6-dev (unless `JUCE_USE_FREETYPE=0`)
|
||||
- libfontconfig1-dev (unless `JUCE_USE_FONTCONFIG=0`)
|
||||
- libfreetype-dev (unless `JUCE_USE_FREETYPE=0`)
|
||||
|
||||
These packages are available on Ubuntu 22 and 24. If libfreetype-dev is not
|
||||
available you could try installing the libfreetype6-dev package.
|
||||
|
||||
#### juce_gui_basics
|
||||
- libx11-dev
|
||||
|
|
@ -44,7 +48,14 @@ or
|
|||
- libxrender-dev (unless `JUCE_USE_XRENDER=0`)
|
||||
|
||||
#### juce_gui_extra
|
||||
- libwebkit2gtk-4.0-dev (unless `JUCE_WEB_BROWSER=0`)
|
||||
- libwebkit2gtk-4.1-dev (unless `JUCE_WEB_BROWSER=0`)
|
||||
|
||||
On older systems, where 4.1 is not available, you can also use
|
||||
|
||||
- libwebkit2gtk-4.0-dev
|
||||
|
||||
Compiled JUCE applications will dynamically load whichever library version is
|
||||
available during runtime.
|
||||
|
||||
#### juce_opengl
|
||||
- libglu1-mesa-dev
|
||||
|
|
@ -56,7 +67,7 @@ The full command is as follows:
|
|||
sudo apt install libasound2-dev libjack-jackd2-dev \
|
||||
ladspa-sdk \
|
||||
libcurl4-openssl-dev \
|
||||
libfreetype6-dev \
|
||||
libx11-dev libxcomposite-dev libxcursor-dev libxcursor-dev libxext-dev libxinerama-dev libxrandr-dev libxrender-dev \
|
||||
libwebkit2gtk-4.0-dev \
|
||||
libfreetype-dev libfontconfig1-dev \
|
||||
libx11-dev libxcomposite-dev libxcursor-dev libxext-dev libxinerama-dev libxrandr-dev libxrender-dev \
|
||||
libwebkit2gtk-4.1-dev \
|
||||
libglu1-mesa-dev mesa-common-dev
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
190
examples/Assets/ADSRComponent.h
Normal file
190
examples/Assets/ADSRComponent.h
Normal file
|
|
@ -0,0 +1,190 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
class ADSRComponent final : public Component
|
||||
{
|
||||
public:
|
||||
ADSRComponent()
|
||||
: envelope { *this }
|
||||
{
|
||||
for (Slider* slider : { &adsrAttack, &adsrDecay, &adsrSustain, &adsrRelease })
|
||||
{
|
||||
if (slider == &adsrSustain)
|
||||
{
|
||||
slider->textFromValueFunction = [slider] (double value)
|
||||
{
|
||||
String text;
|
||||
|
||||
text << slider->getName();
|
||||
|
||||
const auto val = (int) jmap (value, 0.0, 1.0, 0.0, 100.0);
|
||||
text << String::formatted (": %d%%", val);
|
||||
|
||||
return text;
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
slider->textFromValueFunction = [slider] (double value)
|
||||
{
|
||||
String text;
|
||||
|
||||
text << slider->getName();
|
||||
|
||||
text << ": " << ((value < 0.4f) ? String::formatted ("%dms", (int) std::round (value * 1000))
|
||||
: String::formatted ("%0.2lf Sec", value));
|
||||
|
||||
return text;
|
||||
};
|
||||
|
||||
slider->setSkewFactor (0.3);
|
||||
}
|
||||
|
||||
slider->setRange (0, 1);
|
||||
slider->setTextBoxStyle (Slider::TextBoxBelow, true, 300, 25);
|
||||
slider->onValueChange = [this]
|
||||
{
|
||||
NullCheckedInvocation::invoke (onChange);
|
||||
repaint();
|
||||
};
|
||||
|
||||
addAndMakeVisible (slider);
|
||||
}
|
||||
|
||||
adsrAttack.setName ("Attack");
|
||||
adsrDecay.setName ("Decay");
|
||||
adsrSustain.setName ("Sustain");
|
||||
adsrRelease.setName ("Release");
|
||||
|
||||
adsrAttack.setValue (0.1, dontSendNotification);
|
||||
adsrDecay.setValue (0.3, dontSendNotification);
|
||||
adsrSustain.setValue (0.3, dontSendNotification);
|
||||
adsrRelease.setValue (0.2, dontSendNotification);
|
||||
|
||||
addAndMakeVisible (envelope);
|
||||
}
|
||||
|
||||
std::function<void()> onChange;
|
||||
|
||||
ADSR::Parameters getParameters() const
|
||||
{
|
||||
return
|
||||
{
|
||||
(float) adsrAttack.getValue(),
|
||||
(float) adsrDecay.getValue(),
|
||||
(float) adsrSustain.getValue(),
|
||||
(float) adsrRelease.getValue(),
|
||||
};
|
||||
}
|
||||
|
||||
void resized() final
|
||||
{
|
||||
auto bounds = getLocalBounds();
|
||||
|
||||
const auto knobWidth = bounds.getWidth() / 4;
|
||||
auto knobBounds = bounds.removeFromBottom (bounds.getHeight() / 2);
|
||||
{
|
||||
adsrAttack.setBounds (knobBounds.removeFromLeft (knobWidth));
|
||||
adsrDecay.setBounds (knobBounds.removeFromLeft (knobWidth));
|
||||
adsrSustain.setBounds (knobBounds.removeFromLeft (knobWidth));
|
||||
adsrRelease.setBounds (knobBounds.removeFromLeft (knobWidth));
|
||||
}
|
||||
|
||||
envelope.setBounds (bounds);
|
||||
}
|
||||
|
||||
Slider adsrAttack { Slider::RotaryVerticalDrag, Slider::TextBoxBelow };
|
||||
Slider adsrDecay { Slider::RotaryVerticalDrag, Slider::TextBoxBelow };
|
||||
Slider adsrSustain { Slider::RotaryVerticalDrag, Slider::TextBoxBelow };
|
||||
Slider adsrRelease { Slider::RotaryVerticalDrag, Slider::TextBoxBelow };
|
||||
|
||||
private:
|
||||
class Envelope final : public Component
|
||||
{
|
||||
public:
|
||||
Envelope (ADSRComponent& adsr) : parent { adsr } {}
|
||||
|
||||
void paint (Graphics& g) final
|
||||
{
|
||||
const auto env = parent.getParameters();
|
||||
|
||||
// sustain isn't a length but we use a fixed value here to give
|
||||
// sustain some visual width in the envelope
|
||||
constexpr auto sustainLength = 0.1;
|
||||
|
||||
const auto adsrLength = env.attack
|
||||
+ env.decay
|
||||
+ sustainLength
|
||||
+ env.release;
|
||||
|
||||
auto bounds = getLocalBounds().toFloat();
|
||||
|
||||
const auto attackWidth = bounds.proportionOfWidth (env.attack / adsrLength);
|
||||
const auto decayWidth = bounds.proportionOfWidth (env.decay / adsrLength);
|
||||
const auto sustainWidth = bounds.proportionOfWidth (sustainLength / adsrLength);
|
||||
const auto releaseWidth = bounds.proportionOfWidth (env.release / adsrLength);
|
||||
const auto sustainHeight = bounds.proportionOfHeight (1 - env.sustain);
|
||||
|
||||
const auto attackBounds = bounds.removeFromLeft (attackWidth);
|
||||
const auto decayBounds = bounds.removeFromLeft (decayWidth);
|
||||
const auto sustainBounds = bounds.removeFromLeft (sustainWidth);
|
||||
const auto releaseBounds = bounds.removeFromLeft (releaseWidth);
|
||||
|
||||
g.setColour (Colours::black.withAlpha (0.1f));
|
||||
g.fillRect (bounds);
|
||||
|
||||
const auto alpha = 0.4f;
|
||||
|
||||
g.setColour (Colour (246, 98, 92).withAlpha (alpha));
|
||||
g.fillRect (attackBounds);
|
||||
|
||||
g.setColour (Colour (242, 187, 60).withAlpha (alpha));
|
||||
g.fillRect (decayBounds);
|
||||
|
||||
g.setColour (Colour (109, 234, 166).withAlpha (alpha));
|
||||
g.fillRect (sustainBounds);
|
||||
|
||||
g.setColour (Colour (131, 61, 183).withAlpha (alpha));
|
||||
g.fillRect (releaseBounds);
|
||||
|
||||
Path envelopePath;
|
||||
envelopePath.startNewSubPath (attackBounds.getBottomLeft());
|
||||
envelopePath.lineTo (decayBounds.getTopLeft());
|
||||
envelopePath.lineTo (sustainBounds.getX(), sustainHeight);
|
||||
envelopePath.lineTo (releaseBounds.getX(), sustainHeight);
|
||||
envelopePath.lineTo (releaseBounds.getBottomRight());
|
||||
|
||||
const auto lineThickness = 4.0f;
|
||||
|
||||
g.setColour (Colours::white);
|
||||
g.strokePath (envelopePath, PathStrokeType { lineThickness });
|
||||
}
|
||||
|
||||
private:
|
||||
ADSRComponent& parent;
|
||||
};
|
||||
|
||||
Envelope envelope;
|
||||
};
|
||||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -24,8 +28,8 @@
|
|||
/* This component scrolls a continuous waveform showing the audio that's
|
||||
coming into whatever audio inputs this object is connected to.
|
||||
*/
|
||||
class LiveScrollingAudioDisplay : public AudioVisualiserComponent,
|
||||
public AudioIODeviceCallback
|
||||
class LiveScrollingAudioDisplay final : public AudioVisualiserComponent,
|
||||
public AudioIODeviceCallback
|
||||
{
|
||||
public:
|
||||
LiveScrollingAudioDisplay() : AudioVisualiserComponent (1)
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -38,7 +42,7 @@ struct DSPDemoParameterBase : public ChangeBroadcaster
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
struct SliderParameter : public DSPDemoParameterBase
|
||||
struct SliderParameter final : public DSPDemoParameterBase
|
||||
{
|
||||
SliderParameter (Range<double> range, double skew, double initialValue,
|
||||
const String& labelName, const String& suffix = {})
|
||||
|
|
@ -66,7 +70,7 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
struct ChoiceParameter : public DSPDemoParameterBase
|
||||
struct ChoiceParameter final : public DSPDemoParameterBase
|
||||
{
|
||||
ChoiceParameter (const StringArray& options, int initialId, const String& labelName)
|
||||
: DSPDemoParameterBase (labelName)
|
||||
|
|
@ -89,11 +93,11 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class AudioThumbnailComponent : public Component,
|
||||
public FileDragAndDropTarget,
|
||||
public ChangeBroadcaster,
|
||||
private ChangeListener,
|
||||
private Timer
|
||||
class AudioThumbnailComponent final : public Component,
|
||||
public FileDragAndDropTarget,
|
||||
public ChangeBroadcaster,
|
||||
private ChangeListener,
|
||||
private Timer
|
||||
{
|
||||
public:
|
||||
AudioThumbnailComponent (AudioDeviceManager& adm, AudioFormatManager& afm)
|
||||
|
|
@ -148,7 +152,7 @@ public:
|
|||
{
|
||||
transportSource = newSource;
|
||||
|
||||
struct ResetCallback : public CallbackMessage
|
||||
struct ResetCallback final : public CallbackMessage
|
||||
{
|
||||
ResetCallback (AudioThumbnailComponent& o) : owner (o) {}
|
||||
void messageCallback() override { owner.reset(); }
|
||||
|
|
@ -217,7 +221,7 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class DemoParametersComponent : public Component
|
||||
class DemoParametersComponent final : public Component
|
||||
{
|
||||
public:
|
||||
DemoParametersComponent (const std::vector<DSPDemoParameterBase*>& demoParams)
|
||||
|
|
@ -270,9 +274,9 @@ private:
|
|||
|
||||
//==============================================================================
|
||||
template <class DemoType>
|
||||
struct DSPDemo : public AudioSource,
|
||||
public ProcessorWrapper<DemoType>,
|
||||
private ChangeListener
|
||||
struct DSPDemo final : public AudioSource,
|
||||
public ProcessorWrapper<DemoType>,
|
||||
private ChangeListener
|
||||
{
|
||||
DSPDemo (AudioSource& input)
|
||||
: inputSource (&input)
|
||||
|
|
@ -327,10 +331,10 @@ struct DSPDemo : public AudioSource,
|
|||
|
||||
//==============================================================================
|
||||
template <class DemoType>
|
||||
class AudioFileReaderComponent : public Component,
|
||||
private TimeSliceThread,
|
||||
private Value::Listener,
|
||||
private ChangeListener
|
||||
class AudioFileReaderComponent final : public Component,
|
||||
private TimeSliceThread,
|
||||
private Value::Listener,
|
||||
private ChangeListener
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
|
|
@ -379,7 +383,7 @@ public:
|
|||
|
||||
r.removeFromTop (20);
|
||||
|
||||
if (parametersComponent.get() != nullptr)
|
||||
if (parametersComponent != nullptr)
|
||||
parametersComponent->setBounds (r.removeFromTop (parametersComponent->getHeightNeeded()).reduced (20, 0));
|
||||
}
|
||||
|
||||
|
|
@ -412,6 +416,7 @@ public:
|
|||
readerSource->setLooping (loopState.getValue());
|
||||
|
||||
init();
|
||||
resized();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -442,7 +447,7 @@ public:
|
|||
transportSource.reset (new AudioTransportSource());
|
||||
transportSource->addChangeListener (this);
|
||||
|
||||
if (readerSource.get() != nullptr)
|
||||
if (readerSource != nullptr)
|
||||
{
|
||||
if (auto* device = audioDeviceManager.getCurrentAudioDevice())
|
||||
{
|
||||
|
|
@ -461,12 +466,20 @@ public:
|
|||
|
||||
audioSourcePlayer.setSource (currentDemo.get());
|
||||
|
||||
initParameters();
|
||||
auto& parameters = currentDemo->getParameters();
|
||||
|
||||
parametersComponent.reset();
|
||||
|
||||
if (! parameters.empty())
|
||||
{
|
||||
parametersComponent = std::make_unique<DemoParametersComponent> (parameters);
|
||||
addAndMakeVisible (parametersComponent.get());
|
||||
}
|
||||
}
|
||||
|
||||
void play()
|
||||
{
|
||||
if (readerSource.get() == nullptr)
|
||||
if (readerSource == nullptr)
|
||||
return;
|
||||
|
||||
if (transportSource->getCurrentPosition() >= transportSource->getLengthInSeconds()
|
||||
|
|
@ -479,32 +492,17 @@ public:
|
|||
|
||||
void setLooping (bool shouldLoop)
|
||||
{
|
||||
if (readerSource.get() != nullptr)
|
||||
if (readerSource != nullptr)
|
||||
readerSource->setLooping (shouldLoop);
|
||||
}
|
||||
|
||||
AudioThumbnailComponent& getThumbnailComponent() { return header.thumbnailComp; }
|
||||
|
||||
void initParameters()
|
||||
{
|
||||
auto& parameters = currentDemo->getParameters();
|
||||
|
||||
parametersComponent.reset();
|
||||
|
||||
if (parameters.size() > 0)
|
||||
{
|
||||
parametersComponent.reset (new DemoParametersComponent (parameters));
|
||||
addAndMakeVisible (parametersComponent.get());
|
||||
}
|
||||
|
||||
resized();
|
||||
}
|
||||
|
||||
private:
|
||||
//==============================================================================
|
||||
class AudioPlayerHeader : public Component,
|
||||
private ChangeListener,
|
||||
private Value::Listener
|
||||
class AudioPlayerHeader final : public Component,
|
||||
private ChangeListener,
|
||||
private Value::Listener
|
||||
{
|
||||
public:
|
||||
AudioPlayerHeader (AudioDeviceManager& adm,
|
||||
|
|
@ -596,13 +594,17 @@ private:
|
|||
const auto u = fc.getURLResult();
|
||||
|
||||
if (! audioFileReader.loadURL (u))
|
||||
NativeMessageBox::showAsync (MessageBoxOptions()
|
||||
.withIconType (MessageBoxIconType::WarningIcon)
|
||||
.withTitle ("Error loading file")
|
||||
.withMessage ("Unable to load audio file"),
|
||||
nullptr);
|
||||
{
|
||||
auto options = MessageBoxOptions().withIconType (MessageBoxIconType::WarningIcon)
|
||||
.withTitle ("Error loading file")
|
||||
.withMessage ("Unable to load audio file")
|
||||
.withButton ("OK");
|
||||
messageBox = NativeMessageBox::showScopedAsync (options, nullptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
thumbnailComp.setCurrentURL (u);
|
||||
}
|
||||
}
|
||||
|
||||
fileChooser = nullptr;
|
||||
|
|
@ -629,12 +631,13 @@ private:
|
|||
|
||||
AudioFileReaderComponent& audioFileReader;
|
||||
std::unique_ptr<FileChooser> fileChooser;
|
||||
ScopedMessageBox messageBox;
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
void valueChanged (Value& v) override
|
||||
{
|
||||
if (readerSource.get() != nullptr)
|
||||
if (readerSource != nullptr)
|
||||
readerSource->setLooping (v.getValue());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -82,11 +86,26 @@ inline File getExamplesDirectory() noexcept
|
|||
#endif
|
||||
}
|
||||
|
||||
inline std::unique_ptr<InputStream> createAssetInputStream (const char* resourcePath)
|
||||
enum class AssertAssetExists
|
||||
{
|
||||
no,
|
||||
yes
|
||||
};
|
||||
|
||||
inline std::unique_ptr<InputStream> createAssetInputStream (const char* resourcePath,
|
||||
[[maybe_unused]] AssertAssetExists assertExists = AssertAssetExists::yes)
|
||||
{
|
||||
#if JUCE_ANDROID
|
||||
ZipFile apkZip (File::getSpecialLocation (File::invokedExecutableFile));
|
||||
return std::unique_ptr<InputStream> (apkZip.createStreamForEntry (apkZip.getIndexOfFileName ("assets/" + String (resourcePath))));
|
||||
const auto fileIndex = apkZip.getIndexOfFileName ("assets/" + String (resourcePath));
|
||||
|
||||
if (fileIndex == -1)
|
||||
{
|
||||
jassert (assertExists == AssertAssetExists::no);
|
||||
return {};
|
||||
}
|
||||
|
||||
return std::unique_ptr<InputStream> (apkZip.createStreamForEntry (fileIndex));
|
||||
#else
|
||||
#if JUCE_IOS
|
||||
auto assetsDir = File::getSpecialLocation (File::currentExecutableFile)
|
||||
|
|
@ -102,7 +121,12 @@ inline std::unique_ptr<InputStream> createAssetInputStream (const char* resource
|
|||
#endif
|
||||
|
||||
auto resourceFile = assetsDir.getChildFile (resourcePath);
|
||||
jassert (resourceFile.existsAsFile());
|
||||
|
||||
if (! resourceFile.existsAsFile())
|
||||
{
|
||||
jassert (assertExists == AssertAssetExists::no);
|
||||
return {};
|
||||
}
|
||||
|
||||
return resourceFile.createInputStream();
|
||||
#endif
|
||||
|
|
@ -218,11 +242,7 @@ inline Path getJUCELogoPath()
|
|||
// 0.0 and 1.0 at a random speed
|
||||
struct BouncingNumber
|
||||
{
|
||||
BouncingNumber()
|
||||
: speed (0.0004 + 0.0007 * Random::getSystemRandom().nextDouble()),
|
||||
phase (Random::getSystemRandom().nextDouble())
|
||||
{
|
||||
}
|
||||
virtual ~BouncingNumber() = default;
|
||||
|
||||
float getValue() const
|
||||
{
|
||||
|
|
@ -231,10 +251,11 @@ struct BouncingNumber
|
|||
}
|
||||
|
||||
protected:
|
||||
double speed, phase;
|
||||
double speed = 0.0004 + 0.0007 * Random::getSystemRandom().nextDouble(),
|
||||
phase = Random::getSystemRandom().nextDouble();
|
||||
};
|
||||
|
||||
struct SlowerBouncingNumber : public BouncingNumber
|
||||
struct SlowerBouncingNumber final : public BouncingNumber
|
||||
{
|
||||
SlowerBouncingNumber()
|
||||
{
|
||||
|
|
@ -244,10 +265,8 @@ struct SlowerBouncingNumber : public BouncingNumber
|
|||
|
||||
inline std::unique_ptr<InputSource> makeInputSource (const URL& url)
|
||||
{
|
||||
#if JUCE_ANDROID
|
||||
if (auto doc = AndroidDocument::fromDocument (url))
|
||||
if (const auto doc = AndroidDocument::fromDocument (url))
|
||||
return std::make_unique<AndroidDocumentInputSource> (doc);
|
||||
#endif
|
||||
|
||||
#if ! JUCE_IOS
|
||||
if (url.isLocalFile())
|
||||
|
|
@ -257,4 +276,17 @@ inline std::unique_ptr<InputSource> makeInputSource (const URL& url)
|
|||
return std::make_unique<URLInputSource> (url);
|
||||
}
|
||||
|
||||
inline std::unique_ptr<OutputStream> makeOutputStream (const URL& url)
|
||||
{
|
||||
if (const auto doc = AndroidDocument::fromDocument (url))
|
||||
return doc.createOutputStream();
|
||||
|
||||
#if ! JUCE_IOS
|
||||
if (url.isLocalFile())
|
||||
return url.getLocalFile().createOutputStream();
|
||||
#endif
|
||||
|
||||
return url.createOutputStream();
|
||||
}
|
||||
|
||||
#endif // PIP_DEMO_UTILITIES_INCLUDED
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -33,6 +33,5 @@
|
|||
|
||||
"OSXFrameworks": "Cocoa IOKit",
|
||||
"iOSFrameworks": "Foundation",
|
||||
"LinuxLibs": "rt dl pthread",
|
||||
"mingwLibs": "uuid wsock32 wininet version ole32 ws2_32 oleaut32 imm32 comdlg32 shlwapi rpcrt4 winmm"
|
||||
"LinuxLibs": "rt dl pthread"
|
||||
}
|
||||
|
|
|
|||
39
examples/Assets/webviewplugin-gui-fallback.html
Normal file
39
examples/Assets/webviewplugin-gui-fallback.html
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>WebViewPluginDemo</title>
|
||||
<style type="text/css">
|
||||
body {
|
||||
background-color: white;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>WebViewPluginDemo</h1>
|
||||
<p>
|
||||
This document is a placeholder for the GUI component of the
|
||||
WebViewPluginDemo.
|
||||
</p>
|
||||
<p>
|
||||
To build the fully fledged user interface you need to install
|
||||
<a href="https://nodejs.org">node.js</a>
|
||||
</p>
|
||||
<p>
|
||||
Then navigate into the
|
||||
<code>examples/Plugins/WebViewPluginDemoGUI</code> directory inside your JUCE
|
||||
directory, and issue the following commands.
|
||||
</p>
|
||||
<pre>
|
||||
npm install
|
||||
npm run build
|
||||
npm run zip
|
||||
</pre
|
||||
>
|
||||
<p>
|
||||
This will build the full GUI package and place it in the
|
||||
<code>Assets</code> directory.
|
||||
</p>
|
||||
<p>After this, rebuild and restart this demo.</p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -50,7 +54,7 @@
|
|||
|
||||
|
||||
//==============================================================================
|
||||
class AudioAppDemo : public AudioAppComponent
|
||||
class AudioAppDemo final : public AudioAppComponent
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -52,8 +56,8 @@
|
|||
#include "../Assets/AudioLiveScrollingDisplay.h"
|
||||
|
||||
//==============================================================================
|
||||
class LatencyTester : public AudioIODeviceCallback,
|
||||
private Timer
|
||||
class LatencyTester final : public AudioIODeviceCallback,
|
||||
private Timer
|
||||
{
|
||||
public:
|
||||
LatencyTester (TextEditor& editorBox)
|
||||
|
|
@ -304,7 +308,7 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class AudioLatencyDemo : public Component
|
||||
class AudioLatencyDemo final : public Component
|
||||
{
|
||||
public:
|
||||
AudioLatencyDemo()
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -48,12 +52,12 @@
|
|||
|
||||
#include "../Assets/DemoUtilities.h"
|
||||
|
||||
class DemoThumbnailComp : public Component,
|
||||
public ChangeListener,
|
||||
public FileDragAndDropTarget,
|
||||
public ChangeBroadcaster,
|
||||
private ScrollBar::Listener,
|
||||
private Timer
|
||||
class DemoThumbnailComp final : public Component,
|
||||
public ChangeListener,
|
||||
public FileDragAndDropTarget,
|
||||
public ChangeBroadcaster,
|
||||
private ScrollBar::Listener,
|
||||
private Timer
|
||||
{
|
||||
public:
|
||||
DemoThumbnailComp (AudioFormatManager& formatManager,
|
||||
|
|
@ -188,7 +192,7 @@ public:
|
|||
if (canMoveTransport())
|
||||
setRange ({ newStart, newStart + visibleRange.getLength() });
|
||||
|
||||
if (wheel.deltaY != 0.0f)
|
||||
if (! approximatelyEqual (wheel.deltaY, 0.0f))
|
||||
zoomSlider.setValue (zoomSlider.getValue() - wheel.deltaY);
|
||||
|
||||
repaint();
|
||||
|
|
@ -251,19 +255,19 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class AudioPlaybackDemo : public Component,
|
||||
#if (JUCE_ANDROID || JUCE_IOS)
|
||||
private Button::Listener,
|
||||
#else
|
||||
private FileBrowserListener,
|
||||
#endif
|
||||
private ChangeListener
|
||||
class AudioPlaybackDemo final : public Component,
|
||||
#if (JUCE_ANDROID || JUCE_IOS)
|
||||
private Button::Listener,
|
||||
#else
|
||||
private FileBrowserListener,
|
||||
#endif
|
||||
private ChangeListener
|
||||
{
|
||||
public:
|
||||
AudioPlaybackDemo()
|
||||
{
|
||||
addAndMakeVisible (zoomLabel);
|
||||
zoomLabel.setFont (Font (15.00f, Font::plain));
|
||||
zoomLabel.setFont (FontOptions (15.00f, Font::plain));
|
||||
zoomLabel.setJustificationType (Justification::centredRight);
|
||||
zoomLabel.setEditable (false, false, false);
|
||||
zoomLabel.setColour (TextEditor::textColourId, Colours::black);
|
||||
|
|
@ -285,7 +289,7 @@ public:
|
|||
fileTreeComp.addListener (this);
|
||||
|
||||
addAndMakeVisible (explanation);
|
||||
explanation.setFont (Font (14.00f, Font::plain));
|
||||
explanation.setFont (FontOptions (14.00f, Font::plain));
|
||||
explanation.setJustificationType (Justification::bottomRight);
|
||||
explanation.setEditable (false, false, false);
|
||||
explanation.setColour (TextEditor::textColourId, Colours::black);
|
||||
|
|
@ -312,12 +316,7 @@ public:
|
|||
thread.startThread (Thread::Priority::normal);
|
||||
|
||||
#ifndef JUCE_DEMO_RUNNER
|
||||
RuntimePermissions::request (RuntimePermissions::recordAudio,
|
||||
[this] (bool granted)
|
||||
{
|
||||
int numInputChannels = granted ? 2 : 0;
|
||||
audioDeviceManager.initialise (numInputChannels, 2, nullptr, true, {}, nullptr);
|
||||
});
|
||||
audioDeviceManager.initialise (0, 2, nullptr, true, {}, nullptr);
|
||||
#endif
|
||||
|
||||
audioDeviceManager.addAudioCallback (&audioSourcePlayer);
|
||||
|
|
@ -415,9 +414,14 @@ private:
|
|||
//==============================================================================
|
||||
void showAudioResource (URL resource)
|
||||
{
|
||||
if (loadURLIntoTransport (resource))
|
||||
currentAudioFile = std::move (resource);
|
||||
if (! loadURLIntoTransport (resource))
|
||||
{
|
||||
// Failed to load the audio file!
|
||||
jassertfalse;
|
||||
return;
|
||||
}
|
||||
|
||||
currentAudioFile = std::move (resource);
|
||||
zoomSlider.setValue (0, dontSendNotification);
|
||||
thumbnail->setURL (currentAudioFile);
|
||||
}
|
||||
|
|
@ -492,7 +496,7 @@ private:
|
|||
|
||||
if (FileChooser::isPlatformDialogAvailable())
|
||||
{
|
||||
fileChooser = std::make_unique<FileChooser> ("Select an audio file...", File(), "*.wav;*.mp3;*.aif");
|
||||
fileChooser = std::make_unique<FileChooser> ("Select an audio file...", File(), "*.wav;*.flac;*.aif");
|
||||
|
||||
fileChooser->launchAsync (FileBrowserComponent::openMode | FileBrowserComponent::canSelectFiles,
|
||||
[this] (const FileChooser& fc) mutable
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -55,7 +59,7 @@
|
|||
/** A simple class that acts as an AudioIODeviceCallback and writes the
|
||||
incoming audio data to a WAV file.
|
||||
*/
|
||||
class AudioRecorder : public AudioIODeviceCallback
|
||||
class AudioRecorder final : public AudioIODeviceCallback
|
||||
{
|
||||
public:
|
||||
AudioRecorder (AudioThumbnail& thumbnailToUpdate)
|
||||
|
|
@ -170,8 +174,8 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class RecordingThumbnail : public Component,
|
||||
private ChangeListener
|
||||
class RecordingThumbnail final : public Component,
|
||||
private ChangeListener
|
||||
{
|
||||
public:
|
||||
RecordingThumbnail()
|
||||
|
|
@ -230,7 +234,7 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class AudioRecordingDemo : public Component
|
||||
class AudioRecordingDemo final : public Component
|
||||
{
|
||||
public:
|
||||
AudioRecordingDemo()
|
||||
|
|
@ -239,7 +243,7 @@ public:
|
|||
addAndMakeVisible (liveAudioScroller);
|
||||
|
||||
addAndMakeVisible (explanationLabel);
|
||||
explanationLabel.setFont (Font (15.0f, Font::plain));
|
||||
explanationLabel.setFont (FontOptions (15.0f, Font::plain));
|
||||
explanationLabel.setJustificationType (Justification::topLeft);
|
||||
explanationLabel.setEditable (false, false, false);
|
||||
explanationLabel.setColour (TextEditor::textColourId, Colours::black);
|
||||
|
|
@ -305,17 +309,14 @@ private:
|
|||
|
||||
LiveScrollingAudioDisplay liveAudioScroller;
|
||||
RecordingThumbnail recordingThumbnail;
|
||||
AudioRecorder recorder { recordingThumbnail.getAudioThumbnail() };
|
||||
AudioRecorder recorder { recordingThumbnail.getAudioThumbnail() };
|
||||
|
||||
Label explanationLabel { {}, "This page demonstrates how to record a wave file from the live audio input..\n\n"
|
||||
#if (JUCE_ANDROID || JUCE_IOS)
|
||||
"After you are done with your recording you can share with other apps."
|
||||
#else
|
||||
"Pressing record will start recording a file in your \"Documents\" folder."
|
||||
#endif
|
||||
};
|
||||
Label explanationLabel { {},
|
||||
"This page demonstrates how to record a wave file from the live audio input.\n\n"
|
||||
"After you are done with your recording you can choose where to save it." };
|
||||
TextButton recordButton { "Record" };
|
||||
File lastRecording;
|
||||
FileChooser chooser { "Output file...", File::getCurrentWorkingDirectory().getChildFile ("recording.wav"), "*.wav" };
|
||||
|
||||
void startRecording()
|
||||
{
|
||||
|
|
@ -350,28 +351,18 @@ private:
|
|||
{
|
||||
recorder.stop();
|
||||
|
||||
#if JUCE_CONTENT_SHARING
|
||||
SafePointer<AudioRecordingDemo> safeThis (this);
|
||||
File fileToShare = lastRecording;
|
||||
chooser.launchAsync ( FileBrowserComponent::saveMode
|
||||
| FileBrowserComponent::canSelectFiles
|
||||
| FileBrowserComponent::warnAboutOverwriting,
|
||||
[this] (const FileChooser& c)
|
||||
{
|
||||
if (FileInputStream inputStream (lastRecording); inputStream.openedOk())
|
||||
if (const auto outputStream = makeOutputStream (c.getURLResult()))
|
||||
outputStream->writeFromInputStream (inputStream, -1);
|
||||
|
||||
ContentSharer::getInstance()->shareFiles (Array<URL> ({URL (fileToShare)}),
|
||||
[safeThis, fileToShare] (bool success, const String& error)
|
||||
{
|
||||
if (fileToShare.existsAsFile())
|
||||
fileToShare.deleteFile();
|
||||
|
||||
if (! success && error.isNotEmpty())
|
||||
NativeMessageBox::showAsync (MessageBoxOptions()
|
||||
.withIconType (MessageBoxIconType::WarningIcon)
|
||||
.withTitle ("Sharing Error")
|
||||
.withMessage (error),
|
||||
nullptr);
|
||||
});
|
||||
#endif
|
||||
|
||||
lastRecording = File();
|
||||
recordButton.setButtonText ("Record");
|
||||
recordingThumbnail.setDisplayFullThumbnail (true);
|
||||
recordButton.setButtonText ("Record");
|
||||
recordingThumbnail.setDisplayFullThumbnail (true);
|
||||
});
|
||||
}
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioRecordingDemo)
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -51,8 +55,8 @@
|
|||
#include "../Assets/DemoUtilities.h"
|
||||
|
||||
//==============================================================================
|
||||
class AudioSettingsDemo : public Component,
|
||||
public ChangeListener
|
||||
class AudioSettingsDemo final : public Component,
|
||||
public ChangeListener
|
||||
{
|
||||
public:
|
||||
AudioSettingsDemo()
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -53,20 +57,16 @@
|
|||
|
||||
//==============================================================================
|
||||
/** Our demo synth sound is just a basic sine wave.. */
|
||||
struct SineWaveSound : public SynthesiserSound
|
||||
struct SineWaveSound final : public SynthesiserSound
|
||||
{
|
||||
SineWaveSound() {}
|
||||
|
||||
bool appliesToNote (int /*midiNoteNumber*/) override { return true; }
|
||||
bool appliesToChannel (int /*midiChannel*/) override { return true; }
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
/** Our demo synth voice just plays a sine wave.. */
|
||||
struct SineWaveVoice : public SynthesiserVoice
|
||||
struct SineWaveVoice final : public SynthesiserVoice
|
||||
{
|
||||
SineWaveVoice() {}
|
||||
|
||||
bool canPlaySound (SynthesiserSound* sound) override
|
||||
{
|
||||
return dynamic_cast<SineWaveSound*> (sound) != nullptr;
|
||||
|
|
@ -92,8 +92,8 @@ struct SineWaveVoice : public SynthesiserVoice
|
|||
// start a tail-off by setting this flag. The render callback will pick up on
|
||||
// this and do a fade out, calling clearCurrentNote() when it's finished.
|
||||
|
||||
if (tailOff == 0.0) // we only need to begin a tail-off if it's not already doing so - the
|
||||
tailOff = 1.0; // stopNote method could be called more than once.
|
||||
if (approximatelyEqual (tailOff, 0.0)) // we only need to begin a tail-off if it's not already doing so - the
|
||||
tailOff = 1.0; // stopNote method could be called more than once.
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -108,7 +108,7 @@ struct SineWaveVoice : public SynthesiserVoice
|
|||
|
||||
void renderNextBlock (AudioBuffer<float>& outputBuffer, int startSample, int numSamples) override
|
||||
{
|
||||
if (angleDelta != 0.0)
|
||||
if (! approximatelyEqual (angleDelta, 0.0))
|
||||
{
|
||||
if (tailOff > 0.0)
|
||||
{
|
||||
|
|
@ -157,7 +157,7 @@ private:
|
|||
|
||||
//==============================================================================
|
||||
// This is an audio source that streams the output of our demo synth.
|
||||
struct SynthAudioSource : public AudioSource
|
||||
struct SynthAudioSource final : public AudioSource
|
||||
{
|
||||
SynthAudioSource (MidiKeyboardState& keyState) : keyboardState (keyState)
|
||||
{
|
||||
|
|
@ -242,7 +242,52 @@ struct SynthAudioSource : public AudioSource
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class AudioSynthesiserDemo : public Component
|
||||
class Callback final : public AudioIODeviceCallback
|
||||
{
|
||||
public:
|
||||
Callback (AudioSourcePlayer& playerIn, LiveScrollingAudioDisplay& displayIn)
|
||||
: player (playerIn), display (displayIn) {}
|
||||
|
||||
void audioDeviceIOCallbackWithContext (const float* const* inputChannelData,
|
||||
int numInputChannels,
|
||||
float* const* outputChannelData,
|
||||
int numOutputChannels,
|
||||
int numSamples,
|
||||
const AudioIODeviceCallbackContext& context) override
|
||||
{
|
||||
player.audioDeviceIOCallbackWithContext (inputChannelData,
|
||||
numInputChannels,
|
||||
outputChannelData,
|
||||
numOutputChannels,
|
||||
numSamples,
|
||||
context);
|
||||
display.audioDeviceIOCallbackWithContext (outputChannelData,
|
||||
numOutputChannels,
|
||||
nullptr,
|
||||
0,
|
||||
numSamples,
|
||||
context);
|
||||
}
|
||||
|
||||
void audioDeviceAboutToStart (AudioIODevice* device) override
|
||||
{
|
||||
player.audioDeviceAboutToStart (device);
|
||||
display.audioDeviceAboutToStart (device);
|
||||
}
|
||||
|
||||
void audioDeviceStopped() override
|
||||
{
|
||||
player.audioDeviceStopped();
|
||||
display.audioDeviceStopped();
|
||||
}
|
||||
|
||||
private:
|
||||
AudioSourcePlayer& player;
|
||||
LiveScrollingAudioDisplay& display;
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class AudioSynthesiserDemo final : public Component
|
||||
{
|
||||
public:
|
||||
AudioSynthesiserDemo()
|
||||
|
|
@ -259,19 +304,13 @@ public:
|
|||
sampledButton.onClick = [this] { synthAudioSource.setUsingSampledSound(); };
|
||||
|
||||
addAndMakeVisible (liveAudioDisplayComp);
|
||||
audioDeviceManager.addAudioCallback (&liveAudioDisplayComp);
|
||||
audioSourcePlayer.setSource (&synthAudioSource);
|
||||
|
||||
#ifndef JUCE_DEMO_RUNNER
|
||||
RuntimePermissions::request (RuntimePermissions::recordAudio,
|
||||
[this] (bool granted)
|
||||
{
|
||||
int numInputChannels = granted ? 2 : 0;
|
||||
audioDeviceManager.initialise (numInputChannels, 2, nullptr, true, {}, nullptr);
|
||||
});
|
||||
audioDeviceManager.initialise (0, 2, nullptr, true, {}, nullptr);
|
||||
#endif
|
||||
|
||||
audioDeviceManager.addAudioCallback (&audioSourcePlayer);
|
||||
audioDeviceManager.addAudioCallback (&callback);
|
||||
audioDeviceManager.addMidiInputDeviceCallback ({}, &(synthAudioSource.midiCollector));
|
||||
|
||||
setOpaque (true);
|
||||
|
|
@ -282,8 +321,7 @@ public:
|
|||
{
|
||||
audioSourcePlayer.setSource (nullptr);
|
||||
audioDeviceManager.removeMidiInputDeviceCallback ({}, &(synthAudioSource.midiCollector));
|
||||
audioDeviceManager.removeAudioCallback (&audioSourcePlayer);
|
||||
audioDeviceManager.removeAudioCallback (&liveAudioDisplayComp);
|
||||
audioDeviceManager.removeAudioCallback (&callback);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -318,5 +356,7 @@ private:
|
|||
|
||||
LiveScrollingAudioDisplay liveAudioDisplayComp;
|
||||
|
||||
Callback callback { audioSourcePlayer, liveAudioDisplayComp };
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioSynthesiserDemo)
|
||||
};
|
||||
|
|
|
|||
663
examples/Audio/AudioWorkgroupDemo.h
Normal file
663
examples/Audio/AudioWorkgroupDemo.h
Normal file
|
|
@ -0,0 +1,663 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
/*******************************************************************************
|
||||
The block below describes the properties of this PIP. A PIP is a short snippet
|
||||
of code that can be read by the Projucer and used to generate a JUCE project.
|
||||
|
||||
BEGIN_JUCE_PIP_METADATA
|
||||
|
||||
name: AudioWorkgroupDemo
|
||||
version: 1.0.0
|
||||
vendor: JUCE
|
||||
website: http://juce.com
|
||||
description: Simple audio workgroup demo application.
|
||||
|
||||
dependencies: juce_audio_basics, juce_audio_devices, juce_audio_formats,
|
||||
juce_audio_processors, juce_audio_utils, juce_core,
|
||||
juce_data_structures, juce_events, juce_graphics,
|
||||
juce_gui_basics, juce_gui_extra
|
||||
exporters: xcode_mac, xcode_iphone
|
||||
|
||||
moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1
|
||||
|
||||
type: Component
|
||||
mainClass: AudioWorkgroupDemo
|
||||
|
||||
useLocalCopy: 1
|
||||
|
||||
END_JUCE_PIP_METADATA
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../Assets/DemoUtilities.h"
|
||||
#include "../Assets/AudioLiveScrollingDisplay.h"
|
||||
#include "../Assets/ADSRComponent.h"
|
||||
|
||||
constexpr auto NumWorkerThreads = 4;
|
||||
|
||||
//==============================================================================
|
||||
class ThreadBarrier : public ReferenceCountedObject
|
||||
{
|
||||
public:
|
||||
using Ptr = ReferenceCountedObjectPtr<ThreadBarrier>;
|
||||
|
||||
static Ptr make (int numThreadsToSynchronise)
|
||||
{
|
||||
return { new ThreadBarrier { numThreadsToSynchronise } };
|
||||
}
|
||||
|
||||
void arriveAndWait()
|
||||
{
|
||||
std::unique_lock lk { mutex };
|
||||
|
||||
[[maybe_unused]] const auto c = ++blockCount;
|
||||
|
||||
// You've tried to synchronise too many threads!!
|
||||
jassert (c <= threadCount);
|
||||
|
||||
if (blockCount == threadCount)
|
||||
{
|
||||
blockCount = 0;
|
||||
cv.notify_all();
|
||||
return;
|
||||
}
|
||||
|
||||
cv.wait (lk, [this] { return blockCount == 0; });
|
||||
}
|
||||
|
||||
private:
|
||||
std::mutex mutex;
|
||||
std::condition_variable cv;
|
||||
int blockCount{};
|
||||
const int threadCount{};
|
||||
|
||||
explicit ThreadBarrier (int numThreadsToSynchronise)
|
||||
: threadCount (numThreadsToSynchronise) {}
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE (ThreadBarrier)
|
||||
JUCE_DECLARE_NON_MOVEABLE (ThreadBarrier)
|
||||
};
|
||||
|
||||
struct Voice
|
||||
{
|
||||
struct Oscillator
|
||||
{
|
||||
float getNextSample()
|
||||
{
|
||||
const auto s = (2.f * phase - 1.f);
|
||||
phase += delta;
|
||||
|
||||
if (phase >= 1.f)
|
||||
phase -= 1.f;
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
float delta = 0;
|
||||
float phase = 0;
|
||||
};
|
||||
|
||||
Voice (int numSamples, double newSampleRate)
|
||||
: sampleRate (newSampleRate),
|
||||
workBuffer (2, numSamples)
|
||||
{
|
||||
}
|
||||
|
||||
bool isActive() const { return adsr.isActive(); }
|
||||
|
||||
void startNote (int midiNoteNumber, float detuneAmount, ADSR::Parameters env)
|
||||
{
|
||||
constexpr float superSawDetuneValues[] = { -1.f, -0.8f, -0.6f, 0.f, 0.5f, 0.7f, 1.f };
|
||||
const auto freq = 440.f * std::pow (2.f, ((float) midiNoteNumber - 69.f) / 12.f);
|
||||
|
||||
for (size_t i = 0; i < 7; i++)
|
||||
{
|
||||
auto& osc = oscillators[i];
|
||||
|
||||
const auto detune = superSawDetuneValues[i] * detuneAmount;
|
||||
|
||||
osc.delta = (freq + detune) / (float) sampleRate;
|
||||
osc.phase = wobbleGenerator.nextFloat();
|
||||
}
|
||||
|
||||
currentNote = midiNoteNumber;
|
||||
|
||||
adsr.setParameters (env);
|
||||
adsr.setSampleRate (sampleRate);
|
||||
adsr.noteOn();
|
||||
}
|
||||
|
||||
void stopNote()
|
||||
{
|
||||
adsr.noteOff();
|
||||
}
|
||||
|
||||
void run()
|
||||
{
|
||||
workBuffer.clear();
|
||||
|
||||
constexpr auto oscillatorCount = 7;
|
||||
constexpr float superSawPanValues[] = { -1.f, -0.7f, -0.3f, 0.f, 0.3f, 0.7f, 1.f };
|
||||
|
||||
constexpr auto spread = 0.8f;
|
||||
constexpr auto mix = 1 / 7.f;
|
||||
|
||||
auto* l = workBuffer.getWritePointer (0);
|
||||
auto* r = workBuffer.getWritePointer (1);
|
||||
|
||||
for (int i = 0; i < workBuffer.getNumSamples(); i++)
|
||||
{
|
||||
const auto a = adsr.getNextSample();
|
||||
|
||||
float left = 0;
|
||||
float right = 0;
|
||||
|
||||
for (size_t o = 0; o < oscillatorCount; o++)
|
||||
{
|
||||
auto& osc = oscillators[o];
|
||||
const auto s = a * osc.getNextSample();
|
||||
|
||||
left += s * (1.f - (superSawPanValues[o] * spread));
|
||||
right += s * (1.f + (superSawPanValues[o] * spread));
|
||||
}
|
||||
|
||||
l[i] += left * mix;
|
||||
r[i] += right * mix;
|
||||
}
|
||||
|
||||
workBuffer.applyGain (0.25f);
|
||||
}
|
||||
|
||||
const AudioSampleBuffer& getWorkBuffer() const { return workBuffer; }
|
||||
|
||||
ADSR adsr;
|
||||
double sampleRate;
|
||||
std::array<Oscillator, 7> oscillators;
|
||||
int currentNote = 0;
|
||||
Random wobbleGenerator;
|
||||
|
||||
private:
|
||||
AudioSampleBuffer workBuffer;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE (Voice)
|
||||
JUCE_DECLARE_NON_MOVEABLE (Voice)
|
||||
};
|
||||
|
||||
struct AudioWorkerThreadOptions
|
||||
{
|
||||
int numChannels;
|
||||
int numSamples;
|
||||
double sampleRate;
|
||||
AudioWorkgroup workgroup;
|
||||
ThreadBarrier::Ptr completionBarrier;
|
||||
};
|
||||
|
||||
class AudioWorkerThread final : private Thread
|
||||
{
|
||||
public:
|
||||
using Ptr = std::unique_ptr<AudioWorkerThread>;
|
||||
using Options = AudioWorkerThreadOptions;
|
||||
|
||||
explicit AudioWorkerThread (const Options& workerOptions)
|
||||
: Thread ("AudioWorkerThread"),
|
||||
options (workerOptions)
|
||||
{
|
||||
jassert (options.completionBarrier != nullptr);
|
||||
|
||||
#if defined (JUCE_MAC)
|
||||
jassert (options.workgroup);
|
||||
#endif
|
||||
|
||||
startRealtimeThread (RealtimeOptions{}.withApproximateAudioProcessingTime (options.numSamples, options.sampleRate));
|
||||
}
|
||||
|
||||
~AudioWorkerThread() override { stop(); }
|
||||
|
||||
using Thread::notify;
|
||||
using Thread::signalThreadShouldExit;
|
||||
using Thread::isThreadRunning;
|
||||
|
||||
int getJobCount() const { return lastJobCount; }
|
||||
|
||||
int queueAudioJobs (Span<Voice*> jobs)
|
||||
{
|
||||
size_t spanIndex = 0;
|
||||
|
||||
const auto write = jobQueueFifo.write ((int) jobs.size());
|
||||
write.forEach ([&, jobs] (int dstIndex)
|
||||
{
|
||||
jobQueue[(size_t) dstIndex] = jobs[spanIndex++];
|
||||
});
|
||||
return write.blockSize1 + write.blockSize2;
|
||||
}
|
||||
|
||||
private:
|
||||
void stop()
|
||||
{
|
||||
signalThreadShouldExit();
|
||||
stopThread (-1);
|
||||
}
|
||||
|
||||
void run() override
|
||||
{
|
||||
WorkgroupToken token;
|
||||
|
||||
options.workgroup.join (token);
|
||||
|
||||
while (wait (-1) && ! threadShouldExit())
|
||||
{
|
||||
const auto numReady = jobQueueFifo.getNumReady();
|
||||
lastJobCount = numReady;
|
||||
|
||||
if (numReady > 0)
|
||||
{
|
||||
jobQueueFifo.read (jobQueueFifo.getNumReady())
|
||||
.forEach ([this] (int srcIndex)
|
||||
{
|
||||
jobQueue[(size_t) srcIndex]->run();
|
||||
});
|
||||
}
|
||||
|
||||
// Wait for all our threads to get to this point.
|
||||
options.completionBarrier->arriveAndWait();
|
||||
}
|
||||
}
|
||||
|
||||
static constexpr auto numJobs = 128;
|
||||
|
||||
Options options;
|
||||
std::array<Voice*, numJobs> jobQueue;
|
||||
AbstractFifo jobQueueFifo { numJobs };
|
||||
std::atomic<int> lastJobCount = 0;
|
||||
|
||||
private:
|
||||
JUCE_DECLARE_NON_COPYABLE (AudioWorkerThread)
|
||||
JUCE_DECLARE_NON_MOVEABLE (AudioWorkerThread)
|
||||
};
|
||||
|
||||
template <typename ValueType, typename LockType>
|
||||
struct SharedThreadValue
|
||||
{
|
||||
SharedThreadValue (LockType& lockRef, ValueType initialValue = {})
|
||||
: lock (lockRef),
|
||||
preSyncValue (initialValue),
|
||||
postSyncValue (initialValue)
|
||||
{
|
||||
}
|
||||
|
||||
void set (const ValueType& newValue)
|
||||
{
|
||||
const typename LockType::ScopedLockType sl { lock };
|
||||
preSyncValue = newValue;
|
||||
}
|
||||
|
||||
ValueType get() const
|
||||
{
|
||||
{
|
||||
const typename LockType::ScopedTryLockType sl { lock, true };
|
||||
|
||||
if (sl.isLocked())
|
||||
postSyncValue = preSyncValue;
|
||||
}
|
||||
|
||||
return postSyncValue;
|
||||
}
|
||||
|
||||
private:
|
||||
LockType& lock;
|
||||
ValueType preSyncValue{};
|
||||
mutable ValueType postSyncValue{};
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE (SharedThreadValue)
|
||||
JUCE_DECLARE_NON_MOVEABLE (SharedThreadValue)
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class SuperSynth
|
||||
{
|
||||
public:
|
||||
SuperSynth() = default;
|
||||
|
||||
void setEnvelope (ADSR::Parameters params)
|
||||
{
|
||||
envelope.set (params);
|
||||
}
|
||||
|
||||
void setThickness (float newThickness)
|
||||
{
|
||||
thickness.set (newThickness);
|
||||
}
|
||||
|
||||
void prepareToPlay (int numSamples, double sampleRate)
|
||||
{
|
||||
activeVoices.reserve (128);
|
||||
|
||||
for (auto& voice : voices)
|
||||
voice.reset (new Voice { numSamples, sampleRate });
|
||||
}
|
||||
|
||||
void process (ThreadBarrier::Ptr barrier, Span<AudioWorkerThread*> workers,
|
||||
AudioSampleBuffer& buffer, MidiBuffer& midiBuffer)
|
||||
{
|
||||
const auto blockThickness = thickness.get();
|
||||
const auto blockEnvelope = envelope.get();
|
||||
|
||||
// We're not trying to be sample accurate.. handle the on/off events in a single block.
|
||||
for (auto event : midiBuffer)
|
||||
{
|
||||
const auto message = event.getMessage();
|
||||
|
||||
if (message.isNoteOn())
|
||||
{
|
||||
for (auto& voice : voices)
|
||||
{
|
||||
if (! voice->isActive())
|
||||
{
|
||||
voice->startNote (message.getNoteNumber(), blockThickness, blockEnvelope);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (message.isNoteOff())
|
||||
{
|
||||
for (auto& voice : voices)
|
||||
{
|
||||
if (voice->currentNote == message.getNoteNumber())
|
||||
voice->stopNote();
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Queue up all active voices
|
||||
for (auto& voice : voices)
|
||||
if (voice->isActive())
|
||||
activeVoices.push_back (voice.get());
|
||||
|
||||
constexpr auto jobsPerThread = 1;
|
||||
|
||||
// Try and split the voices evenly just for demonstration purposes.
|
||||
// You could also do some of the work on this thread instead of waiting.
|
||||
for (int i = 0; i < (int) activeVoices.size();)
|
||||
{
|
||||
for (auto worker : workers)
|
||||
{
|
||||
if (i >= (int) activeVoices.size())
|
||||
break;
|
||||
|
||||
const auto jobCount = jmin (jobsPerThread, (int) activeVoices.size() - i);
|
||||
i += worker->queueAudioJobs ({ activeVoices.data() + i, (size_t) jobCount });
|
||||
}
|
||||
}
|
||||
|
||||
// kick off the work.
|
||||
for (auto& worker : workers)
|
||||
worker->notify();
|
||||
|
||||
// Wait for our jobs to complete.
|
||||
barrier->arriveAndWait();
|
||||
|
||||
// mix the jobs into the main audio thread buffer.
|
||||
for (auto* voice : activeVoices)
|
||||
{
|
||||
buffer.addFrom (0, 0, voice->getWorkBuffer(), 0, 0, buffer.getNumSamples());
|
||||
buffer.addFrom (1, 0, voice->getWorkBuffer(), 1, 0, buffer.getNumSamples());
|
||||
}
|
||||
|
||||
// Abuse std::vector not reallocating on clear.
|
||||
activeVoices.clear();
|
||||
}
|
||||
|
||||
private:
|
||||
std::array<std::unique_ptr<Voice>, 128> voices;
|
||||
std::vector<Voice*> activeVoices;
|
||||
|
||||
template <typename T>
|
||||
using ThreadValue = SharedThreadValue<T, SpinLock>;
|
||||
|
||||
SpinLock paramLock;
|
||||
ThreadValue<ADSR::Parameters> envelope { paramLock, { 0.f, 0.3f, 1.f, 0.3f } };
|
||||
ThreadValue<float> thickness { paramLock, 1.f };
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE (SuperSynth)
|
||||
JUCE_DECLARE_NON_MOVEABLE (SuperSynth)
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class AudioWorkgroupDemo : public Component,
|
||||
private Timer,
|
||||
private AudioSource,
|
||||
private MidiInputCallback
|
||||
{
|
||||
public:
|
||||
AudioWorkgroupDemo()
|
||||
{
|
||||
addAndMakeVisible (keyboardComponent);
|
||||
addAndMakeVisible (liveAudioDisplayComp);
|
||||
addAndMakeVisible (envelopeComponent);
|
||||
addAndMakeVisible (keyboardComponent);
|
||||
addAndMakeVisible (thicknessSlider);
|
||||
addAndMakeVisible (voiceCountLabel);
|
||||
|
||||
std::generate (threadLabels.begin(), threadLabels.end(), &std::make_unique<Label>);
|
||||
|
||||
for (auto& label : threadLabels)
|
||||
{
|
||||
addAndMakeVisible (*label);
|
||||
label->setEditable (false);
|
||||
}
|
||||
|
||||
thicknessSlider.textFromValueFunction = [] (double) { return "Phatness"; };
|
||||
thicknessSlider.onValueChange = [this] { synthesizer.setThickness ((float) thicknessSlider.getValue()); };
|
||||
thicknessSlider.setRange (0.5, 15, 0.1);
|
||||
thicknessSlider.setValue (7, dontSendNotification);
|
||||
thicknessSlider.setTextBoxIsEditable (false);
|
||||
|
||||
envelopeComponent.onChange = [this] { synthesizer.setEnvelope (envelopeComponent.getParameters()); };
|
||||
|
||||
voiceCountLabel.setEditable (false);
|
||||
|
||||
audioSourcePlayer.setSource (this);
|
||||
|
||||
#ifndef JUCE_DEMO_RUNNER
|
||||
audioDeviceManager.initialise (0, 2, nullptr, true, {}, nullptr);
|
||||
#endif
|
||||
|
||||
audioDeviceManager.addAudioCallback (&audioSourcePlayer);
|
||||
audioDeviceManager.addMidiInputDeviceCallback ({}, this);
|
||||
|
||||
setOpaque (true);
|
||||
setSize (640, 480);
|
||||
startTimerHz (10);
|
||||
}
|
||||
|
||||
~AudioWorkgroupDemo() override
|
||||
{
|
||||
audioSourcePlayer.setSource (nullptr);
|
||||
audioDeviceManager.removeMidiInputDeviceCallback ({}, this);
|
||||
audioDeviceManager.removeAudioCallback (&audioSourcePlayer);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void paint (Graphics& g) override
|
||||
{
|
||||
g.fillAll (getUIColourIfAvailable (LookAndFeel_V4::ColourScheme::UIColour::windowBackground));
|
||||
}
|
||||
|
||||
void resized() override
|
||||
{
|
||||
auto bounds = getLocalBounds();
|
||||
|
||||
liveAudioDisplayComp.setBounds (bounds.removeFromTop (60));
|
||||
keyboardComponent.setBounds (bounds.removeFromBottom (150));
|
||||
envelopeComponent.setBounds (bounds.removeFromBottom (150));
|
||||
|
||||
thicknessSlider.setBounds (bounds.removeFromTop (30));
|
||||
voiceCountLabel.setBounds (bounds.removeFromTop (30));
|
||||
|
||||
const auto maxLabelWidth = bounds.getWidth() / 4;
|
||||
auto currentBounds = bounds.removeFromLeft (maxLabelWidth);
|
||||
|
||||
for (auto& l : threadLabels)
|
||||
{
|
||||
if (currentBounds.getHeight() < 30)
|
||||
currentBounds = bounds.removeFromLeft (maxLabelWidth);
|
||||
|
||||
l->setBounds (currentBounds.removeFromTop (30));
|
||||
}
|
||||
}
|
||||
|
||||
void timerCallback() override
|
||||
{
|
||||
String text;
|
||||
int totalVoices = 0;
|
||||
|
||||
{
|
||||
const SpinLock::ScopedLockType sl { threadArrayUiLock };
|
||||
|
||||
for (size_t i = 0; i < NumWorkerThreads; i++)
|
||||
{
|
||||
const auto& thread = workerThreads[i];
|
||||
auto& label = threadLabels[i];
|
||||
|
||||
if (thread != nullptr)
|
||||
{
|
||||
const auto count = thread->getJobCount();
|
||||
|
||||
text = "Thread ";
|
||||
text << (int) i << ": " << count << " jobs";
|
||||
label->setText (text, dontSendNotification);
|
||||
totalVoices += count;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
text = {};
|
||||
text << "Voices: " << totalVoices << " (" << totalVoices * 7 << " oscs)";
|
||||
voiceCountLabel.setText (text, dontSendNotification);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
void prepareToPlay (int samplesPerBlockExpected, double sampleRate) override
|
||||
{
|
||||
completionBarrier = ThreadBarrier::make ((int) NumWorkerThreads + 1);
|
||||
|
||||
const auto numChannels = 2;
|
||||
const auto workerOptions = AudioWorkerThreadOptions
|
||||
{
|
||||
numChannels,
|
||||
samplesPerBlockExpected,
|
||||
sampleRate,
|
||||
audioDeviceManager.getDeviceAudioWorkgroup(),
|
||||
completionBarrier,
|
||||
};
|
||||
|
||||
{
|
||||
const SpinLock::ScopedLockType sl { threadArrayUiLock };
|
||||
|
||||
for (auto& worker : workerThreads)
|
||||
worker.reset (new AudioWorkerThread { workerOptions });
|
||||
}
|
||||
|
||||
synthesizer.prepareToPlay (samplesPerBlockExpected, sampleRate);
|
||||
liveAudioDisplayComp.audioDeviceAboutToStart (audioDeviceManager.getCurrentAudioDevice());
|
||||
waveformBuffer.setSize (1, samplesPerBlockExpected);
|
||||
}
|
||||
|
||||
void releaseResources() override
|
||||
{
|
||||
{
|
||||
const SpinLock::ScopedLockType sl { threadArrayUiLock };
|
||||
|
||||
for (auto& thread : workerThreads)
|
||||
thread.reset();
|
||||
}
|
||||
|
||||
liveAudioDisplayComp.audioDeviceStopped();
|
||||
}
|
||||
|
||||
void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill) override
|
||||
{
|
||||
midiBuffer.clear();
|
||||
|
||||
bufferToFill.clearActiveBufferRegion();
|
||||
keyboardState.processNextMidiBuffer (midiBuffer, bufferToFill.startSample, bufferToFill.numSamples, true);
|
||||
|
||||
AudioWorkerThread* workers[NumWorkerThreads]{};
|
||||
std::transform (workerThreads.begin(), workerThreads.end(), workers,
|
||||
[] (auto& worker) { return worker.get(); });
|
||||
|
||||
synthesizer.process (completionBarrier, Span { workers }, *bufferToFill.buffer, midiBuffer);
|
||||
|
||||
// LiveAudioScrollingDisplay applies a 10x gain to the input signal, we need to reduce the gain on our signal.
|
||||
waveformBuffer.copyFrom (0, 0,
|
||||
bufferToFill.buffer->getReadPointer (0),
|
||||
bufferToFill.numSamples,
|
||||
1 / 10.f);
|
||||
liveAudioDisplayComp.audioDeviceIOCallbackWithContext (waveformBuffer.getArrayOfReadPointers(), 1,
|
||||
nullptr, 0, bufferToFill.numSamples, {});
|
||||
}
|
||||
|
||||
void handleIncomingMidiMessage (MidiInput*, const MidiMessage& message) override
|
||||
{
|
||||
if (message.isNoteOn())
|
||||
keyboardState.noteOn (message.getChannel(), message.getNoteNumber(), 1);
|
||||
else if (message.isNoteOff())
|
||||
keyboardState.noteOff (message.getChannel(), message.getNoteNumber(), 1);
|
||||
}
|
||||
|
||||
private:
|
||||
// if this PIP is running inside the demo runner, we'll use the shared device manager instead
|
||||
#ifndef JUCE_DEMO_RUNNER
|
||||
AudioDeviceManager audioDeviceManager;
|
||||
#else
|
||||
AudioDeviceManager& audioDeviceManager { getSharedAudioDeviceManager (0, 2) };
|
||||
#endif
|
||||
|
||||
MidiBuffer midiBuffer;
|
||||
MidiKeyboardState keyboardState;
|
||||
AudioSourcePlayer audioSourcePlayer;
|
||||
SuperSynth synthesizer;
|
||||
AudioSampleBuffer waveformBuffer;
|
||||
|
||||
MidiKeyboardComponent keyboardComponent { keyboardState, MidiKeyboardComponent::horizontalKeyboard };
|
||||
LiveScrollingAudioDisplay liveAudioDisplayComp;
|
||||
ADSRComponent envelopeComponent;
|
||||
Slider thicknessSlider { Slider::SliderStyle::LinearHorizontal, Slider::TextBoxLeft };
|
||||
Label voiceCountLabel;
|
||||
|
||||
SpinLock threadArrayUiLock;
|
||||
ThreadBarrier::Ptr completionBarrier;
|
||||
|
||||
std::array<std::unique_ptr<Label>, NumWorkerThreads> threadLabels;
|
||||
std::array<AudioWorkerThread::Ptr, NumWorkerThreads> workerThreads;
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioWorkgroupDemo)
|
||||
};
|
||||
|
|
@ -1,24 +1,22 @@
|
|||
# ==============================================================================
|
||||
#
|
||||
# This file is part of the JUCE library.
|
||||
# Copyright (c) 2022 - Raw Material Software Limited
|
||||
#
|
||||
# JUCE is an open source library subject to commercial or open-source
|
||||
# licensing.
|
||||
#
|
||||
# By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
# Agreement and JUCE Privacy Policy.
|
||||
#
|
||||
# End User License Agreement: www.juce.com/juce-7-licence
|
||||
# Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
#
|
||||
# Or: You may also use this code under the terms of the GPL v3 (see
|
||||
# www.gnu.org/licenses).
|
||||
#
|
||||
# JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
# EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
# DISCLAIMED.
|
||||
#
|
||||
# ==============================================================================
|
||||
|
||||
_juce_add_pips()
|
||||
# ==============================================================================
|
||||
#
|
||||
# This file is part of the JUCE framework examples.
|
||||
# Copyright (c) Raw Material Software Limited
|
||||
#
|
||||
# The code included in this file is provided under the terms of the ISC license
|
||||
# http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
# to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
# without fee is hereby granted provided that the above copyright notice and
|
||||
# this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# ==============================================================================
|
||||
|
||||
_juce_add_pips()
|
||||
|
|
|
|||
5033
examples/Audio/CapabilityInquiryDemo.h
Normal file
5033
examples/Audio/CapabilityInquiryDemo.h
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -95,7 +99,7 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class MPESetupComponent : public Component
|
||||
class MPESetupComponent final : public Component
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
|
|
@ -279,13 +283,14 @@ private:
|
|||
return legacyStartChannel.getText().getIntValue() <= legacyEndChannel.getText().getIntValue();
|
||||
}
|
||||
|
||||
void handleInvalidLegacyModeParameters() const
|
||||
void handleInvalidLegacyModeParameters()
|
||||
{
|
||||
AlertWindow::showMessageBoxAsync (MessageBoxIconType::WarningIcon,
|
||||
"Invalid legacy mode channel layout",
|
||||
"Cannot set legacy mode start/end channel:\n"
|
||||
"The end channel must not be less than the start channel!",
|
||||
"Got it");
|
||||
auto options = MessageBoxOptions::makeOptionsOk (MessageBoxIconType::WarningIcon,
|
||||
"Invalid legacy mode channel layout",
|
||||
"Cannot set legacy mode start/end channel:\n"
|
||||
"The end channel must not be less than the start channel!",
|
||||
"Got it");
|
||||
messageBox = AlertWindow::showScopedAsync (options, nullptr);
|
||||
}
|
||||
|
||||
Range<int> getLegacyModeChannelRange() const
|
||||
|
|
@ -338,6 +343,8 @@ private:
|
|||
ComboBox numberOfVoices;
|
||||
Label numberOfVoicesLabel { {}, "Number of synth voices"};
|
||||
|
||||
ScopedMessageBox messageBox;
|
||||
|
||||
static constexpr int defaultMemberChannels = 15,
|
||||
defaultMasterPitchbendRange = 2,
|
||||
defaultNotePitchbendRange = 48;
|
||||
|
|
@ -346,8 +353,8 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class ZoneLayoutComponent : public Component,
|
||||
private MPEInstrument::Listener
|
||||
class ZoneLayoutComponent final : public Component,
|
||||
private MPEInstrument::Listener
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
|
|
@ -463,7 +470,7 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class MPEDemoSynthVoice : public MPESynthesiserVoice
|
||||
class MPEDemoSynthVoice final : public MPESynthesiserVoice
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
|
|
@ -496,8 +503,8 @@ public:
|
|||
// start a tail-off by setting this flag. The render callback will pick up on
|
||||
// this and do a fade out, calling clearCurrentNote() when it's finished.
|
||||
|
||||
if (tailOff == 0.0) // we only need to begin a tail-off if it's not already doing so - the
|
||||
// stopNote method could be called more than once.
|
||||
if (approximatelyEqual (tailOff, 0.0)) // we only need to begin a tail-off if it's not already doing so - the
|
||||
// stopNote method could be called more than once.
|
||||
tailOff = 1.0;
|
||||
}
|
||||
else
|
||||
|
|
@ -527,7 +534,7 @@ public:
|
|||
|
||||
void setCurrentSampleRate (double newRate) override
|
||||
{
|
||||
if (currentSampleRate != newRate)
|
||||
if (! approximatelyEqual (currentSampleRate, newRate))
|
||||
{
|
||||
noteStopped (false);
|
||||
currentSampleRate = newRate;
|
||||
|
|
@ -543,7 +550,7 @@ public:
|
|||
int startSample,
|
||||
int numSamples) override
|
||||
{
|
||||
if (phaseDelta != 0.0)
|
||||
if (! approximatelyEqual (phaseDelta, 0.0))
|
||||
{
|
||||
if (tailOff > 0.0)
|
||||
{
|
||||
|
|
@ -619,10 +626,10 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class MPEDemo : public Component,
|
||||
private AudioIODeviceCallback,
|
||||
private MidiInputCallback,
|
||||
private MPEInstrument::Listener
|
||||
class MPEDemo final : public Component,
|
||||
private AudioIODeviceCallback,
|
||||
private MidiInputCallback,
|
||||
private MPEInstrument::Listener
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -50,24 +54,32 @@
|
|||
|
||||
|
||||
//==============================================================================
|
||||
struct MidiDeviceListEntry : ReferenceCountedObject
|
||||
struct MidiDeviceListEntry final : ReferenceCountedObject
|
||||
{
|
||||
MidiDeviceListEntry (MidiDeviceInfo info) : deviceInfo (info) {}
|
||||
explicit MidiDeviceListEntry (MidiDeviceInfo info) : deviceInfo (info) {}
|
||||
|
||||
MidiDeviceInfo deviceInfo;
|
||||
std::unique_ptr<MidiInput> inDevice;
|
||||
std::unique_ptr<MidiOutput> outDevice;
|
||||
|
||||
using Ptr = ReferenceCountedObjectPtr<MidiDeviceListEntry>;
|
||||
|
||||
void stopAndReset()
|
||||
{
|
||||
if (inDevice != nullptr)
|
||||
inDevice->stop();
|
||||
|
||||
inDevice .reset();
|
||||
outDevice.reset();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//==============================================================================
|
||||
class MidiDemo : public Component,
|
||||
private Timer,
|
||||
private MidiKeyboardState::Listener,
|
||||
private MidiInputCallback,
|
||||
private AsyncUpdater
|
||||
class MidiDemo final : public Component,
|
||||
private MidiKeyboardState::Listener,
|
||||
private MidiInputCallback,
|
||||
private AsyncUpdater
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
|
|
@ -113,12 +125,11 @@ public:
|
|||
|
||||
setSize (732, 520);
|
||||
|
||||
startTimer (500);
|
||||
updateDeviceLists();
|
||||
}
|
||||
|
||||
~MidiDemo() override
|
||||
{
|
||||
stopTimer();
|
||||
midiInputs .clear();
|
||||
midiOutputs.clear();
|
||||
keyboardState.removeListener (this);
|
||||
|
|
@ -128,12 +139,6 @@ public:
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
void timerCallback() override
|
||||
{
|
||||
updateDeviceList (true);
|
||||
updateDeviceList (false);
|
||||
}
|
||||
|
||||
void handleNoteOn (MidiKeyboardState*, int midiChannel, int midiNoteNumber, float velocity) override
|
||||
{
|
||||
MidiMessage m (MidiMessage::noteOn (midiChannel, midiNoteNumber, velocity));
|
||||
|
|
@ -211,17 +216,8 @@ public:
|
|||
|
||||
void closeDevice (bool isInput, int index)
|
||||
{
|
||||
if (isInput)
|
||||
{
|
||||
jassert (midiInputs[index]->inDevice.get() != nullptr);
|
||||
midiInputs[index]->inDevice->stop();
|
||||
midiInputs[index]->inDevice.reset();
|
||||
}
|
||||
else
|
||||
{
|
||||
jassert (midiOutputs[index]->outDevice.get() != nullptr);
|
||||
midiOutputs[index]->outDevice.reset();
|
||||
}
|
||||
auto& list = isInput ? midiInputs : midiOutputs;
|
||||
list[index]->stopAndReset();
|
||||
}
|
||||
|
||||
int getNumMidiInputs() const noexcept
|
||||
|
|
@ -241,8 +237,8 @@ public:
|
|||
|
||||
private:
|
||||
//==============================================================================
|
||||
struct MidiDeviceListBox : private ListBoxModel,
|
||||
public ListBox
|
||||
struct MidiDeviceListBox final : private ListBoxModel,
|
||||
public ListBox
|
||||
{
|
||||
MidiDeviceListBox (const String& name,
|
||||
MidiDemo& contentComponent,
|
||||
|
|
@ -319,7 +315,7 @@ private:
|
|||
{
|
||||
SparseSet<int> selectedRows;
|
||||
for (auto i = 0; i < midiDevices.size(); ++i)
|
||||
if (midiDevices[i]->inDevice.get() != nullptr || midiDevices[i]->outDevice.get() != nullptr)
|
||||
if (midiDevices[i]->inDevice != nullptr || midiDevices[i]->outDevice != nullptr)
|
||||
selectedRows.addRange (Range<int> (i, i + 1));
|
||||
|
||||
lastSelectedItems = selectedRows;
|
||||
|
|
@ -364,7 +360,7 @@ private:
|
|||
void sendToOutputs (const MidiMessage& msg)
|
||||
{
|
||||
for (auto midiOutput : midiOutputs)
|
||||
if (midiOutput->outDevice.get() != nullptr)
|
||||
if (midiOutput->outDevice != nullptr)
|
||||
midiOutput->outDevice->sendMessageNow (msg);
|
||||
}
|
||||
|
||||
|
|
@ -423,7 +419,6 @@ private:
|
|||
|
||||
if (hasDeviceListChanged (availableDevices, isInputDeviceList))
|
||||
{
|
||||
|
||||
ReferenceCountedArray<MidiDeviceListEntry>& midiDevices
|
||||
= isInputDeviceList ? midiInputs : midiOutputs;
|
||||
|
||||
|
|
@ -454,7 +449,7 @@ private:
|
|||
//==============================================================================
|
||||
void addLabelAndSetStyle (Label& label)
|
||||
{
|
||||
label.setFont (Font (15.00f, Font::plain));
|
||||
label.setFont (FontOptions (15.00f, Font::plain));
|
||||
label.setJustificationType (Justification::centredLeft);
|
||||
label.setEditable (false, false, false);
|
||||
label.setColour (TextEditor::textColourId, Colours::black);
|
||||
|
|
@ -463,6 +458,12 @@ private:
|
|||
addAndMakeVisible (label);
|
||||
}
|
||||
|
||||
void updateDeviceLists()
|
||||
{
|
||||
for (const auto isInput : { true, false })
|
||||
updateDeviceList (isInput);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
Label midiInputLabel { "Midi Input Label", "MIDI Input:" };
|
||||
Label midiOutputLabel { "Midi Output Label", "MIDI Output:" };
|
||||
|
|
@ -473,12 +474,17 @@ private:
|
|||
TextEditor midiMonitor { "MIDI Monitor" };
|
||||
TextButton pairButton { "MIDI Bluetooth devices..." };
|
||||
|
||||
std::unique_ptr<MidiDeviceListBox> midiInputSelector, midiOutputSelector;
|
||||
ReferenceCountedArray<MidiDeviceListEntry> midiInputs, midiOutputs;
|
||||
std::unique_ptr<MidiDeviceListBox> midiInputSelector, midiOutputSelector;
|
||||
|
||||
CriticalSection midiMonitorLock;
|
||||
Array<MidiMessage> incomingMessages;
|
||||
|
||||
MidiDeviceListConnection connection = MidiDeviceListConnection::make ([this]
|
||||
{
|
||||
updateDeviceLists();
|
||||
});
|
||||
|
||||
//==============================================================================
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MidiDemo)
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -172,8 +176,8 @@ private:
|
|||
This component represents a horizontal vibrating musical string of fixed height
|
||||
and variable length. The string can be excited by calling stringPlucked().
|
||||
*/
|
||||
class StringComponent : public Component,
|
||||
private Timer
|
||||
class StringComponent final : public Component,
|
||||
private Timer
|
||||
{
|
||||
public:
|
||||
StringComponent (int lengthInPixels, Colour stringColour)
|
||||
|
|
@ -249,7 +253,7 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class PluckedStringsDemo : public AudioAppComponent
|
||||
class PluckedStringsDemo final : public AudioAppComponent
|
||||
{
|
||||
public:
|
||||
PluckedStringsDemo()
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -50,8 +54,8 @@
|
|||
|
||||
|
||||
//==============================================================================
|
||||
class SimpleFFTDemo : public AudioAppComponent,
|
||||
private Timer
|
||||
class SimpleFFTDemo final : public AudioAppComponent,
|
||||
private Timer
|
||||
{
|
||||
public:
|
||||
SimpleFFTDemo() :
|
||||
|
|
@ -160,13 +164,15 @@ public:
|
|||
// show up the detail clearly
|
||||
auto maxLevel = FloatVectorOperations::findMinAndMax (fftData, fftSize / 2);
|
||||
|
||||
Image::BitmapData bitmap { spectrogramImage, rightHandEdge, 0, 1, imageHeight, Image::BitmapData::writeOnly };
|
||||
|
||||
for (auto y = 1; y < imageHeight; ++y)
|
||||
{
|
||||
auto skewedProportionY = 1.0f - std::exp (std::log ((float) y / (float) imageHeight) * 0.2f);
|
||||
auto fftDataIndex = jlimit (0, fftSize / 2, (int) (skewedProportionY * (int) fftSize / 2));
|
||||
auto level = jmap (fftData[fftDataIndex], 0.0f, jmax (maxLevel.getEnd(), 1e-5f), 0.0f, 1.0f);
|
||||
|
||||
spectrogramImage.setPixelAt (rightHandEdge, y, Colour::fromHSV (level, 1.0f, level, 1.0f));
|
||||
bitmap.setPixelColour (0, y, Colour::fromHSV (level, 1.0f, level, 1.0f));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,111 +1,111 @@
|
|||
# Example Audio Plugin CMakeLists.txt
|
||||
|
||||
# To get started on a new plugin, copy this entire folder (containing this file and C++ sources) to
|
||||
# a convenient location, and then start making modifications.
|
||||
|
||||
# The first line of any CMake project should be a call to `cmake_minimum_required`, which checks
|
||||
# that the installed CMake will be able to understand the following CMakeLists, and ensures that
|
||||
# CMake's behaviour is compatible with the named version. This is a standard CMake command, so more
|
||||
# information can be found in the CMake docs.
|
||||
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
|
||||
# The top-level CMakeLists.txt file for a project must contain a literal, direct call to the
|
||||
# `project()` command. `project()` sets up some helpful variables that describe source/binary
|
||||
# directories, and the current project version. This is a standard CMake command.
|
||||
|
||||
project(AUDIO_PLUGIN_EXAMPLE VERSION 0.0.1)
|
||||
|
||||
# If you've installed JUCE somehow (via a package manager, or directly using the CMake install
|
||||
# target), you'll need to tell this project that it depends on the installed copy of JUCE. If you've
|
||||
# included JUCE directly in your source tree (perhaps as a submodule), you'll need to tell CMake to
|
||||
# include that subdirectory as part of the build.
|
||||
|
||||
# find_package(JUCE CONFIG REQUIRED) # If you've installed JUCE to your system
|
||||
# or
|
||||
# add_subdirectory(JUCE) # If you've put JUCE in a subdirectory called JUCE
|
||||
|
||||
# If you are building a VST2 or AAX plugin, CMake needs to be told where to find these SDKs on your
|
||||
# system. This setup should be done before calling `juce_add_plugin`.
|
||||
|
||||
# juce_set_vst2_sdk_path(...)
|
||||
# juce_set_aax_sdk_path(...)
|
||||
|
||||
# `juce_add_plugin` adds a static library target with the name passed as the first argument
|
||||
# (AudioPluginExample here). This target is a normal CMake target, but has a lot of extra properties set
|
||||
# up by default. As well as this shared code static library, this function adds targets for each of
|
||||
# the formats specified by the FORMATS arguments. This function accepts many optional arguments.
|
||||
# Check the readme at `docs/CMake API.md` in the JUCE repo for the full list.
|
||||
|
||||
juce_add_plugin(AudioPluginExample
|
||||
# VERSION ... # Set this if the plugin version is different to the project version
|
||||
# ICON_BIG ... # ICON_* arguments specify a path to an image file to use as an icon for the Standalone
|
||||
# ICON_SMALL ...
|
||||
# COMPANY_NAME ... # Specify the name of the plugin's author
|
||||
# IS_SYNTH TRUE/FALSE # Is this a synth or an effect?
|
||||
# NEEDS_MIDI_INPUT TRUE/FALSE # Does the plugin need midi input?
|
||||
# NEEDS_MIDI_OUTPUT TRUE/FALSE # Does the plugin need midi output?
|
||||
# IS_MIDI_EFFECT TRUE/FALSE # Is this plugin a MIDI effect?
|
||||
# EDITOR_WANTS_KEYBOARD_FOCUS TRUE/FALSE # Does the editor need keyboard focus?
|
||||
# COPY_PLUGIN_AFTER_BUILD TRUE/FALSE # Should the plugin be installed to a default location after building?
|
||||
PLUGIN_MANUFACTURER_CODE Juce # A four-character manufacturer id with at least one upper-case character
|
||||
PLUGIN_CODE Dem0 # A unique four-character plugin id with exactly one upper-case character
|
||||
# GarageBand 10.3 requires the first letter to be upper-case, and the remaining letters to be lower-case
|
||||
FORMATS AU VST3 Standalone # The formats to build. Other valid formats are: AAX Unity VST AU AUv3
|
||||
PRODUCT_NAME "Audio Plugin Example") # The name of the final executable, which can differ from the target name
|
||||
|
||||
# `juce_generate_juce_header` will create a JuceHeader.h for a given target, which will be generated
|
||||
# into your build tree. This should be included with `#include <JuceHeader.h>`. The include path for
|
||||
# this header will be automatically added to the target. The main function of the JuceHeader is to
|
||||
# include all your JUCE module headers; if you're happy to include module headers directly, you
|
||||
# probably don't need to call this.
|
||||
|
||||
# juce_generate_juce_header(AudioPluginExample)
|
||||
|
||||
# `target_sources` adds source files to a target. We pass the target that needs the sources as the
|
||||
# first argument, then a visibility parameter for the sources which should normally be PRIVATE.
|
||||
# Finally, we supply a list of source files that will be built into the target. This is a standard
|
||||
# CMake command.
|
||||
|
||||
target_sources(AudioPluginExample
|
||||
PRIVATE
|
||||
PluginEditor.cpp
|
||||
PluginProcessor.cpp)
|
||||
|
||||
# `target_compile_definitions` adds some preprocessor definitions to our target. In a Projucer
|
||||
# project, these might be passed in the 'Preprocessor Definitions' field. JUCE modules also make use
|
||||
# of compile definitions to switch certain features on/off, so if there's a particular feature you
|
||||
# need that's not on by default, check the module header for the correct flag to set here. These
|
||||
# definitions will be visible both to your code, and also the JUCE module code, so for new
|
||||
# definitions, pick unique names that are unlikely to collide! This is a standard CMake command.
|
||||
|
||||
target_compile_definitions(AudioPluginExample
|
||||
PUBLIC
|
||||
# JUCE_WEB_BROWSER and JUCE_USE_CURL would be on by default, but you might not need them.
|
||||
JUCE_WEB_BROWSER=0 # If you remove this, add `NEEDS_WEB_BROWSER TRUE` to the `juce_add_plugin` call
|
||||
JUCE_USE_CURL=0 # If you remove this, add `NEEDS_CURL TRUE` to the `juce_add_plugin` call
|
||||
JUCE_VST3_CAN_REPLACE_VST2=0)
|
||||
|
||||
# If your target needs extra binary assets, you can add them here. The first argument is the name of
|
||||
# a new static library target that will include all the binary resources. There is an optional
|
||||
# `NAMESPACE` argument that can specify the namespace of the generated binary data class. Finally,
|
||||
# the SOURCES argument should be followed by a list of source files that should be built into the
|
||||
# static library. These source files can be of any kind (wav data, images, fonts, icons etc.).
|
||||
# Conversion to binary-data will happen when your target is built.
|
||||
|
||||
# juce_add_binary_data(AudioPluginData SOURCES ...)
|
||||
|
||||
# `target_link_libraries` links libraries and JUCE modules to other libraries or executables. Here,
|
||||
# we're linking our executable target to the `juce::juce_audio_utils` module. Inter-module
|
||||
# dependencies are resolved automatically, so `juce_core`, `juce_events` and so on will also be
|
||||
# linked automatically. If we'd generated a binary data target above, we would need to link to it
|
||||
# here too. This is a standard CMake command.
|
||||
|
||||
target_link_libraries(AudioPluginExample
|
||||
PRIVATE
|
||||
# AudioPluginData # If we'd created a binary data target, we'd link to it here
|
||||
juce::juce_audio_utils
|
||||
PUBLIC
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_lto_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
# Example Audio Plugin CMakeLists.txt
|
||||
|
||||
# To get started on a new plugin, copy this entire folder (containing this file and C++ sources) to
|
||||
# a convenient location, and then start making modifications.
|
||||
|
||||
# The first line of any CMake project should be a call to `cmake_minimum_required`, which checks
|
||||
# that the installed CMake will be able to understand the following CMakeLists, and ensures that
|
||||
# CMake's behaviour is compatible with the named version. This is a standard CMake command, so more
|
||||
# information can be found in the CMake docs.
|
||||
|
||||
cmake_minimum_required(VERSION 3.22)
|
||||
|
||||
# The top-level CMakeLists.txt file for a project must contain a literal, direct call to the
|
||||
# `project()` command. `project()` sets up some helpful variables that describe source/binary
|
||||
# directories, and the current project version. This is a standard CMake command.
|
||||
|
||||
project(AUDIO_PLUGIN_EXAMPLE VERSION 0.0.1)
|
||||
|
||||
# If you've installed JUCE somehow (via a package manager, or directly using the CMake install
|
||||
# target), you'll need to tell this project that it depends on the installed copy of JUCE. If you've
|
||||
# included JUCE directly in your source tree (perhaps as a submodule), you'll need to tell CMake to
|
||||
# include that subdirectory as part of the build.
|
||||
|
||||
# find_package(JUCE CONFIG REQUIRED) # If you've installed JUCE to your system
|
||||
# or
|
||||
# add_subdirectory(JUCE) # If you've put JUCE in a subdirectory called JUCE
|
||||
|
||||
# If you are building a VST2 or AAX plugin, CMake needs to be told where to find these SDKs on your
|
||||
# system. This setup should be done before calling `juce_add_plugin`.
|
||||
|
||||
# juce_set_vst2_sdk_path(...)
|
||||
# juce_set_aax_sdk_path(...)
|
||||
|
||||
# `juce_add_plugin` adds a static library target with the name passed as the first argument
|
||||
# (AudioPluginExample here). This target is a normal CMake target, but has a lot of extra properties set
|
||||
# up by default. As well as this shared code static library, this function adds targets for each of
|
||||
# the formats specified by the FORMATS arguments. This function accepts many optional arguments.
|
||||
# Check the readme at `docs/CMake API.md` in the JUCE repo for the full list.
|
||||
|
||||
juce_add_plugin(AudioPluginExample
|
||||
# VERSION ... # Set this if the plugin version is different to the project version
|
||||
# ICON_BIG ... # ICON_* arguments specify a path to an image file to use as an icon for the Standalone
|
||||
# ICON_SMALL ...
|
||||
# COMPANY_NAME ... # Specify the name of the plugin's author
|
||||
# IS_SYNTH TRUE/FALSE # Is this a synth or an effect?
|
||||
# NEEDS_MIDI_INPUT TRUE/FALSE # Does the plugin need midi input?
|
||||
# NEEDS_MIDI_OUTPUT TRUE/FALSE # Does the plugin need midi output?
|
||||
# IS_MIDI_EFFECT TRUE/FALSE # Is this plugin a MIDI effect?
|
||||
# EDITOR_WANTS_KEYBOARD_FOCUS TRUE/FALSE # Does the editor need keyboard focus?
|
||||
# COPY_PLUGIN_AFTER_BUILD TRUE/FALSE # Should the plugin be installed to a default location after building?
|
||||
PLUGIN_MANUFACTURER_CODE Juce # A four-character manufacturer id with at least one upper-case character
|
||||
PLUGIN_CODE Dem0 # A unique four-character plugin id with exactly one upper-case character
|
||||
# GarageBand 10.3 requires the first letter to be upper-case, and the remaining letters to be lower-case
|
||||
FORMATS AU VST3 Standalone # The formats to build. Other valid formats are: AAX Unity VST AU AUv3
|
||||
PRODUCT_NAME "Audio Plugin Example") # The name of the final executable, which can differ from the target name
|
||||
|
||||
# `juce_generate_juce_header` will create a JuceHeader.h for a given target, which will be generated
|
||||
# into your build tree. This should be included with `#include <JuceHeader.h>`. The include path for
|
||||
# this header will be automatically added to the target. The main function of the JuceHeader is to
|
||||
# include all your JUCE module headers; if you're happy to include module headers directly, you
|
||||
# probably don't need to call this.
|
||||
|
||||
# juce_generate_juce_header(AudioPluginExample)
|
||||
|
||||
# `target_sources` adds source files to a target. We pass the target that needs the sources as the
|
||||
# first argument, then a visibility parameter for the sources which should normally be PRIVATE.
|
||||
# Finally, we supply a list of source files that will be built into the target. This is a standard
|
||||
# CMake command.
|
||||
|
||||
target_sources(AudioPluginExample
|
||||
PRIVATE
|
||||
PluginEditor.cpp
|
||||
PluginProcessor.cpp)
|
||||
|
||||
# `target_compile_definitions` adds some preprocessor definitions to our target. In a Projucer
|
||||
# project, these might be passed in the 'Preprocessor Definitions' field. JUCE modules also make use
|
||||
# of compile definitions to switch certain features on/off, so if there's a particular feature you
|
||||
# need that's not on by default, check the module header for the correct flag to set here. These
|
||||
# definitions will be visible both to your code, and also the JUCE module code, so for new
|
||||
# definitions, pick unique names that are unlikely to collide! This is a standard CMake command.
|
||||
|
||||
target_compile_definitions(AudioPluginExample
|
||||
PUBLIC
|
||||
# JUCE_WEB_BROWSER and JUCE_USE_CURL would be on by default, but you might not need them.
|
||||
JUCE_WEB_BROWSER=0 # If you remove this, add `NEEDS_WEB_BROWSER TRUE` to the `juce_add_plugin` call
|
||||
JUCE_USE_CURL=0 # If you remove this, add `NEEDS_CURL TRUE` to the `juce_add_plugin` call
|
||||
JUCE_VST3_CAN_REPLACE_VST2=0)
|
||||
|
||||
# If your target needs extra binary assets, you can add them here. The first argument is the name of
|
||||
# a new static library target that will include all the binary resources. There is an optional
|
||||
# `NAMESPACE` argument that can specify the namespace of the generated binary data class. Finally,
|
||||
# the SOURCES argument should be followed by a list of source files that should be built into the
|
||||
# static library. These source files can be of any kind (wav data, images, fonts, icons etc.).
|
||||
# Conversion to binary-data will happen when your target is built.
|
||||
|
||||
# juce_add_binary_data(AudioPluginData SOURCES ...)
|
||||
|
||||
# `target_link_libraries` links libraries and JUCE modules to other libraries or executables. Here,
|
||||
# we're linking our executable target to the `juce::juce_audio_utils` module. Inter-module
|
||||
# dependencies are resolved automatically, so `juce_core`, `juce_events` and so on will also be
|
||||
# linked automatically. If we'd generated a binary data target above, we would need to link to it
|
||||
# here too. This is a standard CMake command.
|
||||
|
||||
target_link_libraries(AudioPluginExample
|
||||
PRIVATE
|
||||
# AudioPluginData # If we'd created a binary data target, we'd link to it here
|
||||
juce::juce_audio_utils
|
||||
PUBLIC
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_lto_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
#include "PluginProcessor.h"
|
||||
|
||||
//==============================================================================
|
||||
class AudioPluginAudioProcessorEditor : public juce::AudioProcessorEditor
|
||||
class AudioPluginAudioProcessorEditor final : public juce::AudioProcessorEditor
|
||||
{
|
||||
public:
|
||||
explicit AudioPluginAudioProcessorEditor (AudioPluginAudioProcessor&);
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
#include <juce_audio_processors/juce_audio_processors.h>
|
||||
|
||||
//==============================================================================
|
||||
class AudioPluginAudioProcessor : public juce::AudioProcessor
|
||||
class AudioPluginAudioProcessor final : public juce::AudioProcessor
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -1,26 +1,24 @@
|
|||
# ==============================================================================
|
||||
#
|
||||
# This file is part of the JUCE library.
|
||||
# Copyright (c) 2022 - Raw Material Software Limited
|
||||
#
|
||||
# JUCE is an open source library subject to commercial or open-source
|
||||
# licensing.
|
||||
#
|
||||
# By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
# Agreement and JUCE Privacy Policy.
|
||||
#
|
||||
# End User License Agreement: www.juce.com/juce-7-licence
|
||||
# Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
#
|
||||
# Or: You may also use this code under the terms of the GPL v3 (see
|
||||
# www.gnu.org/licenses).
|
||||
#
|
||||
# JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
# EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
# DISCLAIMED.
|
||||
#
|
||||
# ==============================================================================
|
||||
|
||||
add_subdirectory(AudioPlugin)
|
||||
add_subdirectory(ConsoleApp)
|
||||
add_subdirectory(GuiApp)
|
||||
# ==============================================================================
|
||||
#
|
||||
# This file is part of the JUCE framework examples.
|
||||
# Copyright (c) Raw Material Software Limited
|
||||
#
|
||||
# The code included in this file is provided under the terms of the ISC license
|
||||
# http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
# to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
# without fee is hereby granted provided that the above copyright notice and
|
||||
# this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# ==============================================================================
|
||||
|
||||
add_subdirectory(AudioPlugin)
|
||||
add_subdirectory(ConsoleApp)
|
||||
add_subdirectory(GuiApp)
|
||||
|
|
|
|||
|
|
@ -1,88 +1,88 @@
|
|||
# Example Console App CMakeLists.txt
|
||||
|
||||
# To get started on a new console app, copy this entire folder (containing this file and C++
|
||||
# sources) to a convenient location, and then start making modifications. For other examples of
|
||||
# CMakeLists for console apps, check `extras/BinaryBuilder` and `extras/UnitTestRunner` in the JUCE
|
||||
# repo.
|
||||
|
||||
# The first line of any CMake project should be a call to `cmake_minimum_required`, which checks
|
||||
# that the installed CMake will be able to understand the following CMakeLists, and ensures that
|
||||
# CMake's behaviour is compatible with the named version. This is a standard CMake command, so more
|
||||
# information can be found in the CMake docs.
|
||||
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
|
||||
# The top-level CMakeLists.txt file for a project must contain a literal, direct call to the
|
||||
# `project()` command. `project()` sets up some helpful variables that describe source/binary
|
||||
# directories, and the current project version. This is a standard CMake command.
|
||||
|
||||
project(CONSOLE_APP_EXAMPLE VERSION 0.0.1)
|
||||
|
||||
# If you've installed JUCE somehow (via a package manager, or directly using the CMake install
|
||||
# target), you'll need to tell this project that it depends on the installed copy of JUCE. If you've
|
||||
# included JUCE directly in your source tree (perhaps as a submodule), you'll need to tell CMake to
|
||||
# include that subdirectory as part of the build.
|
||||
|
||||
# find_package(JUCE CONFIG REQUIRED) # If you've installed JUCE to your system
|
||||
# or
|
||||
# add_subdirectory(JUCE) # If you've put JUCE in a subdirectory called JUCE
|
||||
|
||||
# `juce_add_console_app` adds an executable target with the name passed as the first argument
|
||||
# (ConsoleAppExample here). This target is a normal CMake target, but has a lot of extra properties
|
||||
# set up by default. This function accepts many optional arguments. Check the readme at
|
||||
# `docs/CMake API.md` in the JUCE repo for the full list.
|
||||
|
||||
juce_add_console_app(ConsoleAppExample
|
||||
PRODUCT_NAME "Console App Example") # The name of the final executable, which can differ from the target name
|
||||
|
||||
# `juce_generate_juce_header` will create a JuceHeader.h for a given target, which will be generated
|
||||
# into the build tree. This header should be included with `#include <JuceHeader.h>`. The include
|
||||
# path for this header will be automatically added to the target. The main function of the
|
||||
# JuceHeader is to include all the JUCE module headers for a particular target; if you're happy to
|
||||
# include module headers directly, you probably don't need to call this.
|
||||
|
||||
# juce_generate_juce_header(ConsoleAppExample)
|
||||
|
||||
# `target_sources` adds source files to a target. We pass the target that needs the sources as the
|
||||
# first argument, then a visibility parameter for the sources which should normally be PRIVATE.
|
||||
# Finally, we supply a list of source files that will be built into the target. This is a standard
|
||||
# CMake command.
|
||||
|
||||
target_sources(ConsoleAppExample
|
||||
PRIVATE
|
||||
Main.cpp)
|
||||
|
||||
# `target_compile_definitions` adds some preprocessor definitions to our target. In a Projucer
|
||||
# project, these might be passed in the 'Preprocessor Definitions' field. JUCE modules also make use
|
||||
# of compile definitions to switch certain features on/off, so if there's a particular feature you
|
||||
# need that's not on by default, check the module header for the correct flag to set here. These
|
||||
# definitions will be visible both to your code, and also the JUCE module code, so for new
|
||||
# definitions, pick unique names that are unlikely to collide! This is a standard CMake command.
|
||||
|
||||
target_compile_definitions(ConsoleAppExample
|
||||
PRIVATE
|
||||
# JUCE_WEB_BROWSER and JUCE_USE_CURL would be on by default, but you might not need them.
|
||||
JUCE_WEB_BROWSER=0 # If you remove this, add `NEEDS_WEB_BROWSER TRUE` to the `juce_add_console_app` call
|
||||
JUCE_USE_CURL=0) # If you remove this, add `NEEDS_CURL TRUE` to the `juce_add_console_app` call
|
||||
|
||||
# If the target needs extra binary assets, they can be added here. The first argument is the name of
|
||||
# a new static library target that will include all the binary resources. There is an optional
|
||||
# `NAMESPACE` argument that can specify the namespace of the generated binary data class. Finally,
|
||||
# the SOURCES argument should be followed by a list of source files that should be built into the
|
||||
# static library. These source files can be of any kind (wav data, images, fonts, icons etc.).
|
||||
# Conversion to binary-data will happen when the target is built.
|
||||
|
||||
# juce_add_binary_data(ConsoleAppData SOURCES ...)
|
||||
|
||||
# `target_link_libraries` links libraries and JUCE modules to other libraries or executables. Here,
|
||||
# we're linking our executable target to the `juce::juce_core` module. Inter-module dependencies are
|
||||
# resolved automatically. If you'd generated a binary data target above, you would need to link to
|
||||
# it here too. This is a standard CMake command.
|
||||
|
||||
target_link_libraries(ConsoleAppExample
|
||||
PRIVATE
|
||||
# ConsoleAppData # If you'd created a binary data target, you'd link to it here
|
||||
juce::juce_core
|
||||
PUBLIC
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
# Example Console App CMakeLists.txt
|
||||
|
||||
# To get started on a new console app, copy this entire folder (containing this file and C++
|
||||
# sources) to a convenient location, and then start making modifications. For other examples of
|
||||
# CMakeLists for console apps, check `extras/BinaryBuilder` and `extras/UnitTestRunner` in the JUCE
|
||||
# repo.
|
||||
|
||||
# The first line of any CMake project should be a call to `cmake_minimum_required`, which checks
|
||||
# that the installed CMake will be able to understand the following CMakeLists, and ensures that
|
||||
# CMake's behaviour is compatible with the named version. This is a standard CMake command, so more
|
||||
# information can be found in the CMake docs.
|
||||
|
||||
cmake_minimum_required(VERSION 3.22)
|
||||
|
||||
# The top-level CMakeLists.txt file for a project must contain a literal, direct call to the
|
||||
# `project()` command. `project()` sets up some helpful variables that describe source/binary
|
||||
# directories, and the current project version. This is a standard CMake command.
|
||||
|
||||
project(CONSOLE_APP_EXAMPLE VERSION 0.0.1)
|
||||
|
||||
# If you've installed JUCE somehow (via a package manager, or directly using the CMake install
|
||||
# target), you'll need to tell this project that it depends on the installed copy of JUCE. If you've
|
||||
# included JUCE directly in your source tree (perhaps as a submodule), you'll need to tell CMake to
|
||||
# include that subdirectory as part of the build.
|
||||
|
||||
# find_package(JUCE CONFIG REQUIRED) # If you've installed JUCE to your system
|
||||
# or
|
||||
# add_subdirectory(JUCE) # If you've put JUCE in a subdirectory called JUCE
|
||||
|
||||
# `juce_add_console_app` adds an executable target with the name passed as the first argument
|
||||
# (ConsoleAppExample here). This target is a normal CMake target, but has a lot of extra properties
|
||||
# set up by default. This function accepts many optional arguments. Check the readme at
|
||||
# `docs/CMake API.md` in the JUCE repo for the full list.
|
||||
|
||||
juce_add_console_app(ConsoleAppExample
|
||||
PRODUCT_NAME "Console App Example") # The name of the final executable, which can differ from the target name
|
||||
|
||||
# `juce_generate_juce_header` will create a JuceHeader.h for a given target, which will be generated
|
||||
# into the build tree. This header should be included with `#include <JuceHeader.h>`. The include
|
||||
# path for this header will be automatically added to the target. The main function of the
|
||||
# JuceHeader is to include all the JUCE module headers for a particular target; if you're happy to
|
||||
# include module headers directly, you probably don't need to call this.
|
||||
|
||||
# juce_generate_juce_header(ConsoleAppExample)
|
||||
|
||||
# `target_sources` adds source files to a target. We pass the target that needs the sources as the
|
||||
# first argument, then a visibility parameter for the sources which should normally be PRIVATE.
|
||||
# Finally, we supply a list of source files that will be built into the target. This is a standard
|
||||
# CMake command.
|
||||
|
||||
target_sources(ConsoleAppExample
|
||||
PRIVATE
|
||||
Main.cpp)
|
||||
|
||||
# `target_compile_definitions` adds some preprocessor definitions to our target. In a Projucer
|
||||
# project, these might be passed in the 'Preprocessor Definitions' field. JUCE modules also make use
|
||||
# of compile definitions to switch certain features on/off, so if there's a particular feature you
|
||||
# need that's not on by default, check the module header for the correct flag to set here. These
|
||||
# definitions will be visible both to your code, and also the JUCE module code, so for new
|
||||
# definitions, pick unique names that are unlikely to collide! This is a standard CMake command.
|
||||
|
||||
target_compile_definitions(ConsoleAppExample
|
||||
PRIVATE
|
||||
# JUCE_WEB_BROWSER and JUCE_USE_CURL would be on by default, but you might not need them.
|
||||
JUCE_WEB_BROWSER=0 # If you remove this, add `NEEDS_WEB_BROWSER TRUE` to the `juce_add_console_app` call
|
||||
JUCE_USE_CURL=0) # If you remove this, add `NEEDS_CURL TRUE` to the `juce_add_console_app` call
|
||||
|
||||
# If the target needs extra binary assets, they can be added here. The first argument is the name of
|
||||
# a new static library target that will include all the binary resources. There is an optional
|
||||
# `NAMESPACE` argument that can specify the namespace of the generated binary data class. Finally,
|
||||
# the SOURCES argument should be followed by a list of source files that should be built into the
|
||||
# static library. These source files can be of any kind (wav data, images, fonts, icons etc.).
|
||||
# Conversion to binary-data will happen when the target is built.
|
||||
|
||||
# juce_add_binary_data(ConsoleAppData SOURCES ...)
|
||||
|
||||
# `target_link_libraries` links libraries and JUCE modules to other libraries or executables. Here,
|
||||
# we're linking our executable target to the `juce::juce_core` module. Inter-module dependencies are
|
||||
# resolved automatically. If you'd generated a binary data target above, you would need to link to
|
||||
# it here too. This is a standard CMake command.
|
||||
|
||||
target_link_libraries(ConsoleAppExample
|
||||
PRIVATE
|
||||
# ConsoleAppData # If you'd created a binary data target, you'd link to it here
|
||||
juce::juce_core
|
||||
PUBLIC
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
|
|
|
|||
|
|
@ -1,102 +1,102 @@
|
|||
# Example GUI App CMakeLists.txt
|
||||
|
||||
# To get started on a new GUI app, copy this entire folder (containing this file and C++ sources) to
|
||||
# a convenient location, and then start making modifications. For other examples of CMakeLists for
|
||||
# GUI apps, check `extras/Projucer` and `examples/DemoRunner` in the JUCE repo.
|
||||
|
||||
# The first line of any CMake project should be a call to `cmake_minimum_required`, which checks
|
||||
# that the installed CMake will be able to understand the following CMakeLists, and ensures that
|
||||
# CMake's behaviour is compatible with the named version. This is a standard CMake command, so more
|
||||
# information can be found in the CMake docs.
|
||||
|
||||
cmake_minimum_required(VERSION 3.15)
|
||||
|
||||
# The top-level CMakeLists.txt file for a project must contain a literal, direct call to the
|
||||
# `project()` command. `project()` sets up some helpful variables that describe source/binary
|
||||
# directories, and the current project version. This is a standard CMake command.
|
||||
|
||||
project(GUI_APP_EXAMPLE VERSION 0.0.1)
|
||||
|
||||
# If you've installed JUCE somehow (via a package manager, or directly using the CMake install
|
||||
# target), you'll need to tell this project that it depends on the installed copy of JUCE. If you've
|
||||
# included JUCE directly in your source tree (perhaps as a submodule), you'll need to tell CMake to
|
||||
# include that subdirectory as part of the build.
|
||||
|
||||
# find_package(JUCE CONFIG REQUIRED) # If you've installed JUCE to your system
|
||||
# or
|
||||
# add_subdirectory(JUCE) # If you've put JUCE in a subdirectory called JUCE
|
||||
|
||||
# If your app depends the VST2 SDK, perhaps to host VST2 plugins, CMake needs to be told where
|
||||
# to find the SDK on your system. This setup should be done before calling `juce_add_gui_app`.
|
||||
|
||||
# juce_set_vst2_sdk_path(...)
|
||||
|
||||
# `juce_add_gui_app` adds an executable target with the name passed as the first argument
|
||||
# (GuiAppExample here). This target is a normal CMake target, but has a lot of extra properties set
|
||||
# up by default. This function accepts many optional arguments. Check the readme at
|
||||
# `docs/CMake API.md` in the JUCE repo for the full list.
|
||||
|
||||
juce_add_gui_app(GuiAppExample
|
||||
# VERSION ... # Set this if the app version is different to the project version
|
||||
# ICON_BIG ... # ICON_* arguments specify a path to an image file to use as an icon
|
||||
# ICON_SMALL ...
|
||||
# DOCUMENT_EXTENSIONS ... # Specify file extensions that should be associated with this app
|
||||
# COMPANY_NAME ... # Specify the name of the app's author
|
||||
PRODUCT_NAME "Gui App Example") # The name of the final executable, which can differ from the target name
|
||||
|
||||
# `juce_generate_juce_header` will create a JuceHeader.h for a given target, which will be generated
|
||||
# into your build tree. This should be included with `#include <JuceHeader.h>`. The include path for
|
||||
# this header will be automatically added to the target. The main function of the JuceHeader is to
|
||||
# include all your JUCE module headers; if you're happy to include module headers directly, you
|
||||
# probably don't need to call this.
|
||||
|
||||
# juce_generate_juce_header(GuiAppExample)
|
||||
|
||||
# `target_sources` adds source files to a target. We pass the target that needs the sources as the
|
||||
# first argument, then a visibility parameter for the sources which should normally be PRIVATE.
|
||||
# Finally, we supply a list of source files that will be built into the target. This is a standard
|
||||
# CMake command.
|
||||
|
||||
target_sources(GuiAppExample
|
||||
PRIVATE
|
||||
Main.cpp
|
||||
MainComponent.cpp)
|
||||
|
||||
# `target_compile_definitions` adds some preprocessor definitions to our target. In a Projucer
|
||||
# project, these might be passed in the 'Preprocessor Definitions' field. JUCE modules also make use
|
||||
# of compile definitions to switch certain features on/off, so if there's a particular feature you
|
||||
# need that's not on by default, check the module header for the correct flag to set here. These
|
||||
# definitions will be visible both to your code, and also the JUCE module code, so for new
|
||||
# definitions, pick unique names that are unlikely to collide! This is a standard CMake command.
|
||||
|
||||
target_compile_definitions(GuiAppExample
|
||||
PRIVATE
|
||||
# JUCE_WEB_BROWSER and JUCE_USE_CURL would be on by default, but you might not need them.
|
||||
JUCE_WEB_BROWSER=0 # If you remove this, add `NEEDS_WEB_BROWSER TRUE` to the `juce_add_gui_app` call
|
||||
JUCE_USE_CURL=0 # If you remove this, add `NEEDS_CURL TRUE` to the `juce_add_gui_app` call
|
||||
JUCE_APPLICATION_NAME_STRING="$<TARGET_PROPERTY:GuiAppExample,JUCE_PRODUCT_NAME>"
|
||||
JUCE_APPLICATION_VERSION_STRING="$<TARGET_PROPERTY:GuiAppExample,JUCE_VERSION>")
|
||||
|
||||
# If your target needs extra binary assets, you can add them here. The first argument is the name of
|
||||
# a new static library target that will include all the binary resources. There is an optional
|
||||
# `NAMESPACE` argument that can specify the namespace of the generated binary data class. Finally,
|
||||
# the SOURCES argument should be followed by a list of source files that should be built into the
|
||||
# static library. These source files can be of any kind (wav data, images, fonts, icons etc.).
|
||||
# Conversion to binary-data will happen when your target is built.
|
||||
|
||||
# juce_add_binary_data(GuiAppData SOURCES ...)
|
||||
|
||||
# `target_link_libraries` links libraries and JUCE modules to other libraries or executables. Here,
|
||||
# we're linking our executable target to the `juce::juce_gui_extra` module. Inter-module
|
||||
# dependencies are resolved automatically, so `juce_core`, `juce_events` and so on will also be
|
||||
# linked automatically. If we'd generated a binary data target above, we would need to link to it
|
||||
# here too. This is a standard CMake command.
|
||||
|
||||
target_link_libraries(GuiAppExample
|
||||
PRIVATE
|
||||
# GuiAppData # If we'd created a binary data target, we'd link to it here
|
||||
juce::juce_gui_extra
|
||||
PUBLIC
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_lto_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
# Example GUI App CMakeLists.txt
|
||||
|
||||
# To get started on a new GUI app, copy this entire folder (containing this file and C++ sources) to
|
||||
# a convenient location, and then start making modifications. For other examples of CMakeLists for
|
||||
# GUI apps, check `extras/Projucer` and `examples/DemoRunner` in the JUCE repo.
|
||||
|
||||
# The first line of any CMake project should be a call to `cmake_minimum_required`, which checks
|
||||
# that the installed CMake will be able to understand the following CMakeLists, and ensures that
|
||||
# CMake's behaviour is compatible with the named version. This is a standard CMake command, so more
|
||||
# information can be found in the CMake docs.
|
||||
|
||||
cmake_minimum_required(VERSION 3.22)
|
||||
|
||||
# The top-level CMakeLists.txt file for a project must contain a literal, direct call to the
|
||||
# `project()` command. `project()` sets up some helpful variables that describe source/binary
|
||||
# directories, and the current project version. This is a standard CMake command.
|
||||
|
||||
project(GUI_APP_EXAMPLE VERSION 0.0.1)
|
||||
|
||||
# If you've installed JUCE somehow (via a package manager, or directly using the CMake install
|
||||
# target), you'll need to tell this project that it depends on the installed copy of JUCE. If you've
|
||||
# included JUCE directly in your source tree (perhaps as a submodule), you'll need to tell CMake to
|
||||
# include that subdirectory as part of the build.
|
||||
|
||||
# find_package(JUCE CONFIG REQUIRED) # If you've installed JUCE to your system
|
||||
# or
|
||||
# add_subdirectory(JUCE) # If you've put JUCE in a subdirectory called JUCE
|
||||
|
||||
# If your app depends the VST2 SDK, perhaps to host VST2 plugins, CMake needs to be told where
|
||||
# to find the SDK on your system. This setup should be done before calling `juce_add_gui_app`.
|
||||
|
||||
# juce_set_vst2_sdk_path(...)
|
||||
|
||||
# `juce_add_gui_app` adds an executable target with the name passed as the first argument
|
||||
# (GuiAppExample here). This target is a normal CMake target, but has a lot of extra properties set
|
||||
# up by default. This function accepts many optional arguments. Check the readme at
|
||||
# `docs/CMake API.md` in the JUCE repo for the full list.
|
||||
|
||||
juce_add_gui_app(GuiAppExample
|
||||
# VERSION ... # Set this if the app version is different to the project version
|
||||
# ICON_BIG ... # ICON_* arguments specify a path to an image file to use as an icon
|
||||
# ICON_SMALL ...
|
||||
# DOCUMENT_EXTENSIONS ... # Specify file extensions that should be associated with this app
|
||||
# COMPANY_NAME ... # Specify the name of the app's author
|
||||
PRODUCT_NAME "Gui App Example") # The name of the final executable, which can differ from the target name
|
||||
|
||||
# `juce_generate_juce_header` will create a JuceHeader.h for a given target, which will be generated
|
||||
# into your build tree. This should be included with `#include <JuceHeader.h>`. The include path for
|
||||
# this header will be automatically added to the target. The main function of the JuceHeader is to
|
||||
# include all your JUCE module headers; if you're happy to include module headers directly, you
|
||||
# probably don't need to call this.
|
||||
|
||||
# juce_generate_juce_header(GuiAppExample)
|
||||
|
||||
# `target_sources` adds source files to a target. We pass the target that needs the sources as the
|
||||
# first argument, then a visibility parameter for the sources which should normally be PRIVATE.
|
||||
# Finally, we supply a list of source files that will be built into the target. This is a standard
|
||||
# CMake command.
|
||||
|
||||
target_sources(GuiAppExample
|
||||
PRIVATE
|
||||
Main.cpp
|
||||
MainComponent.cpp)
|
||||
|
||||
# `target_compile_definitions` adds some preprocessor definitions to our target. In a Projucer
|
||||
# project, these might be passed in the 'Preprocessor Definitions' field. JUCE modules also make use
|
||||
# of compile definitions to switch certain features on/off, so if there's a particular feature you
|
||||
# need that's not on by default, check the module header for the correct flag to set here. These
|
||||
# definitions will be visible both to your code, and also the JUCE module code, so for new
|
||||
# definitions, pick unique names that are unlikely to collide! This is a standard CMake command.
|
||||
|
||||
target_compile_definitions(GuiAppExample
|
||||
PRIVATE
|
||||
# JUCE_WEB_BROWSER and JUCE_USE_CURL would be on by default, but you might not need them.
|
||||
JUCE_WEB_BROWSER=0 # If you remove this, add `NEEDS_WEB_BROWSER TRUE` to the `juce_add_gui_app` call
|
||||
JUCE_USE_CURL=0 # If you remove this, add `NEEDS_CURL TRUE` to the `juce_add_gui_app` call
|
||||
JUCE_APPLICATION_NAME_STRING="$<TARGET_PROPERTY:GuiAppExample,JUCE_PRODUCT_NAME>"
|
||||
JUCE_APPLICATION_VERSION_STRING="$<TARGET_PROPERTY:GuiAppExample,JUCE_VERSION>")
|
||||
|
||||
# If your target needs extra binary assets, you can add them here. The first argument is the name of
|
||||
# a new static library target that will include all the binary resources. There is an optional
|
||||
# `NAMESPACE` argument that can specify the namespace of the generated binary data class. Finally,
|
||||
# the SOURCES argument should be followed by a list of source files that should be built into the
|
||||
# static library. These source files can be of any kind (wav data, images, fonts, icons etc.).
|
||||
# Conversion to binary-data will happen when your target is built.
|
||||
|
||||
# juce_add_binary_data(GuiAppData SOURCES ...)
|
||||
|
||||
# `target_link_libraries` links libraries and JUCE modules to other libraries or executables. Here,
|
||||
# we're linking our executable target to the `juce::juce_gui_extra` module. Inter-module
|
||||
# dependencies are resolved automatically, so `juce_core`, `juce_events` and so on will also be
|
||||
# linked automatically. If we'd generated a binary data target above, we would need to link to it
|
||||
# here too. This is a standard CMake command.
|
||||
|
||||
target_link_libraries(GuiAppExample
|
||||
PRIVATE
|
||||
# GuiAppData # If we'd created a binary data target, we'd link to it here
|
||||
juce::juce_gui_extra
|
||||
PUBLIC
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_lto_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#include "MainComponent.h"
|
||||
|
||||
//==============================================================================
|
||||
class GuiAppApplication : public juce::JUCEApplication
|
||||
class GuiAppApplication final : public juce::JUCEApplication
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
|
|
@ -51,7 +51,7 @@ public:
|
|||
This class implements the desktop window that contains an instance of
|
||||
our MainComponent class.
|
||||
*/
|
||||
class MainWindow : public juce::DocumentWindow
|
||||
class MainWindow final : public juce::DocumentWindow
|
||||
{
|
||||
public:
|
||||
explicit MainWindow (juce::String name)
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ void MainComponent::paint (juce::Graphics& g)
|
|||
// (Our component is opaque, so we must completely fill the background with a solid colour)
|
||||
g.fillAll (getLookAndFeel().findColour (juce::ResizableWindow::backgroundColourId));
|
||||
|
||||
g.setFont (juce::Font (16.0f));
|
||||
g.setFont (juce::FontOptions (16.0f));
|
||||
g.setColour (juce::Colours::white);
|
||||
g.drawText ("Hello World!", getLocalBounds(), juce::Justification::centred, true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
This component lives inside our window, and this is where you should put all
|
||||
your controls and content.
|
||||
*/
|
||||
class MainComponent : public juce::Component
|
||||
class MainComponent final : public juce::Component
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -1,69 +1,83 @@
|
|||
# ==============================================================================
|
||||
#
|
||||
# This file is part of the JUCE library.
|
||||
# Copyright (c) 2022 - Raw Material Software Limited
|
||||
#
|
||||
# JUCE is an open source library subject to commercial or open-source
|
||||
# licensing.
|
||||
#
|
||||
# By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
# Agreement and JUCE Privacy Policy.
|
||||
#
|
||||
# End User License Agreement: www.juce.com/juce-7-licence
|
||||
# Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
#
|
||||
# Or: You may also use this code under the terms of the GPL v3 (see
|
||||
# www.gnu.org/licenses).
|
||||
#
|
||||
# JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
# EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
# DISCLAIMED.
|
||||
#
|
||||
# ==============================================================================
|
||||
|
||||
set(CMAKE_FOLDER examples)
|
||||
|
||||
add_subdirectory(CMake)
|
||||
add_subdirectory(DemoRunner)
|
||||
|
||||
function(_juce_add_pips)
|
||||
file(GLOB headers
|
||||
CONFIGURE_DEPENDS LIST_DIRECTORIES false
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/*.h")
|
||||
|
||||
if((CMAKE_SYSTEM_NAME STREQUAL "Linux") OR (CMAKE_SYSTEM_NAME MATCHES ".*BSD"))
|
||||
list(REMOVE_ITEM headers
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/CameraDemo.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/PushNotificationsDemo.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/VideoDemo.h")
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
list(REMOVE_ITEM headers
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/PushNotificationsDemo.h")
|
||||
endif()
|
||||
|
||||
if(NOT (TARGET juce_ara_sdk
|
||||
AND (CMAKE_SYSTEM_NAME STREQUAL "Windows"
|
||||
OR CMAKE_SYSTEM_NAME STREQUAL "Darwin"
|
||||
OR CMAKE_SYSTEM_NAME STREQUAL "Linux")))
|
||||
list(REMOVE_ITEM headers
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/ARAPluginDemo.h")
|
||||
endif()
|
||||
|
||||
if(NOT TARGET juce_vst2_sdk)
|
||||
list(REMOVE_ITEM headers "${CMAKE_CURRENT_SOURCE_DIR}/ReaperEmbeddedViewPluginDemo.h")
|
||||
endif()
|
||||
|
||||
foreach(header IN ITEMS ${headers})
|
||||
juce_add_pip(${header} added_target)
|
||||
target_link_libraries(${added_target} PUBLIC
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_lto_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
add_subdirectory(Audio)
|
||||
add_subdirectory(DSP)
|
||||
add_subdirectory(GUI)
|
||||
add_subdirectory(Plugins)
|
||||
add_subdirectory(Utilities)
|
||||
# ==============================================================================
|
||||
#
|
||||
# This file is part of the JUCE framework examples.
|
||||
# Copyright (c) Raw Material Software Limited
|
||||
#
|
||||
# The code included in this file is provided under the terms of the ISC license
|
||||
# http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
# to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
# without fee is hereby granted provided that the above copyright notice and
|
||||
# this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# ==============================================================================
|
||||
|
||||
set(CMAKE_FOLDER examples)
|
||||
|
||||
add_subdirectory(CMake)
|
||||
add_subdirectory(DemoRunner)
|
||||
|
||||
function(_juce_add_pips)
|
||||
file(GLOB headers
|
||||
CONFIGURE_DEPENDS LIST_DIRECTORIES false
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/*.h")
|
||||
|
||||
if((CMAKE_SYSTEM_NAME STREQUAL "Linux") OR (CMAKE_SYSTEM_NAME MATCHES ".*BSD"))
|
||||
list(REMOVE_ITEM headers
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/CameraDemo.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/PushNotificationsDemo.h"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/VideoDemo.h")
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
list(REMOVE_ITEM headers
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/PushNotificationsDemo.h")
|
||||
endif()
|
||||
|
||||
if(NOT (TARGET juce_ara_sdk
|
||||
AND (CMAKE_SYSTEM_NAME STREQUAL "Windows"
|
||||
OR CMAKE_SYSTEM_NAME STREQUAL "Darwin"
|
||||
OR CMAKE_SYSTEM_NAME STREQUAL "Linux")))
|
||||
list(REMOVE_ITEM headers
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/ARAPluginDemo.h")
|
||||
endif()
|
||||
|
||||
if(NOT TARGET juce_vst2_sdk)
|
||||
list(REMOVE_ITEM headers "${CMAKE_CURRENT_SOURCE_DIR}/ReaperEmbeddedViewPluginDemo.h")
|
||||
endif()
|
||||
|
||||
if((CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/WebViewPluginDemo.h")
|
||||
|
||||
if(NOT ("${JUCE_CMAKE_UTILS_DIR}" IN_LIST CMAKE_MODULE_PATH))
|
||||
list(APPEND CMAKE_MODULE_PATH "${JUCE_CMAKE_UTILS_DIR}")
|
||||
endif()
|
||||
|
||||
find_package(WebView2)
|
||||
|
||||
if(NOT WebView2_FOUND)
|
||||
list(REMOVE_ITEM headers "${CMAKE_CURRENT_SOURCE_DIR}/WebViewPluginDemo.h")
|
||||
|
||||
message(WARNING "The WebViewPluginDemo was not enabled because the WebView2 package wasn't found.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
foreach(header IN ITEMS ${headers})
|
||||
juce_add_pip(${header} added_target)
|
||||
target_link_libraries(${added_target} PUBLIC
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_lto_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
add_subdirectory(Audio)
|
||||
add_subdirectory(DSP)
|
||||
add_subdirectory(GUI)
|
||||
add_subdirectory(Plugins)
|
||||
add_subdirectory(Utilities)
|
||||
|
|
|
|||
|
|
@ -1,24 +1,22 @@
|
|||
# ==============================================================================
|
||||
#
|
||||
# This file is part of the JUCE library.
|
||||
# Copyright (c) 2022 - Raw Material Software Limited
|
||||
#
|
||||
# JUCE is an open source library subject to commercial or open-source
|
||||
# licensing.
|
||||
#
|
||||
# By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
# Agreement and JUCE Privacy Policy.
|
||||
#
|
||||
# End User License Agreement: www.juce.com/juce-7-licence
|
||||
# Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
#
|
||||
# Or: You may also use this code under the terms of the GPL v3 (see
|
||||
# www.gnu.org/licenses).
|
||||
#
|
||||
# JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
# EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
# DISCLAIMED.
|
||||
#
|
||||
# ==============================================================================
|
||||
|
||||
_juce_add_pips()
|
||||
# ==============================================================================
|
||||
#
|
||||
# This file is part of the JUCE framework examples.
|
||||
# Copyright (c) Raw Material Software Limited
|
||||
#
|
||||
# The code included in this file is provided under the terms of the ISC license
|
||||
# http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
# to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
# without fee is hereby granted provided that the above copyright notice and
|
||||
# this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# ==============================================================================
|
||||
|
||||
_juce_add_pips()
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -186,7 +190,7 @@ struct ConvolutionDemoDSP
|
|||
std::vector<DSPDemoParameterBase*> parameters { &cabinetParam };
|
||||
};
|
||||
|
||||
struct ConvolutionDemo : public Component
|
||||
struct ConvolutionDemo final : public Component
|
||||
{
|
||||
ConvolutionDemo()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -77,7 +81,7 @@ struct FIRFilterDemoDSP
|
|||
|
||||
void updateParameters()
|
||||
{
|
||||
if (sampleRate != 0.0)
|
||||
if (! approximatelyEqual (sampleRate, 0.0))
|
||||
{
|
||||
auto cutoff = static_cast<float> (cutoffParam.getCurrentValue());
|
||||
auto windowingMethod = static_cast<WindowingFunction<float>::WindowingMethod> (typeParam.getCurrentSelectedID() - 1);
|
||||
|
|
@ -98,7 +102,7 @@ struct FIRFilterDemoDSP
|
|||
std::vector<DSPDemoParameterBase*> parameters { &cutoffParam, &typeParam };
|
||||
};
|
||||
|
||||
struct FIRFilterDemo : public Component
|
||||
struct FIRFilterDemo final : public Component
|
||||
{
|
||||
FIRFilterDemo()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -83,7 +87,7 @@ struct GainDemoDSP
|
|||
std::vector<DSPDemoParameterBase*> parameters { &gainParam };
|
||||
};
|
||||
|
||||
struct GainDemo : public Component
|
||||
struct GainDemo final : public Component
|
||||
{
|
||||
GainDemo()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -76,7 +80,7 @@ struct IIRFilterDemoDSP
|
|||
|
||||
void updateParameters()
|
||||
{
|
||||
if (sampleRate != 0.0)
|
||||
if (! approximatelyEqual (sampleRate, 0.0))
|
||||
{
|
||||
auto cutoff = static_cast<float> (cutoffParam.getCurrentValue());
|
||||
auto qVal = static_cast<float> (qParam.getCurrentValue());
|
||||
|
|
@ -96,13 +100,13 @@ struct IIRFilterDemoDSP
|
|||
|
||||
ChoiceParameter typeParam { { "Low-pass", "High-pass", "Band-pass" }, 1, "Type" };
|
||||
SliderParameter cutoffParam { { 20.0, 20000.0 }, 0.5, 440.0f, "Cutoff", "Hz" };
|
||||
SliderParameter qParam { { 0.3, 20.0 }, 0.5, 1.0 / std::sqrt(2.0), "Q" };
|
||||
SliderParameter qParam { { 0.3, 20.0 }, 0.5, 1.0 / std::sqrt (2.0), "Q" };
|
||||
|
||||
std::vector<DSPDemoParameterBase*> parameters { &typeParam, &cutoffParam, &qParam };
|
||||
double sampleRate = 0.0;
|
||||
};
|
||||
|
||||
struct IIRFilterDemo : public Component
|
||||
struct IIRFilterDemo final : public Component
|
||||
{
|
||||
IIRFilterDemo()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -134,7 +138,7 @@ struct OscillatorDemoDSP
|
|||
std::vector<DSPDemoParameterBase*> parameters { &typeParam, &accuracy, &freqParam, &gainParam, &mixParam };
|
||||
};
|
||||
|
||||
struct OscillatorDemo : public Component
|
||||
struct OscillatorDemo final : public Component
|
||||
{
|
||||
OscillatorDemo()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -90,7 +94,7 @@ struct OverdriveDemoDSP
|
|||
|
||||
void updateParameters()
|
||||
{
|
||||
if (sampleRate != 0.0)
|
||||
if (! approximatelyEqual (sampleRate, 0.0))
|
||||
{
|
||||
overdrive.get<0>().setGainDecibels (static_cast<float> (inGainParam.getCurrentValue()));
|
||||
overdrive.get<4>().setGainDecibels (static_cast<float> (outGainParam.getCurrentValue()));
|
||||
|
|
@ -113,7 +117,7 @@ struct OverdriveDemoDSP
|
|||
double sampleRate = 0.0;
|
||||
};
|
||||
|
||||
struct OverdriveDemo : public Component
|
||||
struct OverdriveDemo final : public Component
|
||||
{
|
||||
OverdriveDemo()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -124,7 +128,7 @@ struct SIMDRegisterDemoDSP
|
|||
|
||||
void updateParameters()
|
||||
{
|
||||
if (sampleRate != 0.0)
|
||||
if (! approximatelyEqual (sampleRate, 0.0))
|
||||
{
|
||||
auto cutoff = static_cast<float> (cutoffParam.getCurrentValue());
|
||||
auto qVal = static_cast<float> (qParam.getCurrentValue());
|
||||
|
|
@ -156,7 +160,7 @@ struct SIMDRegisterDemoDSP
|
|||
double sampleRate = 0.0;
|
||||
};
|
||||
|
||||
struct SIMDRegisterDemo : public Component
|
||||
struct SIMDRegisterDemo final : public Component
|
||||
{
|
||||
SIMDRegisterDemo()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -74,7 +78,7 @@ struct StateVariableFilterDemoDSP
|
|||
|
||||
void updateParameters()
|
||||
{
|
||||
if (sampleRate != 0.0)
|
||||
if (! approximatelyEqual (sampleRate, 0.0))
|
||||
{
|
||||
filter.setCutoffFrequency (static_cast<float> (cutoffParam.getCurrentValue()));
|
||||
filter.setResonance (static_cast<float> (qParam.getCurrentValue()));
|
||||
|
|
@ -100,7 +104,7 @@ struct StateVariableFilterDemoDSP
|
|||
double sampleRate = 0.0;
|
||||
};
|
||||
|
||||
struct StateVariableFilterDemo : public Component
|
||||
struct StateVariableFilterDemo final : public Component
|
||||
{
|
||||
StateVariableFilterDemo()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -82,7 +86,7 @@ struct WaveShaperTanhDemoDSP
|
|||
std::vector<DSPDemoParameterBase*> parameters { &accuracy }; // no params for this demo
|
||||
};
|
||||
|
||||
struct WaveShaperTanhDemo : public Component
|
||||
struct WaveShaperTanhDemo final : public Component
|
||||
{
|
||||
WaveShaperTanhDemo()
|
||||
{
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,11 +1,15 @@
|
|||
apply plugin: 'com.android.application'
|
||||
|
||||
def ndkVersionString = "26.2.11394342"
|
||||
|
||||
android {
|
||||
compileSdkVersion 33
|
||||
compileSdk 34
|
||||
ndkVersion ndkVersionString
|
||||
namespace "com.rmsl.jucedemorunner"
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
path "CMakeLists.txt"
|
||||
version "3.22.1"
|
||||
}
|
||||
}
|
||||
signingConfigs {
|
||||
|
|
@ -21,10 +25,10 @@ android {
|
|||
defaultConfig {
|
||||
applicationId "com.rmsl.jucedemorunner"
|
||||
minSdkVersion 23
|
||||
targetSdkVersion 33
|
||||
targetSdkVersion 34
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_PLATFORM=android-23", "-DANDROID_STL=c++_static", "-DANDROID_CPP_FEATURES=exceptions rtti", "-DANDROID_ARM_MODE=arm", "-DANDROID_ARM_NEON=TRUE", "-DCMAKE_CXX_STANDARD=17", "-DCMAKE_CXX_EXTENSIONS=OFF"
|
||||
arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_PLATFORM=android-23", "-DANDROID_STL=c++_static", "-DANDROID_CPP_FEATURES=exceptions rtti", "-DANDROID_ARM_MODE=arm", "-DANDROID_ARM_NEON=TRUE", "-DANDROID_WEAK_API_DEFS=ON", "-DCMAKE_CXX_STANDARD=17", "-DCMAKE_CXX_EXTENSIONS=OFF"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="7.0.4">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="8.0.4">
|
||||
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true"
|
||||
android:xlargeScreens="true"/>
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/>
|
||||
|
|
@ -8,19 +8,20 @@
|
|||
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="30"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30"/>
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/>
|
||||
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30"/>
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE"/>
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"/>
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation"/>
|
||||
<uses-permission android:name="android.permission.CAMERA"/>
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
||||
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-feature android:glEsVersion="0x00030000" android:required="true"/>
|
||||
<application android:label="@string/app_name" android:name="com.rmsl.juce.JuceApp" android:icon="@drawable/icon" android:hardwareAccelerated="false">
|
||||
<receiver android:name="com.rmsl.juce.Receiver" android:exported="false"/>
|
||||
<activity android:name="com.rmsl.juce.JuceActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|navigation"
|
||||
android:screenOrientation="unspecified" android:launchMode="singleTask" android:hardwareAccelerated="true"
|
||||
android:exported="true">
|
||||
|
|
|
|||
|
|
@ -0,0 +1,190 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
class ADSRComponent final : public Component
|
||||
{
|
||||
public:
|
||||
ADSRComponent()
|
||||
: envelope { *this }
|
||||
{
|
||||
for (Slider* slider : { &adsrAttack, &adsrDecay, &adsrSustain, &adsrRelease })
|
||||
{
|
||||
if (slider == &adsrSustain)
|
||||
{
|
||||
slider->textFromValueFunction = [slider] (double value)
|
||||
{
|
||||
String text;
|
||||
|
||||
text << slider->getName();
|
||||
|
||||
const auto val = (int) jmap (value, 0.0, 1.0, 0.0, 100.0);
|
||||
text << String::formatted (": %d%%", val);
|
||||
|
||||
return text;
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
slider->textFromValueFunction = [slider] (double value)
|
||||
{
|
||||
String text;
|
||||
|
||||
text << slider->getName();
|
||||
|
||||
text << ": " << ((value < 0.4f) ? String::formatted ("%dms", (int) std::round (value * 1000))
|
||||
: String::formatted ("%0.2lf Sec", value));
|
||||
|
||||
return text;
|
||||
};
|
||||
|
||||
slider->setSkewFactor (0.3);
|
||||
}
|
||||
|
||||
slider->setRange (0, 1);
|
||||
slider->setTextBoxStyle (Slider::TextBoxBelow, true, 300, 25);
|
||||
slider->onValueChange = [this]
|
||||
{
|
||||
NullCheckedInvocation::invoke (onChange);
|
||||
repaint();
|
||||
};
|
||||
|
||||
addAndMakeVisible (slider);
|
||||
}
|
||||
|
||||
adsrAttack.setName ("Attack");
|
||||
adsrDecay.setName ("Decay");
|
||||
adsrSustain.setName ("Sustain");
|
||||
adsrRelease.setName ("Release");
|
||||
|
||||
adsrAttack.setValue (0.1, dontSendNotification);
|
||||
adsrDecay.setValue (0.3, dontSendNotification);
|
||||
adsrSustain.setValue (0.3, dontSendNotification);
|
||||
adsrRelease.setValue (0.2, dontSendNotification);
|
||||
|
||||
addAndMakeVisible (envelope);
|
||||
}
|
||||
|
||||
std::function<void()> onChange;
|
||||
|
||||
ADSR::Parameters getParameters() const
|
||||
{
|
||||
return
|
||||
{
|
||||
(float) adsrAttack.getValue(),
|
||||
(float) adsrDecay.getValue(),
|
||||
(float) adsrSustain.getValue(),
|
||||
(float) adsrRelease.getValue(),
|
||||
};
|
||||
}
|
||||
|
||||
void resized() final
|
||||
{
|
||||
auto bounds = getLocalBounds();
|
||||
|
||||
const auto knobWidth = bounds.getWidth() / 4;
|
||||
auto knobBounds = bounds.removeFromBottom (bounds.getHeight() / 2);
|
||||
{
|
||||
adsrAttack.setBounds (knobBounds.removeFromLeft (knobWidth));
|
||||
adsrDecay.setBounds (knobBounds.removeFromLeft (knobWidth));
|
||||
adsrSustain.setBounds (knobBounds.removeFromLeft (knobWidth));
|
||||
adsrRelease.setBounds (knobBounds.removeFromLeft (knobWidth));
|
||||
}
|
||||
|
||||
envelope.setBounds (bounds);
|
||||
}
|
||||
|
||||
Slider adsrAttack { Slider::RotaryVerticalDrag, Slider::TextBoxBelow };
|
||||
Slider adsrDecay { Slider::RotaryVerticalDrag, Slider::TextBoxBelow };
|
||||
Slider adsrSustain { Slider::RotaryVerticalDrag, Slider::TextBoxBelow };
|
||||
Slider adsrRelease { Slider::RotaryVerticalDrag, Slider::TextBoxBelow };
|
||||
|
||||
private:
|
||||
class Envelope final : public Component
|
||||
{
|
||||
public:
|
||||
Envelope (ADSRComponent& adsr) : parent { adsr } {}
|
||||
|
||||
void paint (Graphics& g) final
|
||||
{
|
||||
const auto env = parent.getParameters();
|
||||
|
||||
// sustain isn't a length but we use a fixed value here to give
|
||||
// sustain some visual width in the envelope
|
||||
constexpr auto sustainLength = 0.1;
|
||||
|
||||
const auto adsrLength = env.attack
|
||||
+ env.decay
|
||||
+ sustainLength
|
||||
+ env.release;
|
||||
|
||||
auto bounds = getLocalBounds().toFloat();
|
||||
|
||||
const auto attackWidth = bounds.proportionOfWidth (env.attack / adsrLength);
|
||||
const auto decayWidth = bounds.proportionOfWidth (env.decay / adsrLength);
|
||||
const auto sustainWidth = bounds.proportionOfWidth (sustainLength / adsrLength);
|
||||
const auto releaseWidth = bounds.proportionOfWidth (env.release / adsrLength);
|
||||
const auto sustainHeight = bounds.proportionOfHeight (1 - env.sustain);
|
||||
|
||||
const auto attackBounds = bounds.removeFromLeft (attackWidth);
|
||||
const auto decayBounds = bounds.removeFromLeft (decayWidth);
|
||||
const auto sustainBounds = bounds.removeFromLeft (sustainWidth);
|
||||
const auto releaseBounds = bounds.removeFromLeft (releaseWidth);
|
||||
|
||||
g.setColour (Colours::black.withAlpha (0.1f));
|
||||
g.fillRect (bounds);
|
||||
|
||||
const auto alpha = 0.4f;
|
||||
|
||||
g.setColour (Colour (246, 98, 92).withAlpha (alpha));
|
||||
g.fillRect (attackBounds);
|
||||
|
||||
g.setColour (Colour (242, 187, 60).withAlpha (alpha));
|
||||
g.fillRect (decayBounds);
|
||||
|
||||
g.setColour (Colour (109, 234, 166).withAlpha (alpha));
|
||||
g.fillRect (sustainBounds);
|
||||
|
||||
g.setColour (Colour (131, 61, 183).withAlpha (alpha));
|
||||
g.fillRect (releaseBounds);
|
||||
|
||||
Path envelopePath;
|
||||
envelopePath.startNewSubPath (attackBounds.getBottomLeft());
|
||||
envelopePath.lineTo (decayBounds.getTopLeft());
|
||||
envelopePath.lineTo (sustainBounds.getX(), sustainHeight);
|
||||
envelopePath.lineTo (releaseBounds.getX(), sustainHeight);
|
||||
envelopePath.lineTo (releaseBounds.getBottomRight());
|
||||
|
||||
const auto lineThickness = 4.0f;
|
||||
|
||||
g.setColour (Colours::white);
|
||||
g.strokePath (envelopePath, PathStrokeType { lineThickness });
|
||||
}
|
||||
|
||||
private:
|
||||
ADSRComponent& parent;
|
||||
};
|
||||
|
||||
Envelope envelope;
|
||||
};
|
||||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -24,8 +28,8 @@
|
|||
/* This component scrolls a continuous waveform showing the audio that's
|
||||
coming into whatever audio inputs this object is connected to.
|
||||
*/
|
||||
class LiveScrollingAudioDisplay : public AudioVisualiserComponent,
|
||||
public AudioIODeviceCallback
|
||||
class LiveScrollingAudioDisplay final : public AudioVisualiserComponent,
|
||||
public AudioIODeviceCallback
|
||||
{
|
||||
public:
|
||||
LiveScrollingAudioDisplay() : AudioVisualiserComponent (1)
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -38,7 +42,7 @@ struct DSPDemoParameterBase : public ChangeBroadcaster
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
struct SliderParameter : public DSPDemoParameterBase
|
||||
struct SliderParameter final : public DSPDemoParameterBase
|
||||
{
|
||||
SliderParameter (Range<double> range, double skew, double initialValue,
|
||||
const String& labelName, const String& suffix = {})
|
||||
|
|
@ -66,7 +70,7 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
struct ChoiceParameter : public DSPDemoParameterBase
|
||||
struct ChoiceParameter final : public DSPDemoParameterBase
|
||||
{
|
||||
ChoiceParameter (const StringArray& options, int initialId, const String& labelName)
|
||||
: DSPDemoParameterBase (labelName)
|
||||
|
|
@ -89,11 +93,11 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class AudioThumbnailComponent : public Component,
|
||||
public FileDragAndDropTarget,
|
||||
public ChangeBroadcaster,
|
||||
private ChangeListener,
|
||||
private Timer
|
||||
class AudioThumbnailComponent final : public Component,
|
||||
public FileDragAndDropTarget,
|
||||
public ChangeBroadcaster,
|
||||
private ChangeListener,
|
||||
private Timer
|
||||
{
|
||||
public:
|
||||
AudioThumbnailComponent (AudioDeviceManager& adm, AudioFormatManager& afm)
|
||||
|
|
@ -148,7 +152,7 @@ public:
|
|||
{
|
||||
transportSource = newSource;
|
||||
|
||||
struct ResetCallback : public CallbackMessage
|
||||
struct ResetCallback final : public CallbackMessage
|
||||
{
|
||||
ResetCallback (AudioThumbnailComponent& o) : owner (o) {}
|
||||
void messageCallback() override { owner.reset(); }
|
||||
|
|
@ -217,7 +221,7 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class DemoParametersComponent : public Component
|
||||
class DemoParametersComponent final : public Component
|
||||
{
|
||||
public:
|
||||
DemoParametersComponent (const std::vector<DSPDemoParameterBase*>& demoParams)
|
||||
|
|
@ -270,9 +274,9 @@ private:
|
|||
|
||||
//==============================================================================
|
||||
template <class DemoType>
|
||||
struct DSPDemo : public AudioSource,
|
||||
public ProcessorWrapper<DemoType>,
|
||||
private ChangeListener
|
||||
struct DSPDemo final : public AudioSource,
|
||||
public ProcessorWrapper<DemoType>,
|
||||
private ChangeListener
|
||||
{
|
||||
DSPDemo (AudioSource& input)
|
||||
: inputSource (&input)
|
||||
|
|
@ -327,10 +331,10 @@ struct DSPDemo : public AudioSource,
|
|||
|
||||
//==============================================================================
|
||||
template <class DemoType>
|
||||
class AudioFileReaderComponent : public Component,
|
||||
private TimeSliceThread,
|
||||
private Value::Listener,
|
||||
private ChangeListener
|
||||
class AudioFileReaderComponent final : public Component,
|
||||
private TimeSliceThread,
|
||||
private Value::Listener,
|
||||
private ChangeListener
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
|
|
@ -379,7 +383,7 @@ public:
|
|||
|
||||
r.removeFromTop (20);
|
||||
|
||||
if (parametersComponent.get() != nullptr)
|
||||
if (parametersComponent != nullptr)
|
||||
parametersComponent->setBounds (r.removeFromTop (parametersComponent->getHeightNeeded()).reduced (20, 0));
|
||||
}
|
||||
|
||||
|
|
@ -412,6 +416,7 @@ public:
|
|||
readerSource->setLooping (loopState.getValue());
|
||||
|
||||
init();
|
||||
resized();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -442,7 +447,7 @@ public:
|
|||
transportSource.reset (new AudioTransportSource());
|
||||
transportSource->addChangeListener (this);
|
||||
|
||||
if (readerSource.get() != nullptr)
|
||||
if (readerSource != nullptr)
|
||||
{
|
||||
if (auto* device = audioDeviceManager.getCurrentAudioDevice())
|
||||
{
|
||||
|
|
@ -461,12 +466,20 @@ public:
|
|||
|
||||
audioSourcePlayer.setSource (currentDemo.get());
|
||||
|
||||
initParameters();
|
||||
auto& parameters = currentDemo->getParameters();
|
||||
|
||||
parametersComponent.reset();
|
||||
|
||||
if (! parameters.empty())
|
||||
{
|
||||
parametersComponent = std::make_unique<DemoParametersComponent> (parameters);
|
||||
addAndMakeVisible (parametersComponent.get());
|
||||
}
|
||||
}
|
||||
|
||||
void play()
|
||||
{
|
||||
if (readerSource.get() == nullptr)
|
||||
if (readerSource == nullptr)
|
||||
return;
|
||||
|
||||
if (transportSource->getCurrentPosition() >= transportSource->getLengthInSeconds()
|
||||
|
|
@ -479,32 +492,17 @@ public:
|
|||
|
||||
void setLooping (bool shouldLoop)
|
||||
{
|
||||
if (readerSource.get() != nullptr)
|
||||
if (readerSource != nullptr)
|
||||
readerSource->setLooping (shouldLoop);
|
||||
}
|
||||
|
||||
AudioThumbnailComponent& getThumbnailComponent() { return header.thumbnailComp; }
|
||||
|
||||
void initParameters()
|
||||
{
|
||||
auto& parameters = currentDemo->getParameters();
|
||||
|
||||
parametersComponent.reset();
|
||||
|
||||
if (parameters.size() > 0)
|
||||
{
|
||||
parametersComponent.reset (new DemoParametersComponent (parameters));
|
||||
addAndMakeVisible (parametersComponent.get());
|
||||
}
|
||||
|
||||
resized();
|
||||
}
|
||||
|
||||
private:
|
||||
//==============================================================================
|
||||
class AudioPlayerHeader : public Component,
|
||||
private ChangeListener,
|
||||
private Value::Listener
|
||||
class AudioPlayerHeader final : public Component,
|
||||
private ChangeListener,
|
||||
private Value::Listener
|
||||
{
|
||||
public:
|
||||
AudioPlayerHeader (AudioDeviceManager& adm,
|
||||
|
|
@ -596,13 +594,17 @@ private:
|
|||
const auto u = fc.getURLResult();
|
||||
|
||||
if (! audioFileReader.loadURL (u))
|
||||
NativeMessageBox::showAsync (MessageBoxOptions()
|
||||
.withIconType (MessageBoxIconType::WarningIcon)
|
||||
.withTitle ("Error loading file")
|
||||
.withMessage ("Unable to load audio file"),
|
||||
nullptr);
|
||||
{
|
||||
auto options = MessageBoxOptions().withIconType (MessageBoxIconType::WarningIcon)
|
||||
.withTitle ("Error loading file")
|
||||
.withMessage ("Unable to load audio file")
|
||||
.withButton ("OK");
|
||||
messageBox = NativeMessageBox::showScopedAsync (options, nullptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
thumbnailComp.setCurrentURL (u);
|
||||
}
|
||||
}
|
||||
|
||||
fileChooser = nullptr;
|
||||
|
|
@ -629,12 +631,13 @@ private:
|
|||
|
||||
AudioFileReaderComponent& audioFileReader;
|
||||
std::unique_ptr<FileChooser> fileChooser;
|
||||
ScopedMessageBox messageBox;
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
void valueChanged (Value& v) override
|
||||
{
|
||||
if (readerSource.get() != nullptr)
|
||||
if (readerSource != nullptr)
|
||||
readerSource->setLooping (v.getValue());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -82,11 +86,26 @@ inline File getExamplesDirectory() noexcept
|
|||
#endif
|
||||
}
|
||||
|
||||
inline std::unique_ptr<InputStream> createAssetInputStream (const char* resourcePath)
|
||||
enum class AssertAssetExists
|
||||
{
|
||||
no,
|
||||
yes
|
||||
};
|
||||
|
||||
inline std::unique_ptr<InputStream> createAssetInputStream (const char* resourcePath,
|
||||
[[maybe_unused]] AssertAssetExists assertExists = AssertAssetExists::yes)
|
||||
{
|
||||
#if JUCE_ANDROID
|
||||
ZipFile apkZip (File::getSpecialLocation (File::invokedExecutableFile));
|
||||
return std::unique_ptr<InputStream> (apkZip.createStreamForEntry (apkZip.getIndexOfFileName ("assets/" + String (resourcePath))));
|
||||
const auto fileIndex = apkZip.getIndexOfFileName ("assets/" + String (resourcePath));
|
||||
|
||||
if (fileIndex == -1)
|
||||
{
|
||||
jassert (assertExists == AssertAssetExists::no);
|
||||
return {};
|
||||
}
|
||||
|
||||
return std::unique_ptr<InputStream> (apkZip.createStreamForEntry (fileIndex));
|
||||
#else
|
||||
#if JUCE_IOS
|
||||
auto assetsDir = File::getSpecialLocation (File::currentExecutableFile)
|
||||
|
|
@ -102,7 +121,12 @@ inline std::unique_ptr<InputStream> createAssetInputStream (const char* resource
|
|||
#endif
|
||||
|
||||
auto resourceFile = assetsDir.getChildFile (resourcePath);
|
||||
jassert (resourceFile.existsAsFile());
|
||||
|
||||
if (! resourceFile.existsAsFile())
|
||||
{
|
||||
jassert (assertExists == AssertAssetExists::no);
|
||||
return {};
|
||||
}
|
||||
|
||||
return resourceFile.createInputStream();
|
||||
#endif
|
||||
|
|
@ -218,11 +242,7 @@ inline Path getJUCELogoPath()
|
|||
// 0.0 and 1.0 at a random speed
|
||||
struct BouncingNumber
|
||||
{
|
||||
BouncingNumber()
|
||||
: speed (0.0004 + 0.0007 * Random::getSystemRandom().nextDouble()),
|
||||
phase (Random::getSystemRandom().nextDouble())
|
||||
{
|
||||
}
|
||||
virtual ~BouncingNumber() = default;
|
||||
|
||||
float getValue() const
|
||||
{
|
||||
|
|
@ -231,10 +251,11 @@ struct BouncingNumber
|
|||
}
|
||||
|
||||
protected:
|
||||
double speed, phase;
|
||||
double speed = 0.0004 + 0.0007 * Random::getSystemRandom().nextDouble(),
|
||||
phase = Random::getSystemRandom().nextDouble();
|
||||
};
|
||||
|
||||
struct SlowerBouncingNumber : public BouncingNumber
|
||||
struct SlowerBouncingNumber final : public BouncingNumber
|
||||
{
|
||||
SlowerBouncingNumber()
|
||||
{
|
||||
|
|
@ -244,10 +265,8 @@ struct SlowerBouncingNumber : public BouncingNumber
|
|||
|
||||
inline std::unique_ptr<InputSource> makeInputSource (const URL& url)
|
||||
{
|
||||
#if JUCE_ANDROID
|
||||
if (auto doc = AndroidDocument::fromDocument (url))
|
||||
if (const auto doc = AndroidDocument::fromDocument (url))
|
||||
return std::make_unique<AndroidDocumentInputSource> (doc);
|
||||
#endif
|
||||
|
||||
#if ! JUCE_IOS
|
||||
if (url.isLocalFile())
|
||||
|
|
@ -257,4 +276,17 @@ inline std::unique_ptr<InputSource> makeInputSource (const URL& url)
|
|||
return std::make_unique<URLInputSource> (url);
|
||||
}
|
||||
|
||||
inline std::unique_ptr<OutputStream> makeOutputStream (const URL& url)
|
||||
{
|
||||
if (const auto doc = AndroidDocument::fromDocument (url))
|
||||
return doc.createOutputStream();
|
||||
|
||||
#if ! JUCE_IOS
|
||||
if (url.isLocalFile())
|
||||
return url.getLocalFile().createOutputStream();
|
||||
#endif
|
||||
|
||||
return url.createOutputStream();
|
||||
}
|
||||
|
||||
#endif // PIP_DEMO_UTILITIES_INCLUDED
|
||||
|
|
|
|||
|
|
@ -1,18 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE examples.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
To use, copy, modify, and/or distribute this software for any purpose with or
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES,
|
||||
WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR
|
||||
PURPOSE, ARE DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -33,6 +33,5 @@
|
|||
|
||||
"OSXFrameworks": "Cocoa IOKit",
|
||||
"iOSFrameworks": "Foundation",
|
||||
"LinuxLibs": "rt dl pthread",
|
||||
"mingwLibs": "uuid wsock32 wininet version ole32 ws2_32 oleaut32 imm32 comdlg32 shlwapi rpcrt4 winmm"
|
||||
"LinuxLibs": "rt dl pthread"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>WebViewPluginDemo</title>
|
||||
<style type="text/css">
|
||||
body {
|
||||
background-color: white;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>WebViewPluginDemo</h1>
|
||||
<p>
|
||||
This document is a placeholder for the GUI component of the
|
||||
WebViewPluginDemo.
|
||||
</p>
|
||||
<p>
|
||||
To build the fully fledged user interface you need to install
|
||||
<a href="https://nodejs.org">node.js</a>
|
||||
</p>
|
||||
<p>
|
||||
Then navigate into the
|
||||
<code>examples/Plugins/WebViewPluginDemoGUI</code> directory inside your JUCE
|
||||
directory, and issue the following commands.
|
||||
</p>
|
||||
<pre>
|
||||
npm install
|
||||
npm run build
|
||||
npm run zip
|
||||
</pre
|
||||
>
|
||||
<p>
|
||||
This will build the full GUI package and place it in the
|
||||
<code>Assets</code> directory.
|
||||
</p>
|
||||
<p>After this, rebuild and restart this demo.</p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -4,7 +4,7 @@ buildscript {
|
|||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.3.0'
|
||||
classpath 'com.android.tools.build:gradle:8.4.1'
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
1
examples/DemoRunner/Builds/Android/gradle.properties
Normal file
1
examples/DemoRunner/Builds/Android/gradle.properties
Normal file
|
|
@ -0,0 +1 @@
|
|||
android.useAndroidX=true
|
||||
|
|
@ -1 +1 @@
|
|||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip
|
||||
|
|
@ -39,15 +39,15 @@ ifeq ($(CONFIG),Debug)
|
|||
TARGET_ARCH :=
|
||||
endif
|
||||
|
||||
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70004" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_box2d=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_USE_MP3AUDIOFORMAT=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_USE_CAMERA=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=7.0.4" "-DJUCE_APP_VERSION_HEX=0x70004" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
|
||||
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DDEBUG=1" "-D_DEBUG=1" "-DJUCE_PROJUCER_VERSION=0x80004" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_animation=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_box2d=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_javascript=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_USE_MP3AUDIOFORMAT=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_USE_CAMERA=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=8.0.4" "-DJUCE_APP_VERSION_HEX=0x80004" $(shell $(PKG_CONFIG) --cflags $(shell ($(PKG_CONFIG) --exists webkit2gtk-4.1 && echo webkit2gtk-4.1) || echo webkit2gtk-4.0) alsa freetype2 fontconfig gl libcurl gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
|
||||
JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
|
||||
JUCE_TARGET_APP := DemoRunner
|
||||
|
||||
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 $(CFLAGS)
|
||||
JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++17 $(CXXFLAGS)
|
||||
JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell $(PKG_CONFIG) --libs alsa freetype2 libcurl) -fvisibility=hidden -lrt -ldl -lpthread -lGL $(LDFLAGS)
|
||||
JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell $(PKG_CONFIG) --libs alsa freetype2 fontconfig gl libcurl) -fvisibility=hidden -lrt -ldl -lpthread $(LDFLAGS)
|
||||
|
||||
CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)
|
||||
CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) $(JUCE_OBJDIR)
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG),Release)
|
||||
|
|
@ -60,15 +60,15 @@ ifeq ($(CONFIG),Release)
|
|||
TARGET_ARCH :=
|
||||
endif
|
||||
|
||||
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_DISPLAY_SPLASH_SCREEN=0" "-DJUCE_USE_DARK_SPLASH_SCREEN=1" "-DJUCE_PROJUCER_VERSION=0x70004" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_box2d=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_USE_MP3AUDIOFORMAT=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_USE_CAMERA=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=7.0.4" "-DJUCE_APP_VERSION_HEX=0x70004" $(shell $(PKG_CONFIG) --cflags alsa freetype2 libcurl webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
|
||||
JUCE_CPPFLAGS := $(DEPFLAGS) "-DLINUX=1" "-DNDEBUG=1" "-DJUCE_PROJUCER_VERSION=0x80004" "-DJUCE_MODULE_AVAILABLE_juce_analytics=1" "-DJUCE_MODULE_AVAILABLE_juce_animation=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_devices=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_formats=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_processors=1" "-DJUCE_MODULE_AVAILABLE_juce_audio_utils=1" "-DJUCE_MODULE_AVAILABLE_juce_box2d=1" "-DJUCE_MODULE_AVAILABLE_juce_core=1" "-DJUCE_MODULE_AVAILABLE_juce_cryptography=1" "-DJUCE_MODULE_AVAILABLE_juce_data_structures=1" "-DJUCE_MODULE_AVAILABLE_juce_dsp=1" "-DJUCE_MODULE_AVAILABLE_juce_events=1" "-DJUCE_MODULE_AVAILABLE_juce_graphics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_basics=1" "-DJUCE_MODULE_AVAILABLE_juce_gui_extra=1" "-DJUCE_MODULE_AVAILABLE_juce_javascript=1" "-DJUCE_MODULE_AVAILABLE_juce_opengl=1" "-DJUCE_MODULE_AVAILABLE_juce_osc=1" "-DJUCE_MODULE_AVAILABLE_juce_product_unlocking=1" "-DJUCE_MODULE_AVAILABLE_juce_video=1" "-DJUCE_GLOBAL_MODULE_SETTINGS_INCLUDED=1" "-DJUCE_USE_MP3AUDIOFORMAT=1" "-DJUCE_PLUGINHOST_VST3=1" "-DJUCE_PLUGINHOST_LV2=1" "-DJUCE_ALLOW_STATIC_NULL_VARIABLES=0" "-DJUCE_STRICT_REFCOUNTEDPOINTER=1" "-DJUCE_USE_CAMERA=1" "-DJUCE_STANDALONE_APPLICATION=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_LINUX_MAKE_6D53C8B4=1" "-DJUCE_APP_VERSION=8.0.4" "-DJUCE_APP_VERSION_HEX=0x80004" $(shell $(PKG_CONFIG) --cflags $(shell ($(PKG_CONFIG) --exists webkit2gtk-4.1 && echo webkit2gtk-4.1) || echo webkit2gtk-4.0) alsa freetype2 fontconfig gl libcurl gtk+-x11-3.0) -pthread -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd -I../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 -I../../../../modules/juce_audio_processors/format_types/LV2_SDK -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
|
||||
JUCE_CPPFLAGS_APP := "-DJucePlugin_Build_VST=0" "-DJucePlugin_Build_VST3=0" "-DJucePlugin_Build_AU=0" "-DJucePlugin_Build_AUv3=0" "-DJucePlugin_Build_AAX=0" "-DJucePlugin_Build_Standalone=0" "-DJucePlugin_Build_Unity=0" "-DJucePlugin_Build_LV2=0"
|
||||
JUCE_TARGET_APP := DemoRunner
|
||||
|
||||
JUCE_CFLAGS += $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 $(CFLAGS)
|
||||
JUCE_CXXFLAGS += $(JUCE_CFLAGS) -std=c++17 $(CXXFLAGS)
|
||||
JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell $(PKG_CONFIG) --libs alsa freetype2 libcurl) -fvisibility=hidden -lrt -ldl -lpthread -lGL $(LDFLAGS)
|
||||
JUCE_LDFLAGS += $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell $(PKG_CONFIG) --libs alsa freetype2 fontconfig gl libcurl) -fvisibility=hidden -lrt -ldl -lpthread $(LDFLAGS)
|
||||
|
||||
CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)
|
||||
CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) $(JUCE_OBJDIR)
|
||||
endif
|
||||
|
||||
OBJECTS_APP := \
|
||||
|
|
@ -79,6 +79,7 @@ OBJECTS_APP := \
|
|||
$(JUCE_OBJDIR)/MainComponent_a54318d2.o \
|
||||
$(JUCE_OBJDIR)/Main_90ebc5c2.o \
|
||||
$(JUCE_OBJDIR)/include_juce_analytics_f8e9fa94.o \
|
||||
$(JUCE_OBJDIR)/include_juce_animation_c2224b92.o \
|
||||
$(JUCE_OBJDIR)/include_juce_audio_basics_8a4e984a.o \
|
||||
$(JUCE_OBJDIR)/include_juce_audio_devices_63111d02.o \
|
||||
$(JUCE_OBJDIR)/include_juce_audio_formats_15f82001.o \
|
||||
|
|
@ -88,13 +89,17 @@ OBJECTS_APP := \
|
|||
$(JUCE_OBJDIR)/include_juce_audio_utils_9f9fb2d6.o \
|
||||
$(JUCE_OBJDIR)/include_juce_box2d_b0305d8b.o \
|
||||
$(JUCE_OBJDIR)/include_juce_core_f26d17db.o \
|
||||
$(JUCE_OBJDIR)/include_juce_core_CompilationTime_9257742c.o \
|
||||
$(JUCE_OBJDIR)/include_juce_cryptography_8cb807a8.o \
|
||||
$(JUCE_OBJDIR)/include_juce_data_structures_7471b1e3.o \
|
||||
$(JUCE_OBJDIR)/include_juce_dsp_aeb2060f.o \
|
||||
$(JUCE_OBJDIR)/include_juce_events_fd7d695.o \
|
||||
$(JUCE_OBJDIR)/include_juce_graphics_f817e147.o \
|
||||
$(JUCE_OBJDIR)/include_juce_graphics_Harfbuzz_60c52ba2.o \
|
||||
$(JUCE_OBJDIR)/include_juce_graphics_Sheenbidi_c310974d.o \
|
||||
$(JUCE_OBJDIR)/include_juce_gui_basics_e3f79785.o \
|
||||
$(JUCE_OBJDIR)/include_juce_gui_extra_6dee1c1a.o \
|
||||
$(JUCE_OBJDIR)/include_juce_javascript_84e88969.o \
|
||||
$(JUCE_OBJDIR)/include_juce_opengl_a8a032b.o \
|
||||
$(JUCE_OBJDIR)/include_juce_osc_f3df604d.o \
|
||||
$(JUCE_OBJDIR)/include_juce_product_unlocking_8278fcdc.o \
|
||||
|
|
@ -104,156 +109,191 @@ OBJECTS_APP := \
|
|||
|
||||
all : $(JUCE_OUTDIR)/$(JUCE_TARGET_APP)
|
||||
|
||||
$(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : $(OBJECTS_APP) $(RESOURCES)
|
||||
$(JUCE_OUTDIR)/$(JUCE_TARGET_APP) : $(OBJECTS_APP) $(JUCE_OBJDIR)/execinfo.cmd $(RESOURCES)
|
||||
@command -v $(PKG_CONFIG) >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; }
|
||||
@$(PKG_CONFIG) --print-errors alsa freetype2 libcurl
|
||||
@$(PKG_CONFIG) --print-errors alsa freetype2 fontconfig gl libcurl
|
||||
@echo Linking "DemoRunner - App"
|
||||
-$(V_AT)mkdir -p $(JUCE_BINDIR)
|
||||
-$(V_AT)mkdir -p $(JUCE_LIBDIR)
|
||||
-$(V_AT)mkdir -p $(JUCE_OUTDIR)
|
||||
$(V_AT)$(CXX) -o $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) $(OBJECTS_APP) $(JUCE_LDFLAGS) $(JUCE_LDFLAGS_APP) $(RESOURCES) $(TARGET_ARCH)
|
||||
$(V_AT)$(CXX) -o $(JUCE_OUTDIR)/$(JUCE_TARGET_APP) $(OBJECTS_APP) $(JUCE_LDFLAGS) $(shell cat $(JUCE_OBJDIR)/execinfo.cmd) $(JUCE_LDFLAGS_APP) $(RESOURCES) $(TARGET_ARCH)
|
||||
|
||||
$(JUCE_OBJDIR)/DemoPIPs1_5b52b434.o: ../../Source/Demos/DemoPIPs1.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling DemoPIPs1.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/DemoPIPs2_5b60cbb5.o: ../../Source/Demos/DemoPIPs2.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling DemoPIPs2.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/JUCEDemos_5a07ba05.o: ../../Source/Demos/JUCEDemos.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling JUCEDemos.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/DemoContentComponent_c5bb9cc3.o: ../../Source/UI/DemoContentComponent.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling DemoContentComponent.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/MainComponent_a54318d2.o: ../../Source/UI/MainComponent.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling MainComponent.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling Main.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_analytics_f8e9fa94.o: ../../JuceLibraryCode/include_juce_analytics.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_analytics.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_animation_c2224b92.o: ../../JuceLibraryCode/include_juce_animation.cpp
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_animation.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_audio_basics_8a4e984a.o: ../../JuceLibraryCode/include_juce_audio_basics.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_audio_basics.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_audio_devices_63111d02.o: ../../JuceLibraryCode/include_juce_audio_devices.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_audio_devices.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_audio_formats_15f82001.o: ../../JuceLibraryCode/include_juce_audio_formats.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_audio_formats.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_audio_processors_10c03666.o: ../../JuceLibraryCode/include_juce_audio_processors.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_audio_processors.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_audio_processors_ara_2a4c6ef7.o: ../../JuceLibraryCode/include_juce_audio_processors_ara.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_audio_processors_ara.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_audio_processors_lv2_libs_12bdca08.o: ../../JuceLibraryCode/include_juce_audio_processors_lv2_libs.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_audio_processors_lv2_libs.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_audio_utils_9f9fb2d6.o: ../../JuceLibraryCode/include_juce_audio_utils.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_audio_utils.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_box2d_b0305d8b.o: ../../JuceLibraryCode/include_juce_box2d.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_box2d.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_core_f26d17db.o: ../../JuceLibraryCode/include_juce_core.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_core.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_core_CompilationTime_9257742c.o: ../../JuceLibraryCode/include_juce_core_CompilationTime.cpp
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_core_CompilationTime.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_cryptography_8cb807a8.o: ../../JuceLibraryCode/include_juce_cryptography.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_cryptography.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_data_structures_7471b1e3.o: ../../JuceLibraryCode/include_juce_data_structures.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_data_structures.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_dsp_aeb2060f.o: ../../JuceLibraryCode/include_juce_dsp.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_dsp.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_events_fd7d695.o: ../../JuceLibraryCode/include_juce_events.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_events.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_graphics_f817e147.o: ../../JuceLibraryCode/include_juce_graphics.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_graphics.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_graphics_Harfbuzz_60c52ba2.o: ../../JuceLibraryCode/include_juce_graphics_Harfbuzz.cpp
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_graphics_Harfbuzz.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_graphics_Sheenbidi_c310974d.o: ../../JuceLibraryCode/include_juce_graphics_Sheenbidi.c
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_graphics_Sheenbidi.c"
|
||||
$(V_AT)$(CC) $(JUCE_CFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_gui_basics_e3f79785.o: ../../JuceLibraryCode/include_juce_gui_basics.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_gui_basics.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_gui_extra_6dee1c1a.o: ../../JuceLibraryCode/include_juce_gui_extra.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_gui_extra.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_javascript_84e88969.o: ../../JuceLibraryCode/include_juce_javascript.cpp
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_javascript.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_opengl_a8a032b.o: ../../JuceLibraryCode/include_juce_opengl.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_opengl.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_osc_f3df604d.o: ../../JuceLibraryCode/include_juce_osc.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_osc.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_product_unlocking_8278fcdc.o: ../../JuceLibraryCode/include_juce_product_unlocking.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_product_unlocking.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/include_juce_video_be78589.o: ../../JuceLibraryCode/include_juce_video.cpp
|
||||
-$(V_AT)mkdir -p $(JUCE_OBJDIR)
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
@echo "Compiling include_juce_video.cpp"
|
||||
$(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<"
|
||||
|
||||
$(JUCE_OBJDIR)/execinfo.cmd:
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
-@if [ -z "$(V_AT)" ]; then echo "Checking if we need to link libexecinfo"; fi
|
||||
$(V_AT)printf "int main() { return 0; }" | $(CXX) -x c++ -o $(@D)/execinfo.x -lexecinfo - >/dev/null 2>&1 && printf -- "-lexecinfo" > "$@" || touch "$@"
|
||||
|
||||
$(JUCE_OBJDIR)/cxxfs.cmd:
|
||||
-$(V_AT)mkdir -p $(@D)
|
||||
-@if [ -z "$(V_AT)" ]; then echo "Checking if we need to link stdc++fs"; fi
|
||||
$(V_AT)printf "int main() { return 0; }" | $(CXX) -x c++ -o $(@D)/cxxfs.x -lstdc++fs - >/dev/null 2>&1 && printf -- "-lstdc++fs" > "$@" || touch "$@"
|
||||
|
||||
clean:
|
||||
@echo Cleaning DemoRunner
|
||||
$(V_AT)$(CLEANCMD)
|
||||
|
||||
strip:
|
||||
@echo Stripping DemoRunner
|
||||
-$(V_AT)$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)
|
||||
-$(V_AT)$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(JUCE_TARGET_APP)
|
||||
|
||||
-include $(OBJECTS_APP:%.o=%.d)
|
||||
|
|
|
|||
|
|
@ -9,9 +9,13 @@
|
|||
/* Begin PBXBuildFile section */
|
||||
0140787C0118A95E37DE90B4 /* include_juce_video.mm */ = {isa = PBXBuildFile; fileRef = 9144821E003E15E4042B57DB; };
|
||||
028383D0577D0236899D8CA5 /* OpenGL.framework */ = {isa = PBXBuildFile; fileRef = 40BD06D4AB0D2C73E936A2F1; };
|
||||
05E2CC77AE99E8A2E3A18777 /* Security.framework */ = {isa = PBXBuildFile; fileRef = 87D5F938A115568F9CF3BE5A; };
|
||||
10D769051F1431A67AD2CB40 /* MetalKit.framework */ = {isa = PBXBuildFile; fileRef = 2992DB69DCFB7DADDE907385; settings = { ATTRIBUTES = (Weak, ); }; };
|
||||
11D7AB57EC28DB48A066F7AD /* include_juce_graphics_Harfbuzz.cpp */ = {isa = PBXBuildFile; fileRef = 483C3A8B4FB98B54BB42CB50; };
|
||||
1351A13E78F38741C6075600 /* CoreAudio.framework */ = {isa = PBXBuildFile; fileRef = 4F0A137A4115946A346180E6; };
|
||||
163B0CF2DD0990A63DF1D5A6 /* AudioToolbox.framework */ = {isa = PBXBuildFile; fileRef = 470C3E4553B513FFEF752779; };
|
||||
1BA301E39E29966719B710A1 /* GUI */ = {isa = PBXBuildFile; fileRef = 9EBAEBBD9093CB005D1692F2; };
|
||||
1BA36E8CA4B9E8D3F3B57D24 /* include_juce_graphics_Sheenbidi.c */ = {isa = PBXBuildFile; fileRef = CCC8AEBCE55002F970222BAD; };
|
||||
1DBDFEDE359CFC84F8E3DE4C /* include_juce_events.mm */ = {isa = PBXBuildFile; fileRef = FCD0D758C5767944BEC29730; };
|
||||
26652AB1BB77C8A39434775F /* include_juce_audio_formats.mm */ = {isa = PBXBuildFile; fileRef = E061A1C75FA5722167FC4997; };
|
||||
2707968B431D83AC7E28E49B /* include_juce_audio_processors.mm */ = {isa = PBXBuildFile; fileRef = E67AB94002886AF67437D6AE; };
|
||||
|
|
@ -23,6 +27,7 @@
|
|||
48CF0B02E1D06E5DA51E6270 /* Accelerate.framework */ = {isa = PBXBuildFile; fileRef = A04E4408525F24F7DCBA000E; };
|
||||
4FBBB55F4E347757F74F1F41 /* MainComponent.cpp */ = {isa = PBXBuildFile; fileRef = 25E5ED33876A2C752378C859; };
|
||||
527DA2E6827BAFDDD3E8E80F /* CoreAudioKit.framework */ = {isa = PBXBuildFile; fileRef = B4389672DA4CC8E0A531062D; };
|
||||
55F120E70543228568573D4A /* include_juce_animation.cpp */ = {isa = PBXBuildFile; fileRef = CB4C64BACC1CA4AAD6D69565; };
|
||||
5CB78489F16E82144914972D /* include_juce_gui_extra.mm */ = {isa = PBXBuildFile; fileRef = 979F23EA9E5E76131299E886; };
|
||||
5E4310B3F6BB639875D3E9B8 /* Foundation.framework */ = {isa = PBXBuildFile; fileRef = 49ECA8B998B339A083674A22; };
|
||||
5EB6872A39122A5AB67E544E /* include_juce_audio_processors_ara.cpp */ = {isa = PBXBuildFile; fileRef = 8D44097417573B38729A0179; };
|
||||
|
|
@ -39,6 +44,7 @@
|
|||
89AD16514B1F4133FFEA1DF9 /* WebKit.framework */ = {isa = PBXBuildFile; fileRef = 96D99A08027CA35D6A4E5CFD; };
|
||||
8C0AEA08A71075A6C765AEC9 /* AVKit.framework */ = {isa = PBXBuildFile; fileRef = 3B99CF94C44E2EE04635A439; };
|
||||
91CD2BCE4CA07E18229EB436 /* RecentFilesMenuTemplate.nib */ = {isa = PBXBuildFile; fileRef = 9672FCE6167ADB567A9EB2F8; };
|
||||
98D376BD41E5359370AD42D9 /* include_juce_core_CompilationTime.cpp */ = {isa = PBXBuildFile; fileRef = 640B7C54D35F5DF408327886; };
|
||||
9BEA1428416CE06BF72FBAB8 /* DiscRecording.framework */ = {isa = PBXBuildFile; fileRef = 3DC90DA86565B0356B6E5E0B; };
|
||||
9EACEA6BE8D0ACC72C12C080 /* include_juce_audio_devices.mm */ = {isa = PBXBuildFile; fileRef = 03A63C3CA6F24977F19C316D; };
|
||||
9F15FD7A7CE83CFD98F07D59 /* Cocoa.framework */ = {isa = PBXBuildFile; fileRef = 02A2ED58B066B4D119F67913; };
|
||||
|
|
@ -46,6 +52,7 @@
|
|||
B1981F62F6A91FD2F579A198 /* QuartzCore.framework */ = {isa = PBXBuildFile; fileRef = 23CD1A3F9067C3A0ECE7BB67; };
|
||||
B38728296BB32B7994CE28DF /* JUCEDemos.cpp */ = {isa = PBXBuildFile; fileRef = 934ACDCB3FD9D223A3481D8F; };
|
||||
BC6036F22423CA0AFF0385A7 /* include_juce_opengl.mm */ = {isa = PBXBuildFile; fileRef = 94B6C88FE30861A47CD28709; };
|
||||
BE3AD5595805C8B8845146EF /* include_juce_javascript.cpp */ = {isa = PBXBuildFile; fileRef = 4306E55904378CE5A6EB48B3; };
|
||||
C2BB2B6DA237FE0CB64C7EDA /* include_juce_analytics.cpp */ = {isa = PBXBuildFile; fileRef = 5965349393850F41DF76F350; };
|
||||
CDABEA6258EC70C65C9ACCFE /* include_juce_graphics.mm */ = {isa = PBXBuildFile; fileRef = 3E4ED41C374261CFFD309743; };
|
||||
CDEB6BA5341494AF51D07C72 /* include_juce_product_unlocking.mm */ = {isa = PBXBuildFile; fileRef = 0AB68DBAB6B7DAEDDDD5B683; };
|
||||
|
|
@ -54,6 +61,7 @@
|
|||
E2F44A968EC2598DAE33A997 /* include_juce_gui_basics.mm */ = {isa = PBXBuildFile; fileRef = A1D6D36B96B6B37C31F32829; };
|
||||
E33E8FE2E7F8EC8EB4279F1B /* Utilities */ = {isa = PBXBuildFile; fileRef = 7B3243C92248D379A0489AA4; };
|
||||
E6F58FC3ACAE774DB4D06420 /* DemoPIPs1.cpp */ = {isa = PBXBuildFile; fileRef = 3AB62BFF806112585B54DDA3; };
|
||||
EFD00925ED57B2C5EB5412FC /* Metal.framework */ = {isa = PBXBuildFile; fileRef = 3644EF58D9EB1AB436A04E77; settings = { ATTRIBUTES = (Weak, ); }; };
|
||||
F28112945CEBEA4CE8975833 /* include_juce_audio_basics.mm */ = {isa = PBXBuildFile; fileRef = 03B0F9318FD583525AB195A9; };
|
||||
F619F3887CEC064441BB6EE6 /* Main.cpp */ = {isa = PBXBuildFile; fileRef = 260481E972425474BB8155B0; };
|
||||
FF87532E62753EDFA3D29CAD /* include_juce_cryptography.mm */ = {isa = PBXBuildFile; fileRef = 6C5E26B4D28F8450435B8AE1; };
|
||||
|
|
@ -74,14 +82,18 @@
|
|||
23CD1A3F9067C3A0ECE7BB67 /* QuartzCore.framework */ /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
||||
25E5ED33876A2C752378C859 /* MainComponent.cpp */ /* MainComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MainComponent.cpp; path = ../../Source/UI/MainComponent.cpp; sourceTree = SOURCE_ROOT; };
|
||||
260481E972425474BB8155B0 /* Main.cpp */ /* Main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = SOURCE_ROOT; };
|
||||
2992DB69DCFB7DADDE907385 /* MetalKit.framework */ /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; };
|
||||
346450C70C964FD9640B6086 /* juce_audio_processors */ /* juce_audio_processors */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_processors; path = ../../../../modules/juce_audio_processors; sourceTree = SOURCE_ROOT; };
|
||||
3644EF58D9EB1AB436A04E77 /* Metal.framework */ /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
|
||||
3AB62BFF806112585B54DDA3 /* DemoPIPs1.cpp */ /* DemoPIPs1.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = DemoPIPs1.cpp; path = ../../Source/Demos/DemoPIPs1.cpp; sourceTree = SOURCE_ROOT; };
|
||||
3B99CF94C44E2EE04635A439 /* AVKit.framework */ /* AVKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVKit.framework; path = System/Library/Frameworks/AVKit.framework; sourceTree = SDKROOT; };
|
||||
3BC9753E0CD75A36DC742EE0 /* include_juce_core.mm */ /* include_juce_core.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_core.mm; path = ../../JuceLibraryCode/include_juce_core.mm; sourceTree = SOURCE_ROOT; };
|
||||
3DC90DA86565B0356B6E5E0B /* DiscRecording.framework */ /* DiscRecording.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DiscRecording.framework; path = System/Library/Frameworks/DiscRecording.framework; sourceTree = SDKROOT; };
|
||||
3E4ED41C374261CFFD309743 /* include_juce_graphics.mm */ /* include_juce_graphics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_graphics.mm; path = ../../JuceLibraryCode/include_juce_graphics.mm; sourceTree = SOURCE_ROOT; };
|
||||
40BD06D4AB0D2C73E936A2F1 /* OpenGL.framework */ /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
|
||||
4306E55904378CE5A6EB48B3 /* include_juce_javascript.cpp */ /* include_juce_javascript.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_javascript.cpp; path = ../../JuceLibraryCode/include_juce_javascript.cpp; sourceTree = SOURCE_ROOT; };
|
||||
470C3E4553B513FFEF752779 /* AudioToolbox.framework */ /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
|
||||
483C3A8B4FB98B54BB42CB50 /* include_juce_graphics_Harfbuzz.cpp */ /* include_juce_graphics_Harfbuzz.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_graphics_Harfbuzz.cpp; path = ../../JuceLibraryCode/include_juce_graphics_Harfbuzz.cpp; sourceTree = SOURCE_ROOT; };
|
||||
491641F7632BCC81BBA0ED85 /* juce_audio_formats */ /* juce_audio_formats */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_formats; path = ../../../../modules/juce_audio_formats; sourceTree = SOURCE_ROOT; };
|
||||
49ECA8B998B339A083674A22 /* Foundation.framework */ /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
4DF215D350FFE5E119CBA7E5 /* include_juce_box2d.cpp */ /* include_juce_box2d.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_box2d.cpp; path = ../../JuceLibraryCode/include_juce_box2d.cpp; sourceTree = SOURCE_ROOT; };
|
||||
|
|
@ -95,6 +107,7 @@
|
|||
5CD17151385A69F1E07FE85B /* DSP */ /* DSP */ = {isa = PBXFileReference; lastKnownFileType = folder; name = DSP; path = ../../../DSP; sourceTree = "<group>"; };
|
||||
60F2869DC345EAF2314D6C09 /* juce_audio_devices */ /* juce_audio_devices */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_devices; path = ../../../../modules/juce_audio_devices; sourceTree = SOURCE_ROOT; };
|
||||
61AE09C749B007B70A265D9B /* CoreMIDI.framework */ /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; };
|
||||
640B7C54D35F5DF408327886 /* include_juce_core_CompilationTime.cpp */ /* include_juce_core_CompilationTime.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_core_CompilationTime.cpp; path = ../../JuceLibraryCode/include_juce_core_CompilationTime.cpp; sourceTree = SOURCE_ROOT; };
|
||||
651ECE3C7BA845DDCFEE48F3 /* juce_osc */ /* juce_osc */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_osc; path = ../../../../modules/juce_osc; sourceTree = SOURCE_ROOT; };
|
||||
6847A9B2C5E3C2ED56D8D4E7 /* juce_audio_basics */ /* juce_audio_basics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_basics; path = ../../../../modules/juce_audio_basics; sourceTree = SOURCE_ROOT; };
|
||||
685A261BE78585293F3EAD36 /* Assets */ /* Assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Assets; path = ../../../Assets; sourceTree = "<group>"; };
|
||||
|
|
@ -104,6 +117,8 @@
|
|||
71A91516AFD980FEE694C0E1 /* IOKit.framework */ /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
|
||||
7A5AAE9EE573FC6105CC4AAC /* SettingsContent.h */ /* SettingsContent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SettingsContent.h; path = ../../Source/UI/SettingsContent.h; sourceTree = SOURCE_ROOT; };
|
||||
7B3243C92248D379A0489AA4 /* Utilities */ /* Utilities */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Utilities; path = ../../../Utilities; sourceTree = "<group>"; };
|
||||
8447FC9882D85E6DAF0A4852 /* juce_animation */ /* juce_animation */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_animation; path = ../../../../modules/juce_animation; sourceTree = SOURCE_ROOT; };
|
||||
87D5F938A115568F9CF3BE5A /* Security.framework */ /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
|
||||
8CE533D611CD0984AD028D73 /* juce_graphics */ /* juce_graphics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_graphics; path = ../../../../modules/juce_graphics; sourceTree = SOURCE_ROOT; };
|
||||
8D44097417573B38729A0179 /* include_juce_audio_processors_ara.cpp */ /* include_juce_audio_processors_ara.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_audio_processors_ara.cpp; path = ../../JuceLibraryCode/include_juce_audio_processors_ara.cpp; sourceTree = SOURCE_ROOT; };
|
||||
903CD4126C779884797EF915 /* juce_core */ /* juce_core */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_core; path = ../../../../modules/juce_core; sourceTree = SOURCE_ROOT; };
|
||||
|
|
@ -122,6 +137,9 @@
|
|||
B2BC383CE102EECCF49C7AF7 /* IntroScreen.h */ /* IntroScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = IntroScreen.h; path = ../../Source/Demos/IntroScreen.h; sourceTree = SOURCE_ROOT; };
|
||||
B4389672DA4CC8E0A531062D /* CoreAudioKit.framework */ /* CoreAudioKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; };
|
||||
C1E93FAF6C68A40A664422CD /* include_juce_dsp.mm */ /* include_juce_dsp.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_dsp.mm; path = ../../JuceLibraryCode/include_juce_dsp.mm; sourceTree = SOURCE_ROOT; };
|
||||
C64CA4082EC267CDD63E6623 /* juce_javascript */ /* juce_javascript */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_javascript; path = ../../../../modules/juce_javascript; sourceTree = SOURCE_ROOT; };
|
||||
CB4C64BACC1CA4AAD6D69565 /* include_juce_animation.cpp */ /* include_juce_animation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_animation.cpp; path = ../../JuceLibraryCode/include_juce_animation.cpp; sourceTree = SOURCE_ROOT; };
|
||||
CCC8AEBCE55002F970222BAD /* include_juce_graphics_Sheenbidi.c */ /* include_juce_graphics_Sheenbidi.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = include_juce_graphics_Sheenbidi.c; path = ../../JuceLibraryCode/include_juce_graphics_Sheenbidi.c; sourceTree = SOURCE_ROOT; };
|
||||
CE38E6469D98462A2C22C915 /* include_juce_osc.cpp */ /* include_juce_osc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_osc.cpp; path = ../../JuceLibraryCode/include_juce_osc.cpp; sourceTree = SOURCE_ROOT; };
|
||||
CFF2BBEB242CC8B3B904B5F9 /* App */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DemoRunner.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
DC192EFA899E6CBE6B5CD394 /* AVFoundation.framework */ /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
|
||||
|
|
@ -158,7 +176,10 @@
|
|||
8584640341100008744861A5,
|
||||
028383D0577D0236899D8CA5,
|
||||
B1981F62F6A91FD2F579A198,
|
||||
05E2CC77AE99E8A2E3A18777,
|
||||
89AD16514B1F4133FFEA1DF9,
|
||||
EFD00925ED57B2C5EB5412FC,
|
||||
10D769051F1431A67AD2CB40,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -182,7 +203,10 @@
|
|||
71A91516AFD980FEE694C0E1,
|
||||
40BD06D4AB0D2C73E936A2F1,
|
||||
23CD1A3F9067C3A0ECE7BB67,
|
||||
87D5F938A115568F9CF3BE5A,
|
||||
96D99A08027CA35D6A4E5CFD,
|
||||
3644EF58D9EB1AB436A04E77,
|
||||
2992DB69DCFB7DADDE907385,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -191,6 +215,7 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
112FFCB73597157E721BCDF2,
|
||||
8447FC9882D85E6DAF0A4852,
|
||||
6847A9B2C5E3C2ED56D8D4E7,
|
||||
60F2869DC345EAF2314D6C09,
|
||||
491641F7632BCC81BBA0ED85,
|
||||
|
|
@ -205,6 +230,7 @@
|
|||
8CE533D611CD0984AD028D73,
|
||||
5A9F2000C66D24E8B01BE60B,
|
||||
A9315F8368A5771EC39631CB,
|
||||
C64CA4082EC267CDD63E6623,
|
||||
6C198AF93E1F6E682189E2F6,
|
||||
651ECE3C7BA845DDCFEE48F3,
|
||||
4FE6029FF76BCE9698595DC5,
|
||||
|
|
@ -217,6 +243,7 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
5965349393850F41DF76F350,
|
||||
CB4C64BACC1CA4AAD6D69565,
|
||||
03B0F9318FD583525AB195A9,
|
||||
03A63C3CA6F24977F19C316D,
|
||||
E061A1C75FA5722167FC4997,
|
||||
|
|
@ -226,13 +253,17 @@
|
|||
EDDA01B246C6128CAF7A2914,
|
||||
4DF215D350FFE5E119CBA7E5,
|
||||
3BC9753E0CD75A36DC742EE0,
|
||||
640B7C54D35F5DF408327886,
|
||||
6C5E26B4D28F8450435B8AE1,
|
||||
F5F2EA2238973488632FC322,
|
||||
C1E93FAF6C68A40A664422CD,
|
||||
FCD0D758C5767944BEC29730,
|
||||
3E4ED41C374261CFFD309743,
|
||||
483C3A8B4FB98B54BB42CB50,
|
||||
CCC8AEBCE55002F970222BAD,
|
||||
A1D6D36B96B6B37C31F32829,
|
||||
979F23EA9E5E76131299E886,
|
||||
4306E55904378CE5A6EB48B3,
|
||||
94B6C88FE30861A47CD28709,
|
||||
CE38E6469D98462A2C22C915,
|
||||
0AB68DBAB6B7DAEDDDD5B683,
|
||||
|
|
@ -347,6 +378,7 @@
|
|||
AC6F0E9A0809A184B2C2B7DE = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1340;
|
||||
ORGANIZATIONNAME = "Raw Material Software Limited";
|
||||
TargetAttributes = {
|
||||
|
|
@ -419,6 +451,7 @@
|
|||
4FBBB55F4E347757F74F1F41,
|
||||
F619F3887CEC064441BB6EE6,
|
||||
C2BB2B6DA237FE0CB64C7EDA,
|
||||
55F120E70543228568573D4A,
|
||||
F28112945CEBEA4CE8975833,
|
||||
9EACEA6BE8D0ACC72C12C080,
|
||||
26652AB1BB77C8A39434775F,
|
||||
|
|
@ -428,13 +461,17 @@
|
|||
712D81867EC698463252FA79,
|
||||
611298FAC1A543BDD10D4C41,
|
||||
D183F8140174ACCDDCD230A2,
|
||||
98D376BD41E5359370AD42D9,
|
||||
FF87532E62753EDFA3D29CAD,
|
||||
2F76CA28C8C0EFC7453D0EB8,
|
||||
6B5560283DEEBD6DD2D6C984,
|
||||
1DBDFEDE359CFC84F8E3DE4C,
|
||||
CDABEA6258EC70C65C9ACCFE,
|
||||
11D7AB57EC28DB48A066F7AD,
|
||||
1BA36E8CA4B9E8D3F3B57D24,
|
||||
E2F44A968EC2598DAE33A997,
|
||||
5CB78489F16E82144914972D,
|
||||
BE3AD5595805C8B8845146EF,
|
||||
BC6036F22423CA0AFF0385A7,
|
||||
AEA090DAC5C747C50C7D3FA7,
|
||||
CDEB6BA5341494AF51D07C72,
|
||||
|
|
@ -485,6 +522,7 @@
|
|||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
OTHER_CODE_SIGN_FLAGS = --timestamp;
|
||||
PRODUCT_NAME = "DemoRunner";
|
||||
SDKROOT = macosx;
|
||||
WARNING_CFLAGS = "-Wreorder";
|
||||
|
|
@ -507,10 +545,9 @@
|
|||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"_NDEBUG=1",
|
||||
"NDEBUG=1",
|
||||
"JUCE_DISPLAY_SPLASH_SCREEN=0",
|
||||
"JUCE_USE_DARK_SPLASH_SCREEN=1",
|
||||
"JUCE_PROJUCER_VERSION=0x70004",
|
||||
"JUCE_PROJUCER_VERSION=0x80004",
|
||||
"JUCE_MODULE_AVAILABLE_juce_analytics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_animation=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
|
||||
|
|
@ -525,6 +562,7 @@
|
|||
"JUCE_MODULE_AVAILABLE_juce_graphics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_gui_basics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_gui_extra=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_javascript=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_opengl=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_osc=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_product_unlocking=1",
|
||||
|
|
@ -539,9 +577,10 @@
|
|||
"JUCE_STANDALONE_APPLICATION=1",
|
||||
"JUCE_DEMO_RUNNER=1",
|
||||
"JUCE_UNIT_TESTS=1",
|
||||
"JUCE_SILENCE_XCODE_15_LINKER_WARNING=1",
|
||||
"JUCER_XCODE_MAC_F6D2F4CF=1",
|
||||
"JUCE_APP_VERSION=7.0.4",
|
||||
"JUCE_APP_VERSION_HEX=0x70004",
|
||||
"JUCE_APP_VERSION=8.0.4",
|
||||
"JUCE_APP_VERSION_HEX=0x80004",
|
||||
"JucePlugin_Build_VST=0",
|
||||
"JucePlugin_Build_VST3=0",
|
||||
"JucePlugin_Build_AU=0",
|
||||
|
|
@ -572,9 +611,9 @@
|
|||
LLVM_LTO = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
|
||||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
|
||||
OTHER_CFLAGS = "-Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_LDFLAGS = "-Wl,-weak_reference_mismatches,weak";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner;
|
||||
PRODUCT_NAME = "DemoRunner";
|
||||
USE_HEADERMAP = NO;
|
||||
|
|
@ -598,10 +637,9 @@
|
|||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"_DEBUG=1",
|
||||
"DEBUG=1",
|
||||
"JUCE_DISPLAY_SPLASH_SCREEN=0",
|
||||
"JUCE_USE_DARK_SPLASH_SCREEN=1",
|
||||
"JUCE_PROJUCER_VERSION=0x70004",
|
||||
"JUCE_PROJUCER_VERSION=0x80004",
|
||||
"JUCE_MODULE_AVAILABLE_juce_analytics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_animation=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
|
||||
|
|
@ -616,6 +654,7 @@
|
|||
"JUCE_MODULE_AVAILABLE_juce_graphics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_gui_basics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_gui_extra=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_javascript=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_opengl=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_osc=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_product_unlocking=1",
|
||||
|
|
@ -630,9 +669,10 @@
|
|||
"JUCE_STANDALONE_APPLICATION=1",
|
||||
"JUCE_DEMO_RUNNER=1",
|
||||
"JUCE_UNIT_TESTS=1",
|
||||
"JUCE_SILENCE_XCODE_15_LINKER_WARNING=1",
|
||||
"JUCER_XCODE_MAC_F6D2F4CF=1",
|
||||
"JUCE_APP_VERSION=7.0.4",
|
||||
"JUCE_APP_VERSION_HEX=0x70004",
|
||||
"JUCE_APP_VERSION=8.0.4",
|
||||
"JUCE_APP_VERSION_HEX=0x80004",
|
||||
"JucePlugin_Build_VST=0",
|
||||
"JucePlugin_Build_VST3=0",
|
||||
"JucePlugin_Build_AU=0",
|
||||
|
|
@ -662,9 +702,9 @@
|
|||
INSTALL_PATH = "$(HOME)/Applications";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
|
||||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit";
|
||||
OTHER_CFLAGS = "-Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_LDFLAGS = "-Wl,-weak_reference_mismatches,weak";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner;
|
||||
PRODUCT_NAME = "DemoRunner";
|
||||
USE_HEADERMAP = NO;
|
||||
|
|
@ -714,6 +754,7 @@
|
|||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_CODE_SIGN_FLAGS = --timestamp;
|
||||
PRODUCT_NAME = "DemoRunner";
|
||||
SDKROOT = macosx;
|
||||
WARNING_CFLAGS = "-Wreorder";
|
||||
|
|
|
|||
|
|
@ -24,11 +24,11 @@
|
|||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>7.0.4</string>
|
||||
<string>8.0.4</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>7.0.4</string>
|
||||
<string>8.0.4</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright (c) 2020 - Raw Material Software Limited</string>
|
||||
<string>Copyright (c) - Raw Material Software Limited</string>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<true/>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
|
|
|
|||
|
|
@ -1,21 +0,0 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
||||
# Visual Studio 15
|
||||
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DemoRunner - App", "DemoRunner_App.vcxproj", "{882FE2E3-F4EF-9825-1908-F6FEE5366B5C}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{882FE2E3-F4EF-9825-1908-F6FEE5366B5C}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{882FE2E3-F4EF-9825-1908-F6FEE5366B5C}.Debug|x64.Build.0 = Debug|x64
|
||||
{882FE2E3-F4EF-9825-1908-F6FEE5366B5C}.Release|x64.ActiveCfg = Release|x64
|
||||
{882FE2E3-F4EF-9825-1908-F6FEE5366B5C}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 44 KiB |
|
|
@ -1,36 +0,0 @@
|
|||
#pragma code_page(65001)
|
||||
|
||||
#ifdef JUCE_USER_DEFINED_RC_FILE
|
||||
#include JUCE_USER_DEFINED_RC_FILE
|
||||
#else
|
||||
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 7,0,4,0
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904E4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Raw Material Software Limited\0"
|
||||
VALUE "LegalCopyright", "Copyright (c) 2020 - Raw Material Software Limited\0"
|
||||
VALUE "FileDescription", "DemoRunner\0"
|
||||
VALUE "FileVersion", "7.0.4\0"
|
||||
VALUE "ProductName", "DemoRunner\0"
|
||||
VALUE "ProductVersion", "7.0.4\0"
|
||||
END
|
||||
END
|
||||
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1252
|
||||
END
|
||||
END
|
||||
|
||||
#endif
|
||||
|
||||
IDI_ICON1 ICON DISCARDABLE "icon.ico"
|
||||
IDI_ICON2 ICON DISCARDABLE "icon.ico"
|
||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -9,18 +9,18 @@
|
|||
#include <windows.h>
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 7,0,4,0
|
||||
FILEVERSION 8,0,4,0
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904E4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Raw Material Software Limited\0"
|
||||
VALUE "LegalCopyright", "Copyright (c) 2020 - Raw Material Software Limited\0"
|
||||
VALUE "LegalCopyright", "Copyright (c) - Raw Material Software Limited\0"
|
||||
VALUE "FileDescription", "DemoRunner\0"
|
||||
VALUE "FileVersion", "7.0.4\0"
|
||||
VALUE "FileVersion", "8.0.4\0"
|
||||
VALUE "ProductName", "DemoRunner\0"
|
||||
VALUE "ProductVersion", "7.0.4\0"
|
||||
VALUE "ProductVersion", "8.0.4\0"
|
||||
END
|
||||
END
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -9,18 +9,18 @@
|
|||
#include <windows.h>
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 7,0,4,0
|
||||
FILEVERSION 8,0,4,0
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904E4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Raw Material Software Limited\0"
|
||||
VALUE "LegalCopyright", "Copyright (c) 2020 - Raw Material Software Limited\0"
|
||||
VALUE "LegalCopyright", "Copyright (c) - Raw Material Software Limited\0"
|
||||
VALUE "FileDescription", "DemoRunner\0"
|
||||
VALUE "FileVersion", "7.0.4\0"
|
||||
VALUE "FileVersion", "8.0.4\0"
|
||||
VALUE "ProductName", "DemoRunner\0"
|
||||
VALUE "ProductVersion", "7.0.4\0"
|
||||
VALUE "ProductVersion", "8.0.4\0"
|
||||
END
|
||||
END
|
||||
|
||||
|
|
|
|||
|
|
@ -9,8 +9,11 @@
|
|||
/* Begin PBXBuildFile section */
|
||||
0140787C0118A95E37DE90B4 /* include_juce_video.mm */ = {isa = PBXBuildFile; fileRef = 9144821E003E15E4042B57DB; };
|
||||
0B0CE6D5062E5C02A41F24BC /* CoreText.framework */ = {isa = PBXBuildFile; fileRef = 873F9DD54978E601102353B4; };
|
||||
10D769051F1431A67AD2CB40 /* MetalKit.framework */ = {isa = PBXBuildFile; fileRef = 2992DB69DCFB7DADDE907385; settings = { ATTRIBUTES = (Weak, ); }; };
|
||||
11D7AB57EC28DB48A066F7AD /* include_juce_graphics_Harfbuzz.cpp */ = {isa = PBXBuildFile; fileRef = 483C3A8B4FB98B54BB42CB50; };
|
||||
1351A13E78F38741C6075600 /* CoreAudio.framework */ = {isa = PBXBuildFile; fileRef = 4F0A137A4115946A346180E6; };
|
||||
163B0CF2DD0990A63DF1D5A6 /* AudioToolbox.framework */ = {isa = PBXBuildFile; fileRef = 470C3E4553B513FFEF752779; };
|
||||
1BA36E8CA4B9E8D3F3B57D24 /* include_juce_graphics_Sheenbidi.c */ = {isa = PBXBuildFile; fileRef = CCC8AEBCE55002F970222BAD; };
|
||||
1C9AA8660D0DE180064ACF7B /* LaunchScreen.storyboard */ = {isa = PBXBuildFile; fileRef = 7FBD555B32197FEACDFF5AFB; };
|
||||
1DBDFEDE359CFC84F8E3DE4C /* include_juce_events.mm */ = {isa = PBXBuildFile; fileRef = FCD0D758C5767944BEC29730; };
|
||||
26652AB1BB77C8A39434775F /* include_juce_audio_formats.mm */ = {isa = PBXBuildFile; fileRef = E061A1C75FA5722167FC4997; };
|
||||
|
|
@ -18,11 +21,13 @@
|
|||
2F76CA28C8C0EFC7453D0EB8 /* include_juce_data_structures.mm */ = {isa = PBXBuildFile; fileRef = F5F2EA2238973488632FC322; };
|
||||
34A4931AF1DD424D3A400EEF /* CoreGraphics.framework */ = {isa = PBXBuildFile; fileRef = 76A157A111866670A4678F04; };
|
||||
36E115D98311F12AA06710E6 /* DemoPIPs2.cpp */ = {isa = PBXBuildFile; fileRef = 061AECBF1CC7056F4155812D; };
|
||||
41AE56F8671DFE80720A6A18 /* UniformTypeIdentifiers.framework */ = {isa = PBXBuildFile; fileRef = AAF88452B7774FB605990B31; settings = { ATTRIBUTES = (Weak, ); }; };
|
||||
46071CE2B98B562B7BF27CB1 /* CoreMedia.framework */ = {isa = PBXBuildFile; fileRef = 1CFE3935A3B810D5D68A2504; };
|
||||
47ED2C78B05B8A6A00E36C46 /* Assets */ = {isa = PBXBuildFile; fileRef = 685A261BE78585293F3EAD36; };
|
||||
48CF0B02E1D06E5DA51E6270 /* Accelerate.framework */ = {isa = PBXBuildFile; fileRef = A04E4408525F24F7DCBA000E; };
|
||||
4FBBB55F4E347757F74F1F41 /* MainComponent.cpp */ = {isa = PBXBuildFile; fileRef = 25E5ED33876A2C752378C859; };
|
||||
527DA2E6827BAFDDD3E8E80F /* CoreAudioKit.framework */ = {isa = PBXBuildFile; fileRef = B4389672DA4CC8E0A531062D; };
|
||||
55F120E70543228568573D4A /* include_juce_animation.cpp */ = {isa = PBXBuildFile; fileRef = CB4C64BACC1CA4AAD6D69565; };
|
||||
5CB78489F16E82144914972D /* include_juce_gui_extra.mm */ = {isa = PBXBuildFile; fileRef = 979F23EA9E5E76131299E886; };
|
||||
5E4310B3F6BB639875D3E9B8 /* Foundation.framework */ = {isa = PBXBuildFile; fileRef = 49ECA8B998B339A083674A22; };
|
||||
5EB6872A39122A5AB67E544E /* include_juce_audio_processors_ara.cpp */ = {isa = PBXBuildFile; fileRef = 8D44097417573B38729A0179; };
|
||||
|
|
@ -40,6 +45,8 @@
|
|||
89AD16514B1F4133FFEA1DF9 /* WebKit.framework */ = {isa = PBXBuildFile; fileRef = 96D99A08027CA35D6A4E5CFD; };
|
||||
8C0AEA08A71075A6C765AEC9 /* AVKit.framework */ = {isa = PBXBuildFile; fileRef = 3B99CF94C44E2EE04635A439; };
|
||||
8E63755144E29269FD82C897 /* Images.xcassets */ = {isa = PBXBuildFile; fileRef = 8135645508EEFDBDCDF2ADC6; };
|
||||
9641E7E4F0B5C2A1B3E8709A /* UserNotifications.framework */ = {isa = PBXBuildFile; fileRef = 40D006CCDB1D33FF94B6ECAE; settings = { ATTRIBUTES = (Weak, ); }; };
|
||||
98D376BD41E5359370AD42D9 /* include_juce_core_CompilationTime.cpp */ = {isa = PBXBuildFile; fileRef = 640B7C54D35F5DF408327886; };
|
||||
9EACEA6BE8D0ACC72C12C080 /* include_juce_audio_devices.mm */ = {isa = PBXBuildFile; fileRef = 03A63C3CA6F24977F19C316D; };
|
||||
AC783ECD84496E0B77911EEE /* OpenGLES.framework */ = {isa = PBXBuildFile; fileRef = 34F1320BC5C23702C08DF9F0; };
|
||||
AE7FB2AC3885F4BF53A5DDA1 /* ImageIO.framework */ = {isa = PBXBuildFile; fileRef = 7983C452610C1638B7E78F12; };
|
||||
|
|
@ -47,6 +54,7 @@
|
|||
B1981F62F6A91FD2F579A198 /* QuartzCore.framework */ = {isa = PBXBuildFile; fileRef = 23CD1A3F9067C3A0ECE7BB67; };
|
||||
B38728296BB32B7994CE28DF /* JUCEDemos.cpp */ = {isa = PBXBuildFile; fileRef = 934ACDCB3FD9D223A3481D8F; };
|
||||
BC6036F22423CA0AFF0385A7 /* include_juce_opengl.mm */ = {isa = PBXBuildFile; fileRef = 94B6C88FE30861A47CD28709; };
|
||||
BE3AD5595805C8B8845146EF /* include_juce_javascript.cpp */ = {isa = PBXBuildFile; fileRef = 4306E55904378CE5A6EB48B3; };
|
||||
C2BB2B6DA237FE0CB64C7EDA /* include_juce_analytics.cpp */ = {isa = PBXBuildFile; fileRef = 5965349393850F41DF76F350; };
|
||||
CDABEA6258EC70C65C9ACCFE /* include_juce_graphics.mm */ = {isa = PBXBuildFile; fileRef = 3E4ED41C374261CFFD309743; };
|
||||
CDEB6BA5341494AF51D07C72 /* include_juce_product_unlocking.mm */ = {isa = PBXBuildFile; fileRef = 0AB68DBAB6B7DAEDDDD5B683; };
|
||||
|
|
@ -54,6 +62,7 @@
|
|||
E2F44A968EC2598DAE33A997 /* include_juce_gui_basics.mm */ = {isa = PBXBuildFile; fileRef = A1D6D36B96B6B37C31F32829; };
|
||||
E6F58FC3ACAE774DB4D06420 /* DemoPIPs1.cpp */ = {isa = PBXBuildFile; fileRef = 3AB62BFF806112585B54DDA3; };
|
||||
ECA44A41DA8A935178C1A1F4 /* UIKit.framework */ = {isa = PBXBuildFile; fileRef = F90C8B0233A54F1445343F67; };
|
||||
EFD00925ED57B2C5EB5412FC /* Metal.framework */ = {isa = PBXBuildFile; fileRef = 3644EF58D9EB1AB436A04E77; settings = { ATTRIBUTES = (Weak, ); }; };
|
||||
F28112945CEBEA4CE8975833 /* include_juce_audio_basics.mm */ = {isa = PBXBuildFile; fileRef = 03B0F9318FD583525AB195A9; };
|
||||
F619F3887CEC064441BB6EE6 /* Main.cpp */ = {isa = PBXBuildFile; fileRef = 260481E972425474BB8155B0; };
|
||||
FF87532E62753EDFA3D29CAD /* include_juce_cryptography.mm */ = {isa = PBXBuildFile; fileRef = 6C5E26B4D28F8450435B8AE1; };
|
||||
|
|
@ -72,14 +81,19 @@
|
|||
23CD1A3F9067C3A0ECE7BB67 /* QuartzCore.framework */ /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
||||
25E5ED33876A2C752378C859 /* MainComponent.cpp */ /* MainComponent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = MainComponent.cpp; path = ../../Source/UI/MainComponent.cpp; sourceTree = SOURCE_ROOT; };
|
||||
260481E972425474BB8155B0 /* Main.cpp */ /* Main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Main.cpp; path = ../../Source/Main.cpp; sourceTree = SOURCE_ROOT; };
|
||||
2992DB69DCFB7DADDE907385 /* MetalKit.framework */ /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; };
|
||||
2CDA0CB288452DA016E874BC /* App.entitlements */ /* App.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = App.entitlements; path = App.entitlements; sourceTree = SOURCE_ROOT; };
|
||||
346450C70C964FD9640B6086 /* juce_audio_processors */ /* juce_audio_processors */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_processors; path = ../../../../modules/juce_audio_processors; sourceTree = SOURCE_ROOT; };
|
||||
34F1320BC5C23702C08DF9F0 /* OpenGLES.framework */ /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
|
||||
3644EF58D9EB1AB436A04E77 /* Metal.framework */ /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; };
|
||||
3AB62BFF806112585B54DDA3 /* DemoPIPs1.cpp */ /* DemoPIPs1.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = DemoPIPs1.cpp; path = ../../Source/Demos/DemoPIPs1.cpp; sourceTree = SOURCE_ROOT; };
|
||||
3B99CF94C44E2EE04635A439 /* AVKit.framework */ /* AVKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVKit.framework; path = System/Library/Frameworks/AVKit.framework; sourceTree = SDKROOT; };
|
||||
3BC9753E0CD75A36DC742EE0 /* include_juce_core.mm */ /* include_juce_core.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_core.mm; path = ../../JuceLibraryCode/include_juce_core.mm; sourceTree = SOURCE_ROOT; };
|
||||
3E4ED41C374261CFFD309743 /* include_juce_graphics.mm */ /* include_juce_graphics.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_graphics.mm; path = ../../JuceLibraryCode/include_juce_graphics.mm; sourceTree = SOURCE_ROOT; };
|
||||
40D006CCDB1D33FF94B6ECAE /* UserNotifications.framework */ /* UserNotifications.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotifications.framework; path = System/Library/Frameworks/UserNotifications.framework; sourceTree = SDKROOT; };
|
||||
4306E55904378CE5A6EB48B3 /* include_juce_javascript.cpp */ /* include_juce_javascript.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_javascript.cpp; path = ../../JuceLibraryCode/include_juce_javascript.cpp; sourceTree = SOURCE_ROOT; };
|
||||
470C3E4553B513FFEF752779 /* AudioToolbox.framework */ /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
|
||||
483C3A8B4FB98B54BB42CB50 /* include_juce_graphics_Harfbuzz.cpp */ /* include_juce_graphics_Harfbuzz.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_graphics_Harfbuzz.cpp; path = ../../JuceLibraryCode/include_juce_graphics_Harfbuzz.cpp; sourceTree = SOURCE_ROOT; };
|
||||
491641F7632BCC81BBA0ED85 /* juce_audio_formats */ /* juce_audio_formats */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_formats; path = ../../../../modules/juce_audio_formats; sourceTree = SOURCE_ROOT; };
|
||||
49ECA8B998B339A083674A22 /* Foundation.framework */ /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
4DF215D350FFE5E119CBA7E5 /* include_juce_box2d.cpp */ /* include_juce_box2d.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_box2d.cpp; path = ../../JuceLibraryCode/include_juce_box2d.cpp; sourceTree = SOURCE_ROOT; };
|
||||
|
|
@ -92,6 +106,7 @@
|
|||
5BD7D121AD30987C08BE10E8 /* include_juce_audio_processors_lv2_libs.cpp */ /* include_juce_audio_processors_lv2_libs.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_audio_processors_lv2_libs.cpp; path = ../../JuceLibraryCode/include_juce_audio_processors_lv2_libs.cpp; sourceTree = SOURCE_ROOT; };
|
||||
60F2869DC345EAF2314D6C09 /* juce_audio_devices */ /* juce_audio_devices */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_devices; path = ../../../../modules/juce_audio_devices; sourceTree = SOURCE_ROOT; };
|
||||
61AE09C749B007B70A265D9B /* CoreMIDI.framework */ /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; };
|
||||
640B7C54D35F5DF408327886 /* include_juce_core_CompilationTime.cpp */ /* include_juce_core_CompilationTime.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_core_CompilationTime.cpp; path = ../../JuceLibraryCode/include_juce_core_CompilationTime.cpp; sourceTree = SOURCE_ROOT; };
|
||||
651ECE3C7BA845DDCFEE48F3 /* juce_osc */ /* juce_osc */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_osc; path = ../../../../modules/juce_osc; sourceTree = SOURCE_ROOT; };
|
||||
6847A9B2C5E3C2ED56D8D4E7 /* juce_audio_basics */ /* juce_audio_basics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_audio_basics; path = ../../../../modules/juce_audio_basics; sourceTree = SOURCE_ROOT; };
|
||||
685A261BE78585293F3EAD36 /* Assets */ /* Assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Assets; path = ../../../Assets; sourceTree = "<group>"; };
|
||||
|
|
@ -103,6 +118,7 @@
|
|||
7A5AAE9EE573FC6105CC4AAC /* SettingsContent.h */ /* SettingsContent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SettingsContent.h; path = ../../Source/UI/SettingsContent.h; sourceTree = SOURCE_ROOT; };
|
||||
7FBD555B32197FEACDFF5AFB /* LaunchScreen.storyboard */ /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = LaunchScreen.storyboard; sourceTree = SOURCE_ROOT; };
|
||||
8135645508EEFDBDCDF2ADC6 /* Images.xcassets */ /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = DemoRunner/Images.xcassets; sourceTree = SOURCE_ROOT; };
|
||||
8447FC9882D85E6DAF0A4852 /* juce_animation */ /* juce_animation */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_animation; path = ../../../../modules/juce_animation; sourceTree = SOURCE_ROOT; };
|
||||
873F9DD54978E601102353B4 /* CoreText.framework */ /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; };
|
||||
8CE533D611CD0984AD028D73 /* juce_graphics */ /* juce_graphics */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_graphics; path = ../../../../modules/juce_graphics; sourceTree = SOURCE_ROOT; };
|
||||
8D44097417573B38729A0179 /* include_juce_audio_processors_ara.cpp */ /* include_juce_audio_processors_ara.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_audio_processors_ara.cpp; path = ../../JuceLibraryCode/include_juce_audio_processors_ara.cpp; sourceTree = SOURCE_ROOT; };
|
||||
|
|
@ -117,10 +133,14 @@
|
|||
A5256778E2EBD206B337B555 /* juce_video */ /* juce_video */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_video; path = ../../../../modules/juce_video; sourceTree = SOURCE_ROOT; };
|
||||
A6F555BE0DDF01C285BD8BF5 /* juce_dsp */ /* juce_dsp */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_dsp; path = ../../../../modules/juce_dsp; sourceTree = SOURCE_ROOT; };
|
||||
A9315F8368A5771EC39631CB /* juce_gui_extra */ /* juce_gui_extra */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_gui_extra; path = ../../../../modules/juce_gui_extra; sourceTree = SOURCE_ROOT; };
|
||||
AAF88452B7774FB605990B31 /* UniformTypeIdentifiers.framework */ /* UniformTypeIdentifiers.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UniformTypeIdentifiers.framework; path = System/Library/Frameworks/UniformTypeIdentifiers.framework; sourceTree = SDKROOT; };
|
||||
B28EFB9D1DF0B6D6499A7DEF /* CoreImage.framework */ /* CoreImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = System/Library/Frameworks/CoreImage.framework; sourceTree = SDKROOT; };
|
||||
B2BC383CE102EECCF49C7AF7 /* IntroScreen.h */ /* IntroScreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = IntroScreen.h; path = ../../Source/Demos/IntroScreen.h; sourceTree = SOURCE_ROOT; };
|
||||
B4389672DA4CC8E0A531062D /* CoreAudioKit.framework */ /* CoreAudioKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudioKit.framework; path = System/Library/Frameworks/CoreAudioKit.framework; sourceTree = SDKROOT; };
|
||||
C1E93FAF6C68A40A664422CD /* include_juce_dsp.mm */ /* include_juce_dsp.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = include_juce_dsp.mm; path = ../../JuceLibraryCode/include_juce_dsp.mm; sourceTree = SOURCE_ROOT; };
|
||||
C64CA4082EC267CDD63E6623 /* juce_javascript */ /* juce_javascript */ = {isa = PBXFileReference; lastKnownFileType = folder; name = juce_javascript; path = ../../../../modules/juce_javascript; sourceTree = SOURCE_ROOT; };
|
||||
CB4C64BACC1CA4AAD6D69565 /* include_juce_animation.cpp */ /* include_juce_animation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_animation.cpp; path = ../../JuceLibraryCode/include_juce_animation.cpp; sourceTree = SOURCE_ROOT; };
|
||||
CCC8AEBCE55002F970222BAD /* include_juce_graphics_Sheenbidi.c */ /* include_juce_graphics_Sheenbidi.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = include_juce_graphics_Sheenbidi.c; path = ../../JuceLibraryCode/include_juce_graphics_Sheenbidi.c; sourceTree = SOURCE_ROOT; };
|
||||
CE38E6469D98462A2C22C915 /* include_juce_osc.cpp */ /* include_juce_osc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = include_juce_osc.cpp; path = ../../JuceLibraryCode/include_juce_osc.cpp; sourceTree = SOURCE_ROOT; };
|
||||
CFF2BBEB242CC8B3B904B5F9 /* App */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DemoRunner.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
DC192EFA899E6CBE6B5CD394 /* AVFoundation.framework */ /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
|
||||
|
|
@ -163,6 +183,10 @@
|
|||
B1981F62F6A91FD2F579A198,
|
||||
ECA44A41DA8A935178C1A1F4,
|
||||
89AD16514B1F4133FFEA1DF9,
|
||||
EFD00925ED57B2C5EB5412FC,
|
||||
10D769051F1431A67AD2CB40,
|
||||
41AE56F8671DFE80720A6A18,
|
||||
9641E7E4F0B5C2A1B3E8709A,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -190,6 +214,10 @@
|
|||
23CD1A3F9067C3A0ECE7BB67,
|
||||
F90C8B0233A54F1445343F67,
|
||||
96D99A08027CA35D6A4E5CFD,
|
||||
3644EF58D9EB1AB436A04E77,
|
||||
2992DB69DCFB7DADDE907385,
|
||||
AAF88452B7774FB605990B31,
|
||||
40D006CCDB1D33FF94B6ECAE,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -198,6 +226,7 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
112FFCB73597157E721BCDF2,
|
||||
8447FC9882D85E6DAF0A4852,
|
||||
6847A9B2C5E3C2ED56D8D4E7,
|
||||
60F2869DC345EAF2314D6C09,
|
||||
491641F7632BCC81BBA0ED85,
|
||||
|
|
@ -212,6 +241,7 @@
|
|||
8CE533D611CD0984AD028D73,
|
||||
5A9F2000C66D24E8B01BE60B,
|
||||
A9315F8368A5771EC39631CB,
|
||||
C64CA4082EC267CDD63E6623,
|
||||
6C198AF93E1F6E682189E2F6,
|
||||
651ECE3C7BA845DDCFEE48F3,
|
||||
4FE6029FF76BCE9698595DC5,
|
||||
|
|
@ -224,6 +254,7 @@
|
|||
isa = PBXGroup;
|
||||
children = (
|
||||
5965349393850F41DF76F350,
|
||||
CB4C64BACC1CA4AAD6D69565,
|
||||
03B0F9318FD583525AB195A9,
|
||||
03A63C3CA6F24977F19C316D,
|
||||
E061A1C75FA5722167FC4997,
|
||||
|
|
@ -233,13 +264,17 @@
|
|||
EDDA01B246C6128CAF7A2914,
|
||||
4DF215D350FFE5E119CBA7E5,
|
||||
3BC9753E0CD75A36DC742EE0,
|
||||
640B7C54D35F5DF408327886,
|
||||
6C5E26B4D28F8450435B8AE1,
|
||||
F5F2EA2238973488632FC322,
|
||||
C1E93FAF6C68A40A664422CD,
|
||||
FCD0D758C5767944BEC29730,
|
||||
3E4ED41C374261CFFD309743,
|
||||
483C3A8B4FB98B54BB42CB50,
|
||||
CCC8AEBCE55002F970222BAD,
|
||||
A1D6D36B96B6B37C31F32829,
|
||||
979F23EA9E5E76131299E886,
|
||||
4306E55904378CE5A6EB48B3,
|
||||
94B6C88FE30861A47CD28709,
|
||||
CE38E6469D98462A2C22C915,
|
||||
0AB68DBAB6B7DAEDDDD5B683,
|
||||
|
|
@ -351,6 +386,7 @@
|
|||
AC6F0E9A0809A184B2C2B7DE = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1340;
|
||||
ORGANIZATIONNAME = "Raw Material Software Limited";
|
||||
TargetAttributes = {
|
||||
|
|
@ -423,6 +459,7 @@
|
|||
4FBBB55F4E347757F74F1F41,
|
||||
F619F3887CEC064441BB6EE6,
|
||||
C2BB2B6DA237FE0CB64C7EDA,
|
||||
55F120E70543228568573D4A,
|
||||
F28112945CEBEA4CE8975833,
|
||||
9EACEA6BE8D0ACC72C12C080,
|
||||
26652AB1BB77C8A39434775F,
|
||||
|
|
@ -432,13 +469,17 @@
|
|||
712D81867EC698463252FA79,
|
||||
611298FAC1A543BDD10D4C41,
|
||||
D183F8140174ACCDDCD230A2,
|
||||
98D376BD41E5359370AD42D9,
|
||||
FF87532E62753EDFA3D29CAD,
|
||||
2F76CA28C8C0EFC7453D0EB8,
|
||||
6B5560283DEEBD6DD2D6C984,
|
||||
1DBDFEDE359CFC84F8E3DE4C,
|
||||
CDABEA6258EC70C65C9ACCFE,
|
||||
11D7AB57EC28DB48A066F7AD,
|
||||
1BA36E8CA4B9E8D3F3B57D24,
|
||||
E2F44A968EC2598DAE33A997,
|
||||
5CB78489F16E82144914972D,
|
||||
BE3AD5595805C8B8845146EF,
|
||||
BC6036F22423CA0AFF0385A7,
|
||||
AEA090DAC5C747C50C7D3FA7,
|
||||
CDEB6BA5341494AF51D07C72,
|
||||
|
|
@ -489,7 +530,7 @@
|
|||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
PRODUCT_NAME = "DemoRunner";
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
|
|
@ -515,10 +556,9 @@
|
|||
"_NDEBUG=1",
|
||||
"NDEBUG=1",
|
||||
"JUCE_CONTENT_SHARING=1",
|
||||
"JUCE_DISPLAY_SPLASH_SCREEN=0",
|
||||
"JUCE_USE_DARK_SPLASH_SCREEN=1",
|
||||
"JUCE_PROJUCER_VERSION=0x70004",
|
||||
"JUCE_PROJUCER_VERSION=0x80004",
|
||||
"JUCE_MODULE_AVAILABLE_juce_analytics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_animation=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
|
||||
|
|
@ -533,6 +573,7 @@
|
|||
"JUCE_MODULE_AVAILABLE_juce_graphics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_gui_basics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_gui_extra=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_javascript=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_opengl=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_osc=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_product_unlocking=1",
|
||||
|
|
@ -547,9 +588,10 @@
|
|||
"JUCE_STANDALONE_APPLICATION=1",
|
||||
"JUCE_DEMO_RUNNER=1",
|
||||
"JUCE_UNIT_TESTS=1",
|
||||
"JUCE_SILENCE_XCODE_15_LINKER_WARNING=1",
|
||||
"JUCER_XCODE_IPHONE_5BC26AE3=1",
|
||||
"JUCE_APP_VERSION=7.0.4",
|
||||
"JUCE_APP_VERSION_HEX=0x70004",
|
||||
"JUCE_APP_VERSION=8.0.4",
|
||||
"JUCE_APP_VERSION_HEX=0x80004",
|
||||
"JucePlugin_Build_VST=0",
|
||||
"JucePlugin_Build_VST3=0",
|
||||
"JucePlugin_Build_AU=0",
|
||||
|
|
@ -579,9 +621,9 @@
|
|||
INSTALL_PATH = "$(HOME)/Applications";
|
||||
LLVM_LTO = YES;
|
||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
|
||||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit -weak_framework UserNotifications";
|
||||
OTHER_CFLAGS = "-Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_LDFLAGS = "-Wl,-weak_reference_mismatches,weak";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner;
|
||||
PRODUCT_NAME = "DemoRunner";
|
||||
USE_HEADERMAP = NO;
|
||||
|
|
@ -606,10 +648,9 @@
|
|||
"_DEBUG=1",
|
||||
"DEBUG=1",
|
||||
"JUCE_CONTENT_SHARING=1",
|
||||
"JUCE_DISPLAY_SPLASH_SCREEN=0",
|
||||
"JUCE_USE_DARK_SPLASH_SCREEN=1",
|
||||
"JUCE_PROJUCER_VERSION=0x70004",
|
||||
"JUCE_PROJUCER_VERSION=0x80004",
|
||||
"JUCE_MODULE_AVAILABLE_juce_analytics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_animation=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_basics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_devices=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_audio_formats=1",
|
||||
|
|
@ -624,6 +665,7 @@
|
|||
"JUCE_MODULE_AVAILABLE_juce_graphics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_gui_basics=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_gui_extra=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_javascript=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_opengl=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_osc=1",
|
||||
"JUCE_MODULE_AVAILABLE_juce_product_unlocking=1",
|
||||
|
|
@ -638,9 +680,10 @@
|
|||
"JUCE_STANDALONE_APPLICATION=1",
|
||||
"JUCE_DEMO_RUNNER=1",
|
||||
"JUCE_UNIT_TESTS=1",
|
||||
"JUCE_SILENCE_XCODE_15_LINKER_WARNING=1",
|
||||
"JUCER_XCODE_IPHONE_5BC26AE3=1",
|
||||
"JUCE_APP_VERSION=7.0.4",
|
||||
"JUCE_APP_VERSION_HEX=0x70004",
|
||||
"JUCE_APP_VERSION=8.0.4",
|
||||
"JUCE_APP_VERSION_HEX=0x80004",
|
||||
"JucePlugin_Build_VST=0",
|
||||
"JucePlugin_Build_VST3=0",
|
||||
"JucePlugin_Build_AU=0",
|
||||
|
|
@ -669,9 +712,9 @@
|
|||
INFOPLIST_PREPROCESS = NO;
|
||||
INSTALL_PATH = "$(HOME)/Applications";
|
||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lilv $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sratom $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord/src $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/sord $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/serd $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK/lv2 $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/LV2_SDK $(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules";
|
||||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wshadow-all -Wnullable-to-nonnull-conversion -Wmissing-prototypes -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_LDFLAGS = "-weak_framework Metal -weak_framework MetalKit -weak_framework UserNotifications";
|
||||
OTHER_CFLAGS = "-Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wcast-align -Wfloat-equal -Wno-ignored-qualifiers -Wsign-compare -Wsign-conversion -Wstrict-aliasing -Wswitch-enum -Wuninitialized -Wunreachable-code -Wunused-parameter -Wmissing-field-initializers -Wshadow-all -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wmissing-prototypes -Wnullable-to-nonnull-conversion -Wpedantic -Wdeprecated -Wunguarded-availability -Wunguarded-availability-new";
|
||||
OTHER_LDFLAGS = "-Wl,-weak_reference_mismatches,weak";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner;
|
||||
PRODUCT_NAME = "DemoRunner";
|
||||
USE_HEADERMAP = NO;
|
||||
|
|
@ -719,7 +762,7 @@
|
|||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_NAME = "DemoRunner";
|
||||
SDKROOT = iphoneos;
|
||||
|
|
|
|||
|
|
@ -30,11 +30,11 @@
|
|||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>7.0.4</string>
|
||||
<string>8.0.4</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>7.0.4</string>
|
||||
<string>8.0.4</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright (c) 2020 - Raw Material Software Limited</string>
|
||||
<string>Copyright (c) - Raw Material Software Limited</string>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<true/>
|
||||
<key>UIFileSharingEnabled</key>
|
||||
|
|
|
|||
|
|
@ -1,82 +1,87 @@
|
|||
# ==============================================================================
|
||||
#
|
||||
# This file is part of the JUCE library.
|
||||
# Copyright (c) 2022 - Raw Material Software Limited
|
||||
#
|
||||
# JUCE is an open source library subject to commercial or open-source
|
||||
# licensing.
|
||||
#
|
||||
# By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
# Agreement and JUCE Privacy Policy.
|
||||
#
|
||||
# End User License Agreement: www.juce.com/juce-7-licence
|
||||
# Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
#
|
||||
# Or: You may also use this code under the terms of the GPL v3 (see
|
||||
# www.gnu.org/licenses).
|
||||
#
|
||||
# JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
# EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
# DISCLAIMED.
|
||||
#
|
||||
# ==============================================================================
|
||||
|
||||
juce_add_gui_app(DemoRunner
|
||||
BUNDLE_ID com.juce.demorunner
|
||||
ICON_BIG ${CMAKE_CURRENT_SOURCE_DIR}/Source/JUCEAppIcon.png
|
||||
NEEDS_CURL TRUE
|
||||
NEEDS_WEB_BROWSER TRUE
|
||||
MICROPHONE_PERMISSION_ENABLED TRUE
|
||||
CAMERA_PERMISSION_ENABLED TRUE
|
||||
BLUETOOTH_PERMISSION_ENABLED TRUE
|
||||
FILE_SHARING_ENABLED TRUE
|
||||
DOCUMENT_BROWSER_ENABLED TRUE
|
||||
REQUIRES_FULL_SCREEN FALSE
|
||||
IPAD_SCREEN_ORIENTATIONS UIInterfaceOrientationPortrait
|
||||
UIInterfaceOrientationPortraitUpsideDown
|
||||
UIInterfaceOrientationLandscapeLeft
|
||||
UIInterfaceOrientationLandscapeRight
|
||||
IPHONE_SCREEN_ORIENTATIONS UIInterfaceOrientationPortrait
|
||||
UIInterfaceOrientationPortraitUpsideDown
|
||||
UIInterfaceOrientationLandscapeLeft
|
||||
UIInterfaceOrientationLandscapeRight)
|
||||
|
||||
juce_generate_juce_header(DemoRunner)
|
||||
|
||||
target_sources(DemoRunner PRIVATE
|
||||
Source/Demos/DemoPIPs1.cpp
|
||||
Source/Demos/DemoPIPs2.cpp
|
||||
Source/Demos/JUCEDemos.cpp
|
||||
Source/Main.cpp
|
||||
Source/UI/DemoContentComponent.cpp
|
||||
Source/UI/MainComponent.cpp)
|
||||
|
||||
target_compile_definitions(DemoRunner PRIVATE
|
||||
PIP_JUCE_EXAMPLES_DIRECTORY_STRING="${JUCE_SOURCE_DIR}/examples"
|
||||
JUCE_ALLOW_STATIC_NULL_VARIABLES=0
|
||||
JUCE_DEMO_RUNNER=1
|
||||
JUCE_PLUGINHOST_LV2=1
|
||||
JUCE_PLUGINHOST_VST3=1
|
||||
JUCE_STRICT_REFCOUNTEDPOINTER=1
|
||||
JUCE_UNIT_TESTS=1
|
||||
JUCE_USE_CAMERA=1
|
||||
JUCE_USE_CURL=1
|
||||
JUCE_USE_MP3AUDIOFORMAT=1
|
||||
JUCE_WEB_BROWSER=1)
|
||||
|
||||
target_link_libraries(DemoRunner PRIVATE
|
||||
juce::juce_analytics
|
||||
juce::juce_audio_utils
|
||||
juce::juce_box2d
|
||||
juce::juce_dsp
|
||||
juce::juce_opengl
|
||||
juce::juce_osc
|
||||
juce::juce_product_unlocking
|
||||
juce::juce_video
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_lto_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
|
||||
foreach(folder IN ITEMS ../Assets ../Audio ../DSP ../GUI ../Utilities)
|
||||
juce_add_bundle_resources_directory(DemoRunner ${folder})
|
||||
endforeach()
|
||||
# ==============================================================================
|
||||
#
|
||||
# This file is part of the JUCE framework examples.
|
||||
# Copyright (c) Raw Material Software Limited
|
||||
#
|
||||
# The code included in this file is provided under the terms of the ISC license
|
||||
# http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
# to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
# without fee is hereby granted provided that the above copyright notice and
|
||||
# this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
# PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# ==============================================================================
|
||||
|
||||
juce_add_gui_app(DemoRunner
|
||||
BUNDLE_ID com.juce.demorunner
|
||||
ICON_BIG ${CMAKE_CURRENT_SOURCE_DIR}/Source/JUCEAppIcon.png
|
||||
NEEDS_CURL TRUE
|
||||
NEEDS_WEB_BROWSER TRUE
|
||||
MICROPHONE_PERMISSION_ENABLED TRUE
|
||||
CAMERA_PERMISSION_ENABLED TRUE
|
||||
BLUETOOTH_PERMISSION_ENABLED TRUE
|
||||
FILE_SHARING_ENABLED TRUE
|
||||
DOCUMENT_BROWSER_ENABLED TRUE
|
||||
REQUIRES_FULL_SCREEN FALSE
|
||||
IPAD_SCREEN_ORIENTATIONS UIInterfaceOrientationPortrait
|
||||
UIInterfaceOrientationPortraitUpsideDown
|
||||
UIInterfaceOrientationLandscapeLeft
|
||||
UIInterfaceOrientationLandscapeRight
|
||||
IPHONE_SCREEN_ORIENTATIONS UIInterfaceOrientationPortrait
|
||||
UIInterfaceOrientationPortraitUpsideDown
|
||||
UIInterfaceOrientationLandscapeLeft
|
||||
UIInterfaceOrientationLandscapeRight)
|
||||
|
||||
juce_generate_juce_header(DemoRunner)
|
||||
|
||||
target_sources(DemoRunner PRIVATE
|
||||
Source/Demos/DemoPIPs1.cpp
|
||||
Source/Demos/DemoPIPs2.cpp
|
||||
Source/Demos/JUCEDemos.cpp
|
||||
Source/Main.cpp
|
||||
Source/UI/DemoContentComponent.cpp
|
||||
Source/UI/MainComponent.cpp)
|
||||
|
||||
target_compile_definitions(DemoRunner PRIVATE
|
||||
PIP_JUCE_EXAMPLES_DIRECTORY_STRING="${JUCE_SOURCE_DIR}/examples"
|
||||
JUCE_ALLOW_STATIC_NULL_VARIABLES=0
|
||||
JUCE_CONTENT_SHARING=1
|
||||
JUCE_DEMO_RUNNER=1
|
||||
JUCE_PLUGINHOST_LV2=1
|
||||
JUCE_PLUGINHOST_VST3=1
|
||||
JUCE_STRICT_REFCOUNTEDPOINTER=1
|
||||
JUCE_UNIT_TESTS=1
|
||||
JUCE_USE_CAMERA=1
|
||||
JUCE_USE_CURL=1
|
||||
JUCE_USE_MP3AUDIOFORMAT=1
|
||||
JUCE_WEB_BROWSER=1
|
||||
# This is a temporary workaround to allow builds to complete on Xcode 15.
|
||||
# Add -Wl,-ld_classic to the OTHER_LDFLAGS build setting if you need to
|
||||
# deploy to older versions of macOS/iOS.
|
||||
JUCE_SILENCE_XCODE_15_LINKER_WARNING=1)
|
||||
|
||||
target_link_libraries(DemoRunner PRIVATE
|
||||
juce::juce_analytics
|
||||
juce::juce_animation
|
||||
juce::juce_audio_utils
|
||||
juce::juce_box2d
|
||||
juce::juce_dsp
|
||||
juce::juce_opengl
|
||||
juce::juce_osc
|
||||
juce::juce_product_unlocking
|
||||
juce::juce_video
|
||||
juce::juce_javascript
|
||||
juce::juce_recommended_config_flags
|
||||
juce::juce_recommended_lto_flags
|
||||
juce::juce_recommended_warning_flags)
|
||||
|
||||
foreach(folder IN ITEMS ../Assets ../Audio ../DSP ../GUI ../Utilities)
|
||||
juce_add_bundle_resources_directory(DemoRunner ${folder})
|
||||
endforeach()
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<JUCERPROJECT name="DemoRunner" projectType="guiapp" defines="JUCE_DEMO_RUNNER=1 JUCE_UNIT_TESTS=1"
|
||||
bundleIdentifier="com.rmsl.jucedemorunner" version="7.0.4" companyName="Raw Material Software Limited"
|
||||
companyCopyright="Copyright (c) 2020 - Raw Material Software Limited"
|
||||
bundleIdentifier="com.rmsl.jucedemorunner" version="8.0.4" companyName="Raw Material Software Limited"
|
||||
companyCopyright="Copyright (c) - Raw Material Software Limited"
|
||||
companyWebsite="https://www.juce.com/" companyEmail="info@juce.com"
|
||||
id="yj7xMM" reportAppUsage="0" useAppConfig="0" addUsingNamespaceToJuceHeader="1"
|
||||
id="yj7xMM" useAppConfig="0" addUsingNamespaceToJuceHeader="1"
|
||||
jucerFormatVersion="1">
|
||||
<MAINGROUP id="G8kbr7" name="DemoRunner">
|
||||
<GROUP id="{20E3F84A-29E9-D5FF-4559-1A9E4A70CD60}" name="Source">
|
||||
|
|
@ -34,7 +34,8 @@
|
|||
<XCODE_MAC targetFolder="Builds/MacOSX" smallIcon="YyqWd2" bigIcon="YyqWd2"
|
||||
customXcodeResourceFolders="../Assets ../Audio ../DSP ../GUI ../Utilities"
|
||||
microphonePermissionNeeded="1" cameraPermissionNeeded="1" applicationCategory="public.app-category.developer-tools"
|
||||
iosBluetoothPermissionNeeded="1">
|
||||
iosBluetoothPermissionNeeded="1" extraDefs="JUCE_SILENCE_XCODE_15_LINKER_WARNING=1"
|
||||
extraLinkerFlags="-Wl,-weak_reference_mismatches,weak">
|
||||
<CONFIGURATIONS>
|
||||
<CONFIGURATION isDebug="1" name="Debug" recommendedWarnings="LLVM"/>
|
||||
<CONFIGURATION isDebug="0" name="Release" recommendedWarnings="LLVM"/>
|
||||
|
|
@ -59,6 +60,8 @@
|
|||
<MODULEPATH id="juce_dsp" path="../../modules"/>
|
||||
<MODULEPATH id="juce_osc" path="../../modules"/>
|
||||
<MODULEPATH id="juce_product_unlocking" path="../../modules"/>
|
||||
<MODULEPATH id="juce_animation" path="../../modules"/>
|
||||
<MODULEPATH id="juce_javascript" path="../../modules"/>
|
||||
</MODULEPATHS>
|
||||
</XCODE_MAC>
|
||||
<LINUX_MAKE targetFolder="Builds/LinuxMakefile" smallIcon="YyqWd2" bigIcon="YyqWd2">
|
||||
|
|
@ -86,6 +89,8 @@
|
|||
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_analytics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_animation" path="../../modules"/>
|
||||
<MODULEPATH id="juce_javascript" path="../../modules"/>
|
||||
</MODULEPATHS>
|
||||
</LINUX_MAKE>
|
||||
<ANDROIDSTUDIO targetFolder="Builds/Android" androidMinimumSDK="23" microphonePermissionNeeded="1"
|
||||
|
|
@ -119,6 +124,8 @@
|
|||
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_analytics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_animation" path="../../modules"/>
|
||||
<MODULEPATH id="juce_javascript" path="../../modules"/>
|
||||
</MODULEPATHS>
|
||||
</ANDROIDSTUDIO>
|
||||
<XCODE_IPHONE targetFolder="Builds/iOS" UISupportsDocumentBrowser="1" microphonePermissionNeeded="1"
|
||||
|
|
@ -126,7 +133,8 @@
|
|||
customXcodeResourceFolders="../Assets" smallIcon="YyqWd2" bigIcon="YyqWd2"
|
||||
iosBluetoothPermissionNeeded="1" iosScreenOrientation="UIInterfaceOrientationLandscapeLeft,UIInterfaceOrientationLandscapeRight,UIInterfaceOrientationPortrait,UIInterfaceOrientationPortraitUpsideDown"
|
||||
iPadScreenOrientation="UIInterfaceOrientationLandscapeLeft,UIInterfaceOrientationLandscapeRight,UIInterfaceOrientationPortrait,UIInterfaceOrientationPortraitUpsideDown"
|
||||
UIRequiresFullScreen="0">
|
||||
UIRequiresFullScreen="0" extraDefs="JUCE_SILENCE_XCODE_15_LINKER_WARNING=1"
|
||||
extraLinkerFlags="-Wl,-weak_reference_mismatches,weak">
|
||||
<CONFIGURATIONS>
|
||||
<CONFIGURATION isDebug="1" name="Debug" recommendedWarnings="LLVM"/>
|
||||
<CONFIGURATION isDebug="0" name="Release" recommendedWarnings="LLVM"/>
|
||||
|
|
@ -151,36 +159,10 @@
|
|||
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_analytics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_animation" path="../../modules"/>
|
||||
<MODULEPATH id="juce_javascript" path="../../modules"/>
|
||||
</MODULEPATHS>
|
||||
</XCODE_IPHONE>
|
||||
<VS2017 targetFolder="Builds/VisualStudio2017" smallIcon="YyqWd2" bigIcon="YyqWd2"
|
||||
extraCompilerFlags="/w44265 /w45038 /w44062">
|
||||
<CONFIGURATIONS>
|
||||
<CONFIGURATION isDebug="1" name="Debug"/>
|
||||
<CONFIGURATION isDebug="0" name="Release" useRuntimeLibDLL="0"/>
|
||||
</CONFIGURATIONS>
|
||||
<MODULEPATHS>
|
||||
<MODULEPATH id="juce_video" path="../../modules"/>
|
||||
<MODULEPATH id="juce_product_unlocking" path="../../modules"/>
|
||||
<MODULEPATH id="juce_osc" path="../../modules"/>
|
||||
<MODULEPATH id="juce_opengl" path="../../modules"/>
|
||||
<MODULEPATH id="juce_gui_extra" path="../../modules"/>
|
||||
<MODULEPATH id="juce_gui_basics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_graphics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_events" path="../../modules"/>
|
||||
<MODULEPATH id="juce_dsp" path="../../modules"/>
|
||||
<MODULEPATH id="juce_data_structures" path="../../modules"/>
|
||||
<MODULEPATH id="juce_cryptography" path="../../modules"/>
|
||||
<MODULEPATH id="juce_core" path="../../modules"/>
|
||||
<MODULEPATH id="juce_box2d" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_utils" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_processors" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_formats" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_analytics" path="../../modules"/>
|
||||
</MODULEPATHS>
|
||||
</VS2017>
|
||||
<VS2019 targetFolder="Builds/VisualStudio2019" smallIcon="YyqWd2" bigIcon="YyqWd2"
|
||||
extraCompilerFlags="/w44265 /w45038 /w44062">
|
||||
<CONFIGURATIONS>
|
||||
|
|
@ -207,6 +189,8 @@
|
|||
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_analytics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_animation" path="../../modules"/>
|
||||
<MODULEPATH id="juce_javascript" path="../../modules"/>
|
||||
</MODULEPATHS>
|
||||
</VS2019>
|
||||
<VS2022 targetFolder="Builds/VisualStudio2022" smallIcon="YyqWd2" bigIcon="YyqWd2"
|
||||
|
|
@ -235,11 +219,14 @@
|
|||
<MODULEPATH id="juce_audio_devices" path="../../modules"/>
|
||||
<MODULEPATH id="juce_audio_basics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_analytics" path="../../modules"/>
|
||||
<MODULEPATH id="juce_animation" path="../../modules"/>
|
||||
<MODULEPATH id="juce_javascript" path="../../modules"/>
|
||||
</MODULEPATHS>
|
||||
</VS2022>
|
||||
</EXPORTFORMATS>
|
||||
<MODULES>
|
||||
<MODULE id="juce_analytics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||
<MODULE id="juce_animation" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||
<MODULE id="juce_audio_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||
<MODULE id="juce_audio_devices" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||
<MODULE id="juce_audio_formats" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||
|
|
@ -254,6 +241,7 @@
|
|||
<MODULE id="juce_graphics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||
<MODULE id="juce_gui_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||
<MODULE id="juce_gui_extra" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||
<MODULE id="juce_javascript" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||
<MODULE id="juce_opengl" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||
<MODULE id="juce_osc" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>
|
||||
<MODULE id="juce_product_unlocking" showAllCode="1" useLocalCopy="0"
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
|
||||
|
||||
#include <juce_analytics/juce_analytics.h>
|
||||
#include <juce_animation/juce_animation.h>
|
||||
#include <juce_audio_basics/juce_audio_basics.h>
|
||||
#include <juce_audio_devices/juce_audio_devices.h>
|
||||
#include <juce_audio_formats/juce_audio_formats.h>
|
||||
|
|
@ -28,6 +29,7 @@
|
|||
#include <juce_graphics/juce_graphics.h>
|
||||
#include <juce_gui_basics/juce_gui_basics.h>
|
||||
#include <juce_gui_extra/juce_gui_extra.h>
|
||||
#include <juce_javascript/juce_javascript.h>
|
||||
#include <juce_opengl/juce_opengl.h>
|
||||
#include <juce_osc/juce_osc.h>
|
||||
#include <juce_product_unlocking/juce_product_unlocking.h>
|
||||
|
|
@ -54,7 +56,7 @@ namespace ProjectInfo
|
|||
{
|
||||
const char* const projectName = "DemoRunner";
|
||||
const char* const companyName = "Raw Material Software Limited";
|
||||
const char* const versionString = "7.0.4";
|
||||
const int versionNumber = 0x70004;
|
||||
const char* const versionString = "8.0.4";
|
||||
const int versionNumber = 0x80004;
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -5,4 +5,4 @@
|
|||
|
||||
*/
|
||||
|
||||
#include <juce_video/juce_video.mm>
|
||||
#include <juce_animation/juce_animation.cpp>
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_core/juce_core_CompilationTime.cpp>
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_graphics/juce_graphics_Harfbuzz.cpp>
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_graphics/juce_graphics_Sheenbidi.c>
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
/*
|
||||
|
||||
IMPORTANT! This file is auto-generated each time you save your
|
||||
project - if you alter its contents, your changes may be overwritten!
|
||||
|
||||
*/
|
||||
|
||||
#include <juce_javascript/juce_javascript.cpp>
|
||||
|
|
@ -1,24 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
Agreement and JUCE Privacy Policy.
|
||||
|
||||
End User License Agreement: www.juce.com/juce-7-licence
|
||||
Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
|
||||
Or: You may also use this code under the terms of the GPL v3 (see
|
||||
www.gnu.org/licenses).
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -37,6 +35,7 @@
|
|||
#include "../../../Audio/AudioRecordingDemo.h"
|
||||
#include "../../../Audio/AudioSettingsDemo.h"
|
||||
#include "../../../Audio/AudioSynthesiserDemo.h"
|
||||
#include "../../../Audio/AudioWorkgroupDemo.h"
|
||||
#include "../../../Audio/MidiDemo.h"
|
||||
#include "../../../Audio/MPEDemo.h"
|
||||
#include "../../../Audio/PluckedStringsDemo.h"
|
||||
|
|
@ -75,6 +74,7 @@ void registerDemos_One() noexcept
|
|||
REGISTER_DEMO (AudioRecordingDemo, Audio, false)
|
||||
REGISTER_DEMO (AudioSettingsDemo, Audio, false)
|
||||
REGISTER_DEMO (AudioSynthesiserDemo, Audio, false)
|
||||
REGISTER_DEMO (AudioWorkgroupDemo, Audio, false)
|
||||
REGISTER_DEMO (MidiDemo, Audio, false)
|
||||
REGISTER_DEMO (MPEDemo, Audio, false)
|
||||
REGISTER_DEMO (PluckedStringsDemo, Audio, false)
|
||||
|
|
@ -86,9 +86,9 @@ void registerDemos_One() noexcept
|
|||
REGISTER_DEMO (IIRFilterDemo, DSP, false)
|
||||
REGISTER_DEMO (OscillatorDemo, DSP, false)
|
||||
REGISTER_DEMO (OverdriveDemo, DSP, false)
|
||||
#if JUCE_USE_SIMD
|
||||
REGISTER_DEMO (SIMDRegisterDemo, DSP, false)
|
||||
#endif
|
||||
#if JUCE_USE_SIMD
|
||||
REGISTER_DEMO (SIMDRegisterDemo, DSP, false)
|
||||
#endif
|
||||
REGISTER_DEMO (StateVariableFilterDemo, DSP, false)
|
||||
REGISTER_DEMO (WaveShaperTanhDemo, DSP, false)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,24 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
Agreement and JUCE Privacy Policy.
|
||||
|
||||
End User License Agreement: www.juce.com/juce-7-licence
|
||||
Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
|
||||
Or: You may also use this code under the terms of the GPL v3 (see
|
||||
www.gnu.org/licenses).
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -34,7 +32,8 @@
|
|||
#include "../../../GUI/AccessibilityDemo.h"
|
||||
#endif
|
||||
#include "../../../GUI/AnimationAppDemo.h"
|
||||
#include "../../../GUI/AnimationDemo.h"
|
||||
#include "../../../GUI/AnimationEasingDemo.h"
|
||||
#include "../../../GUI/AnimatorsDemo.h"
|
||||
#include "../../../GUI/BouncingBallWavetableDemo.h"
|
||||
#if JUCE_USE_CAMERA && ! (JUCE_LINUX || JUCE_BSD)
|
||||
#include "../../../GUI/CameraDemo.h"
|
||||
|
|
@ -74,7 +73,8 @@ void registerDemos_Two() noexcept
|
|||
REGISTER_DEMO (AccessibilityDemo, GUI, false)
|
||||
#endif
|
||||
REGISTER_DEMO (AnimationAppDemo, GUI, false)
|
||||
REGISTER_DEMO (AnimationDemo, GUI, false)
|
||||
REGISTER_DEMO (AnimationEasingDemo, GUI, false)
|
||||
REGISTER_DEMO (AnimatorsDemo, GUI, false)
|
||||
REGISTER_DEMO (BouncingBallWavetableDemo, GUI, false)
|
||||
#if JUCE_USE_CAMERA && ! (JUCE_LINUX || JUCE_BSD)
|
||||
REGISTER_DEMO (CameraDemo, GUI, true)
|
||||
|
|
@ -104,7 +104,9 @@ void registerDemos_Two() noexcept
|
|||
#if ! (JUCE_LINUX || JUCE_BSD)
|
||||
REGISTER_DEMO (VideoDemo, GUI, true)
|
||||
#endif
|
||||
#if JUCE_WEB_BROWSER
|
||||
REGISTER_DEMO (WebBrowserDemo, GUI, true)
|
||||
#endif
|
||||
REGISTER_DEMO (WidgetsDemo, GUI, false)
|
||||
REGISTER_DEMO (WindowsDemo, GUI, false)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,24 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
Agreement and JUCE Privacy Policy.
|
||||
|
||||
End User License Agreement: www.juce.com/juce-7-licence
|
||||
Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
|
||||
Or: You may also use this code under the terms of the GPL v3 (see
|
||||
www.gnu.org/licenses).
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -27,7 +25,7 @@
|
|||
|
||||
|
||||
//==============================================================================
|
||||
class IntroScreen : public Component
|
||||
class IntroScreen final : public Component
|
||||
{
|
||||
public:
|
||||
IntroScreen()
|
||||
|
|
@ -70,8 +68,8 @@ private:
|
|||
HyperlinkButton linkButton { "www.juce.com", { "http://www.juce.com" } };
|
||||
|
||||
//==============================================================================
|
||||
struct LogoDrawComponent : public Component,
|
||||
private Timer
|
||||
struct LogoDrawComponent final : public Component,
|
||||
private Timer
|
||||
{
|
||||
LogoDrawComponent()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,24 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
Agreement and JUCE Privacy Policy.
|
||||
|
||||
End User License Agreement: www.juce.com/juce-7-licence
|
||||
Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
|
||||
Or: You may also use this code under the terms of the GPL v3 (see
|
||||
www.gnu.org/licenses).
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,24 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
Agreement and JUCE Privacy Policy.
|
||||
|
||||
End User License Agreement: www.juce.com/juce-7-licence
|
||||
Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
|
||||
Or: You may also use this code under the terms of the GPL v3 (see
|
||||
www.gnu.org/licenses).
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,24 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
Agreement and JUCE Privacy Policy.
|
||||
|
||||
End User License Agreement: www.juce.com/juce-7-licence
|
||||
Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
|
||||
Or: You may also use this code under the terms of the GPL v3 (see
|
||||
www.gnu.org/licenses).
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -31,8 +29,8 @@
|
|||
//==============================================================================
|
||||
#if JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_BSD
|
||||
// Just add a simple icon to the Window system tray area or Mac menu bar..
|
||||
struct DemoTaskbarComponent : public SystemTrayIconComponent,
|
||||
private Timer
|
||||
struct DemoTaskbarComponent final : public SystemTrayIconComponent,
|
||||
private Timer
|
||||
{
|
||||
DemoTaskbarComponent()
|
||||
{
|
||||
|
|
@ -76,7 +74,7 @@
|
|||
std::unique_ptr<AudioDeviceManager> sharedAudioDeviceManager;
|
||||
|
||||
//==============================================================================
|
||||
class DemoRunnerApplication : public JUCEApplication
|
||||
class DemoRunnerApplication final : public JUCEApplication
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
|
|
@ -117,7 +115,7 @@ public:
|
|||
ApplicationCommandManager& getGlobalCommandManager() { return commandManager; }
|
||||
|
||||
private:
|
||||
class MainAppWindow : public DocumentWindow
|
||||
class MainAppWindow final : public DocumentWindow
|
||||
{
|
||||
public:
|
||||
MainAppWindow (const String& name)
|
||||
|
|
|
|||
|
|
@ -1,24 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
Agreement and JUCE Privacy Policy.
|
||||
|
||||
End User License Agreement: www.juce.com/juce-7-licence
|
||||
Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
|
||||
Or: You may also use this code under the terms of the GPL v3 (see
|
||||
www.gnu.org/licenses).
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -28,7 +26,7 @@
|
|||
#include "MainComponent.h"
|
||||
|
||||
//==============================================================================
|
||||
struct DemoContent : public Component
|
||||
struct DemoContent final : public Component
|
||||
{
|
||||
DemoContent() noexcept {}
|
||||
|
||||
|
|
@ -58,7 +56,7 @@ private:
|
|||
|
||||
//==============================================================================
|
||||
#if ! (JUCE_ANDROID || JUCE_IOS)
|
||||
struct CodeContent : public Component
|
||||
struct CodeContent final : public Component
|
||||
{
|
||||
CodeContent()
|
||||
{
|
||||
|
|
@ -67,7 +65,7 @@ struct CodeContent : public Component
|
|||
codeEditor.setReadOnly (true);
|
||||
codeEditor.setScrollbarThickness (8);
|
||||
|
||||
lookAndFeelChanged();
|
||||
updateLookAndFeel();
|
||||
}
|
||||
|
||||
void resized() override
|
||||
|
|
@ -83,9 +81,9 @@ struct CodeContent : public Component
|
|||
"*******************************************************************************/\n");
|
||||
}
|
||||
|
||||
void lookAndFeelChanged() override
|
||||
void updateLookAndFeel()
|
||||
{
|
||||
auto* v4 = dynamic_cast <LookAndFeel_V4*> (&Desktop::getInstance().getDefaultLookAndFeel());
|
||||
auto* v4 = dynamic_cast<LookAndFeel_V4*> (&Desktop::getInstance().getDefaultLookAndFeel());
|
||||
|
||||
if (v4 != nullptr && (v4->getCurrentColourScheme() != LookAndFeel_V4::getLightColourScheme()))
|
||||
codeEditor.setColourScheme (getDarkColourScheme());
|
||||
|
|
@ -93,6 +91,11 @@ struct CodeContent : public Component
|
|||
codeEditor.setColourScheme (getLightColourScheme());
|
||||
}
|
||||
|
||||
void lookAndFeelChanged() override
|
||||
{
|
||||
updateLookAndFeel();
|
||||
}
|
||||
|
||||
CodeDocument document;
|
||||
CPlusPlusCodeTokeniser cppTokensier;
|
||||
CodeEditorComponent codeEditor { document, &cppTokensier };
|
||||
|
|
@ -115,7 +118,7 @@ DemoContentComponent::DemoContentComponent (Component& mainComponent, std::funct
|
|||
addTab ("Settings", Colours::transparentBlack, new SettingsContent (dynamic_cast<MainComponent&> (mainComponent)), true);
|
||||
|
||||
setTabBarDepth (40);
|
||||
lookAndFeelChanged();
|
||||
updateLookAndFeel();
|
||||
}
|
||||
|
||||
DemoContentComponent::~DemoContentComponent()
|
||||
|
|
@ -182,7 +185,7 @@ void DemoContentComponent::clearCurrentDemo()
|
|||
demoChangedCallback (false);
|
||||
}
|
||||
|
||||
void DemoContentComponent::lookAndFeelChanged()
|
||||
void DemoContentComponent::updateLookAndFeel()
|
||||
{
|
||||
auto backgroundColour = findColour (ResizableWindow::backgroundColourId);
|
||||
|
||||
|
|
@ -190,6 +193,11 @@ void DemoContentComponent::lookAndFeelChanged()
|
|||
setTabBackgroundColour (i, backgroundColour);
|
||||
}
|
||||
|
||||
void DemoContentComponent::lookAndFeelChanged()
|
||||
{
|
||||
updateLookAndFeel();
|
||||
}
|
||||
|
||||
String DemoContentComponent::trimPIP (const String& fileContents)
|
||||
{
|
||||
auto lines = StringArray::fromLines (fileContents);
|
||||
|
|
|
|||
|
|
@ -1,24 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
Agreement and JUCE Privacy Policy.
|
||||
|
||||
End User License Agreement: www.juce.com/juce-7-licence
|
||||
Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
|
||||
Or: You may also use this code under the terms of the GPL v3 (see
|
||||
www.gnu.org/licenses).
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -32,7 +30,7 @@ struct DemoContent;
|
|||
struct CodeContent;
|
||||
|
||||
//==============================================================================
|
||||
class DemoContentComponent : public TabbedComponent
|
||||
class DemoContentComponent final : public TabbedComponent
|
||||
{
|
||||
public:
|
||||
DemoContentComponent (Component& mainComponent, std::function<void (bool)> demoChangedCallback);
|
||||
|
|
@ -63,6 +61,7 @@ private:
|
|||
int tabBarIndent = 0;
|
||||
|
||||
//==============================================================================
|
||||
void updateLookAndFeel();
|
||||
void lookAndFeelChanged() override;
|
||||
|
||||
String trimPIP (const String& fileContents);
|
||||
|
|
|
|||
|
|
@ -1,24 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
Agreement and JUCE Privacy Policy.
|
||||
|
||||
End User License Agreement: www.juce.com/juce-7-licence
|
||||
Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
|
||||
Or: You may also use this code under the terms of the GPL v3 (see
|
||||
www.gnu.org/licenses).
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -26,7 +24,7 @@
|
|||
#include "MainComponent.h"
|
||||
|
||||
//==============================================================================
|
||||
struct SidePanelHeader : public Component
|
||||
struct SidePanelHeader final : public Component
|
||||
{
|
||||
SidePanelHeader (MainComponent& o)
|
||||
: owner (o)
|
||||
|
|
@ -80,7 +78,7 @@ struct SidePanelHeader : public Component
|
|||
addAndMakeVisible (settingsButton);
|
||||
settingsButton.onClick = [this] { owner.settingsButtonClicked(); };
|
||||
|
||||
lookAndFeelChanged();
|
||||
updateLookAndFeel();
|
||||
}
|
||||
|
||||
void paint (Graphics& g) override
|
||||
|
|
@ -102,7 +100,7 @@ struct SidePanelHeader : public Component
|
|||
titleLabel.setBounds (bounds);
|
||||
}
|
||||
|
||||
void lookAndFeelChanged() override
|
||||
void updateLookAndFeel()
|
||||
{
|
||||
auto& sidePanel = owner.getSidePanel();
|
||||
auto& lf = sidePanel.getLookAndFeel();
|
||||
|
|
@ -117,6 +115,12 @@ struct SidePanelHeader : public Component
|
|||
|
||||
homeButton.setColours (normal, over, down);
|
||||
settingsButton.setColours (normal, over, down);
|
||||
|
||||
}
|
||||
|
||||
void lookAndFeelChanged() override
|
||||
{
|
||||
updateLookAndFeel();
|
||||
}
|
||||
|
||||
MainComponent& owner;
|
||||
|
|
@ -126,8 +130,8 @@ struct SidePanelHeader : public Component
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class DemoList : public Component,
|
||||
public ListBoxModel
|
||||
class DemoList final : public Component,
|
||||
public ListBoxModel
|
||||
{
|
||||
public:
|
||||
DemoList (DemoContentComponent& holder)
|
||||
|
|
@ -208,7 +212,7 @@ public:
|
|||
|
||||
private:
|
||||
//==============================================================================
|
||||
class CategoryListHeaderComponent : public Button
|
||||
class CategoryListHeaderComponent final : public Button
|
||||
{
|
||||
public:
|
||||
explicit CategoryListHeaderComponent (DemoList& o)
|
||||
|
|
@ -284,7 +288,7 @@ MainComponent::MainComponent()
|
|||
{
|
||||
#if JUCE_MAC && USE_COREGRAPHICS_RENDERING
|
||||
setRenderingEngine (1);
|
||||
#else
|
||||
#elif ! JUCE_WINDOWS
|
||||
setRenderingEngine (0);
|
||||
#endif
|
||||
}
|
||||
|
|
@ -357,8 +361,10 @@ void MainComponent::resized()
|
|||
{
|
||||
auto bounds = getLocalBounds();
|
||||
|
||||
#if JUCE_IOS || JUCE_ANDROID
|
||||
if (auto* display = Desktop::getInstance().getDisplays().getDisplayForRect (getScreenBounds()))
|
||||
return display->safeAreaInsets.subtractedFrom (display->keyboardInsets.subtractedFrom (bounds));
|
||||
#endif
|
||||
|
||||
return bounds;
|
||||
}();
|
||||
|
|
|
|||
|
|
@ -1,24 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
Agreement and JUCE Privacy Policy.
|
||||
|
||||
End User License Agreement: www.juce.com/juce-7-licence
|
||||
Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
|
||||
Or: You may also use this code under the terms of the GPL v3 (see
|
||||
www.gnu.org/licenses).
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -29,7 +27,7 @@
|
|||
#include "DemoContentComponent.h"
|
||||
|
||||
//==============================================================================
|
||||
class MainComponent : public Component
|
||||
class MainComponent final : public Component
|
||||
{
|
||||
public:
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -1,24 +1,22 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
This file is part of the JUCE library.
|
||||
Copyright (c) 2022 - Raw Material Software Limited
|
||||
This file is part of the JUCE framework examples.
|
||||
Copyright (c) Raw Material Software Limited
|
||||
|
||||
JUCE is an open source library subject to commercial or open-source
|
||||
licensing.
|
||||
The code included in this file is provided under the terms of the ISC license
|
||||
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
|
||||
to use, copy, modify, and/or distribute this software for any purpose with or
|
||||
without fee is hereby granted provided that the above copyright notice and
|
||||
this permission notice appear in all copies.
|
||||
|
||||
By using JUCE, you agree to the terms of both the JUCE 7 End-User License
|
||||
Agreement and JUCE Privacy Policy.
|
||||
|
||||
End User License Agreement: www.juce.com/juce-7-licence
|
||||
Privacy Policy: www.juce.com/juce-privacy-policy
|
||||
|
||||
Or: You may also use this code under the terms of the GPL v3 (see
|
||||
www.gnu.org/licenses).
|
||||
|
||||
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
|
||||
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
|
||||
DISCLAIMED.
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
==============================================================================
|
||||
*/
|
||||
|
|
@ -28,7 +26,7 @@
|
|||
#include "MainComponent.h"
|
||||
|
||||
//==============================================================================
|
||||
class SettingsContent : public Component
|
||||
class SettingsContent final : public Component
|
||||
{
|
||||
public:
|
||||
SettingsContent (MainComponent& topLevelComponent)
|
||||
|
|
@ -67,8 +65,8 @@ private:
|
|||
static constexpr int itemHeight = 30;
|
||||
static constexpr int itemSpacing = 7;
|
||||
|
||||
class GraphicsSettingsGroup : public Component,
|
||||
private ComponentMovementWatcher
|
||||
class GraphicsSettingsGroup final : public Component,
|
||||
private ComponentMovementWatcher
|
||||
{
|
||||
public:
|
||||
GraphicsSettingsGroup (MainComponent& comp)
|
||||
|
|
@ -76,7 +74,7 @@ private:
|
|||
mainComponent (comp)
|
||||
{
|
||||
addAndMakeVisible (titleLabel);
|
||||
titleLabel.setFont (titleLabelFontHeight);
|
||||
titleLabel.setFont (FontOptions { titleLabelFontHeight });
|
||||
|
||||
addLookAndFeels();
|
||||
|
||||
|
|
@ -179,14 +177,14 @@ private:
|
|||
OwnedArray<LookAndFeel> lookAndFeels;
|
||||
};
|
||||
|
||||
class AudioSettingsGroup : public Component
|
||||
class AudioSettingsGroup final : public Component
|
||||
{
|
||||
public:
|
||||
AudioSettingsGroup()
|
||||
: deviceSelectorComp (getSharedAudioDeviceManager(), 0, 256, 0, 256, true, true, true, false)
|
||||
{
|
||||
addAndMakeVisible (titleLabel);
|
||||
titleLabel.setFont (titleLabelFontHeight);
|
||||
titleLabel.setFont (FontOptions { titleLabelFontHeight });
|
||||
|
||||
addAndMakeVisible (deviceSelectorComp);
|
||||
deviceSelectorComp.setItemHeight (itemHeight);
|
||||
|
|
@ -211,7 +209,7 @@ private:
|
|||
};
|
||||
|
||||
//==============================================================================
|
||||
class InnerContent : public Component
|
||||
class InnerContent final : public Component
|
||||
{
|
||||
public:
|
||||
InnerContent (MainComponent& mainComponent)
|
||||
|
|
@ -236,12 +234,12 @@ private:
|
|||
audioSettings.setBounds (bounds);
|
||||
}
|
||||
|
||||
private:
|
||||
std::unique_ptr<AccessibilityHandler> createAccessibilityHandler() override
|
||||
{
|
||||
return createIgnoredAccessibilityHandler (*this);
|
||||
}
|
||||
|
||||
private:
|
||||
GraphicsSettingsGroup graphicsSettings;
|
||||
AudioSettingsGroup audioSettings;
|
||||
};
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue