JUCE: Difference between revisions

From EMC23 - Satellite Of Love
Jump to navigation Jump to search
 
(22 intermediate revisions by the same user not shown)
Line 5: Line 5:


The aim of JUCE is to allow software to be written such that the same source code will compile and run identically on Windows, macOS and Linux platforms. It supports various development environments and compilers.
The aim of JUCE is to allow software to be written such that the same source code will compile and run identically on Windows, macOS and Linux platforms. It supports various development environments and compilers.
=== Class Index ===
https://docs.juce.com/master/index.html
=== Modules ===
https://docs.juce.com/master/modules.html


== Official Tutorials ==
== Official Tutorials ==
=== Getting Started ===
=== Getting Started ===


==== Getting started with the Projucer ====
* Getting started with the Projucer


http://docs.juce.com/master/tutorial_new_projucer_project.html Learn how to install JUCE. Create an Projucer project, and generate Xcode/Visual Studio projects that you can run and debug.
http://docs.juce.com/master/tutorial_new_projucer_project.html Learn how to install JUCE. Create an Projucer project, and generate Xcode/Visual Studio projects that you can run and debug.


==== Manage your Projucer projects ====
* Manage your Projucer projects
http://docs.juce.com/master/tutorial_manage_projucer_project.html
http://docs.juce.com/master/tutorial_manage_projucer_project.html The Projucer is a very powerful tool for managing cross-platform projects. Learn how to configure your build settings, create new export targets and configurations, and use the Projucer's C++ code editor.
 
* Create a basic audio plug-in, part 1
 
http://docs.juce.com/master/tutorial_create_projucer_basic_plugin.html Set up your computer to create and build audio plug-ins using JUCE.
 
* Create a basic audio plug-in, part 2
http://docs.juce.com/master/tutorial_code_basic_plugin.html Create a simple VST or AudioUnit plugin using JUCE, featuring a custom GUI and MIDI input.
 
* Choosing the right Projucer template for your application
 
http://docs.juce.com/master/tutorial_choosing_projucer_template.html Explore the different template projects that the Projucer offers and the main classes to watch for when conceiving your applications.
 
=== Audio ===
 
* Build an audio player
http://docs.juce.com/master/tutorial_playing_sound_files.html Let your app read from audio files such as WAV, AIFF, Ogg-Vorbis etc. Add more GUI controls to your music player such as Play, Pause, and Stop buttons.


The Projucer is a very powerful tool for managing cross-platform projects. Learn how to configure your build settings, create new export targets and configurations, and use the Projucer's C++ code editor.
* Processing audio input


==== Create a basic audio plug-in, part 1 ====
http://docs.juce.com/master/tutorial_processing_audio_input.html Capture audio input, process it and pass it to the audio output.


http://docs.juce.com/master/tutorial_create_projucer_basic_plugin.html
*Looping audio using the AudioSampleBuffer class


Set up your computer to create and build audio plug-ins using JUCE.
http://docs.juce.com/master/tutorial_looping_audio_sample_buffer.html This tutorial shows how to play and loop audio stored in an AudioSampleBuffer object. This is a useful basis for sampling applications that manipulate recorded audio data.


==== Create a basic audio plug-in, part 2 ====
*Looping audio using the AudioSampleBuffer class (advanced)
http://docs.juce.com/master/tutorial_code_basic_plugin.html


Create a simple VST or AudioUnit plugin using JUCE, featuring a custom GUI and MIDI input.
http://docs.juce.com/master/tutorial_looping_audio_sample_buffer_advanced.html This tutorial shows how to play and loop audio stored in an AudioSampleBuffer object using thread-safe techniques. A technique for loading the audio data on a background thread is also introduced.


==== Choosing the right Projucer template for your application ====
*Draw audio waveforms


http://docs.juce.com/master/tutorial_choosing_projucer_template.html
http://docs.juce.com/master/tutorial_audio_thumbnail.html Learn how to draw waveforms of audio files loaded from disk. This tutorial will familiarise the reader with the AudioThumbnail class.


Explore the different template projects that the Projucer offers and the main classes to watch for when conceiving your applications.
* The AudioDeviceManager class


=== Audio ===
http://docs.juce.com/master/tutorial_audio_device_manager.html This tutorial introduces the AudioDeviceManager class which is used for managing audio devices on all platforms.


==== Build an audio player ====
=== Synth ===
http://docs.juce.com/master/tutorial_playing_sound_files.html


Let your app read from audio files such as WAV, AIFF, Ogg-Vorbis etc. Add more GUI controls to your music player such as Play, Pause, and Stop buttons.
* Build a white noise generator


==== Processing audio input ====
http://docs.juce.com/master/tutorial_simple_synth_noise.html Create a basic audio app that outputs some sound. In this example, we will build a simple white noise generator.


Capture audio input, process it and pass it to the audio output.
* Control audio levels


==== Looping audio using the AudioSampleBuffer class ====
http://docs.juce.com/master/tutorial_synth_level_control.html Add user controls to your audio app. Add a slider to let the user adjust the level of a noise generator.


http://docs.juce.com/master/tutorial_looping_audio_sample_buffer.html
*Control audio levels using decibels


This tutorial shows how to play and loop audio stored in an AudioSampleBuffer object. This is a useful basis for sampling applications that manipulate recorded audio data.
http://docs.juce.com/master/tutorial_synth_db_level_control.html This tutorial shows how to process audio to change its output level using the decibel scale. This is a more common way in which to present audio level values to the user within audio applications.


==== Looping audio using the AudioSampleBuffer class (advanced)====
* Build a sine wave synthesiser


http://docs.juce.com/master/tutorial_looping_audio_sample_buffer_advanced.html
http://docs.juce.com/master/tutorial_sine_synth.html Learn how to use a sine wave to synthesise a basic musical tone. Let the user modify the pitch of the tone from the graphical user interface.


This tutorial shows how to play and loop audio stored in an AudioSampleBuffer object using thread-safe techniques. A technique for loading the audio data on a background thread is also introduced.
* Build a MIDI synthesiser


====Draw audio waveforms====
http://docs.juce.com/master/tutorial_synth_using_midi_input.html This tutorial implements a polyphonic sine wave synthesiser that responds to MIDI input. This makes use of the Synthesiser class and related classes.


http://docs.juce.com/master/tutorial_audio_thumbnail.html
* Wavetable synthesis


Learn how to draw waveforms of audio files loaded from disk. This tutorial will familiarise the reader with the AudioThumbnail class.
http://docs.juce.com/master/tutorial_wavetable_synth.html Incorporate wavetables to optimise your synthesiser oscillators. Manage the state of a sine wave oscillator using a wavetable and write data to the audio output.


==== The AudioDeviceManager class====
=== MIDI ===


http://docs.juce.com/master/tutorial_audio_device_manager.html
* Create MIDI data


This tutorial introduces the AudioDeviceManager class which is used for managing audio devices on all platforms.
http://docs.juce.com/master/tutorial_midi_message.html Generate MIDI data in your app so that you can control external synths and devices.


=== Synth ===
* Handling MIDI events


==== Build a white noise generator ====
http://docs.juce.com/master/tutorial_handling_midi_events.html This tutorial illustrates how to handle MIDI input events. In addition to handing MIDI data from an external source, an on-screen keyboard component is introduced.


Create a basic audio app that outputs some sound. In this example, we will build a simple white noise generator.
* Build a multi-polyphonic synthesiser


====Control audio levels====
http://docs.juce.com/master/tutorial_mpe_introduction.html Learn the basics of the MPE standard and how to implement a synthesiser that supports MPE.


Add user controls to your audio app. Add a slider to let the user adjust the level of a noise generator.
* Understanding MPE zones


====Control audio levels using decibels====
http://docs.juce.com/master/tutorial_mpe_zones.html Learn the concept of zones and the conventions for zone layouts as defined in the MPE standard.


This tutorial shows how to process audio to change its output level using the decibel scale. This is a more common way in which to present audio level values to the user within audio applications.
=== Plugins ===


====Build a sine wave synthesiser====
* Adding plug-in parameters


Learn how to use a sine wave to synthesise a basic musical tone. Let the user modify the pitch of the tone from the graphical user interface.
http://docs.juce.com/master/tutorial_audio_parameter.html Add parameters to your audio plug-in to allow control and automation from your digital audio workstation.


====Build a MIDI synthesiser====
* Saving and loading your plug-in state


This tutorial implements a polyphonic sine wave synthesiser that responds to MIDI input. This makes use of the Synthesiser class and related classes.
http://docs.juce.com/master/tutorial_audio_processor_value_tree_state.html Manage your plug-in parameters in an elegant and sophisticated manner.


====Wavetable synthesis====
* Configuring the right bus layouts for your plugins


Incorporate wavetables to optimise your synthesiser oscillators. Manage the state of a sine wave oscillator using a wavetable and write data to the audio output.
http://docs.juce.com/master/tutorial_audio_bus_layouts.html Learn how to configure and restrict the bus layouts in your plugins for a multitude of configurations. Check the bus arrangements of your AU plugins using the auval tool provided in Apple's Logic Pro.


=== MIDI ===
* Cascading plug-in effects


====Create MIDI data====
http://docs.juce.com/master/tutorial_audio_processor_graph.html Create your own channel strip by learning how to daisy chain audio processors or plugins using an AudioProcessorGraph. Learn how to use the AudioProcessorGraph in both a plugin and standalone application context.
Generate MIDI data in your app so that you can control external synths and devices.
====Handling MIDI events====
This tutorial illustrates how to handle MIDI input events. In addition to handing MIDI data from an external source, an on-screen keyboard component is introduced.
====Build a multi-polyphonic synthesiser====
Learn the basics of the MPE standard and how to implement a synthesiser that supports MPE.
====Understanding MPE zones====
Learn the concept of zones and the conventions for zone layouts as defined in the MPE standard.


=== Plugins ===
* Plugin examples


    Adding plug-in parametersAdd parameters to your audio plug-in to allow control and automation from your digital audio workstation.
http://docs.juce.com/master/tutorial_plugin_examples.html This tutorial explains several audio/midi plug-in examples in detail and explores the open possibilities of plug-in development.
    Saving and loading your plug-in stateManage your plug-in parameters in an elegant and sophisticated manner.
    Configuring the right bus layouts for your pluginsLearn how to configure and restrict the bus layouts in your plugins for a multitude of configurations. Check the bus arrangements of your AU plugins using the auval tool provided in Apple's Logic Pro.
    Cascading plug-in effectsCreate your own channel strip by learning how to daisy chain audio processors or plugins using an AudioProcessorGraph. Learn how to use the AudioProcessorGraph in both a plugin and standalone application context.
    Plugin examplesThis tutorial explains several audio/midi plug-in examples in detail and explores the open possibilities of plug-in development.


=== DSP ===
=== DSP ===


    Introduction to DSPDiscover the realm of digital signal processing and audio buffer manipulation. Learn the basics of the JUCE DSP module and how you can incorporate its classes in your own audio application and plugins.
* Introduction to DSP
    Add distortion through waveshaping and convolutionAdd grit to a synthesiser sound by creating harmonic distortion through waveshaping. Learn the basics of convolution to retrieve the sonic characteristics contained in an impulse response.
 
    Create a string model with delay linesImplement a realistic string model by means of physical modelling. Incorporate a delay line to create intricate echo patterns in the stereo sound field.
http://docs.juce.com/master/tutorial_dsp_introduction.html Discover the realm of digital signal processing and audio buffer manipulation. Learn the basics of the JUCE DSP module and how you can incorporate its classes in your own audio application and plugins.
    Optimisation using the SIMDRegister classTake advantage of the processor's parallelism to perform single instruction multiple data calculations. Optimise your audio applications without introducing concurrency.
 
    The fast Fourier transformLearn how to display incoming audio data as a spectrogram by using the FFT class of the DSP module. Understand the benefits of using a Fast Fourier Transform.
* Add distortion through waveshaping and convolution
    Visualise the frequencies of a signal in real timeLearn how to display incoming audio data as a spectrum analyser by using the FFT class of the DSP module. Understand the benefits of using a windowing function.
 
http://docs.juce.com/master/tutorial_dsp_convolution.html Add grit to a synthesiser sound by creating harmonic distortion through waveshaping. Learn the basics of convolution to retrieve the sonic characteristics contained in an impulse response.
 
* Create a string model with delay lines
 
http://docs.juce.com/master/tutorial_dsp_delay_line.html Implement a realistic string model by means of physical modelling. Incorporate a delay line to create intricate echo patterns in the stereo sound field.
 
* Optimisation using the SIMDRegister class
 
http://docs.juce.com/master/tutorial_simd_register_optimisation.html Take advantage of the processor's parallelism to perform single instruction multiple data calculations. Optimise your audio applications without introducing concurrency.
 
* The fast Fourier transform
 
http://docs.juce.com/master/tutorial_simple_fft.html Learn how to display incoming audio data as a spectrogram by using the FFT class of the DSP module. Understand the benefits of using a Fast Fourier Transform.
 
* Visualise the frequencies of a signal in real time
 
http://docs.juce.com/master/tutorial_spectrum_analyser.html Learn how to display incoming audio data as a spectrum analyser by using the FFT class of the DSP module. Understand the benefits of using a windowing function.


=== Graphics ===
=== Graphics ===


    The application windowCreate a basic GUI app with a resizable window.
* The application window
    The main componentLearn how to add a content component to your window that can hold different graphical elements.
http://docs.juce.com/master/tutorial_main_window.html Create a basic GUI app with a resizable window.
    The Graphics classFill your app with colour! Add colours, text, lines and other geometrical shapes.
 
    Animating geometryCreate simple animations in your JUCE applications. Bring static geometry shapes to life using the AnimatedAppComponent class.
* The main component
    Build an OpenGL applicationLearn how to get started with OpenGL as a high performance rendering library within your JUCE applications. Render beautiful 2D and 3D graphics in your audio apps and plugins.
http://docs.juce.com/master/tutorial_main_component.html Learn how to add a content component to your window that can hold different graphical elements.
 
* The Graphics class
http://docs.juce.com/master/tutorial_graphics_class.html Fill your app with colour! Add colours, text, lines and other geometrical shapes.
 
* Animating geometry
http://docs.juce.com/master/tutorial_animation.html Create simple animations in your JUCE applications. Bring static geometry shapes to life using the AnimatedAppComponent class.
 
* Build an OpenGL application
http://docs.juce.com/master/tutorial_open_gl_application.html Learn how to get started with OpenGL as a high performance rendering library within your JUCE applications. Render beautiful 2D and 3D graphics in your audio apps and plugins.


=== Interface Design ===
=== Interface Design ===


    Parent and child componentsLearn how to arrange your components into a hierarchy to build a modular graphical user interface for your JUCE app.
* Parent and child components
    Customise the look and feel of your appMake a custom skin for your application by drawing your own buttons, sliders, and other components.
http://docs.juce.com/master/tutorial_component_parents_children.html Learn how to arrange your components into a hierarchy to build a modular graphical user interface for your JUCE app.
    Colours in JUCESpecify and apply colours within your application in various ways.
 
    The Point, Line, and Rectangle classesUse the Point, Line, and Rectangle classes to simplify your geometry calculations.
* Customise the look and feel of your app
    Advanced GUI layout techniquesLay out your components with a simple yet powerful technique that will produce elegant code with fewer bugs.
http://docs.juce.com/master/tutorial_look_and_feel_customisation.html Make a custom skin for your application by drawing your own buttons, sliders, and other components.
    Responsive GUI layouts using FlexBox and GridBuild responsive GUI layouts that work across different screen sizes and orientations using the FlexBox and Grid classes. Learn how to quickly visualise Components using the Projucer Live Build editor.
 
    Listeners and BroadcastersMake your app interactive! Learn how to connect different elements of your GUI. In this example, we let a graphical element automatically change whenever the user clicks on a button.
* Colours in JUCE
    The Slider classAdd sliders to your app to graphically modify a value within a range. Learn how to use the Slider class to handle different values and ranges, and how to use logarithmic ranges.
http://docs.juce.com/master/tutorial_colours.html Specify and apply colours within your application in various ways.
    The Label classAdd labels to display text in your apps. Learn how to customise the appearance of text using the Label class and display simple text editors.
 
    The ComboBox classThis tutorial introduces the ComboBox class, which is a component for displaying lists of items to the user. The contents of a ComboBox object can be modified dynamically, and can be used for text input, too.
* The Point, Line, and Rectangle classes
    Radio buttons and checkboxesUse radio buttons and checkboxes to add selectable options to your application.
http://docs.juce.com/master/tutorial_point_line_rectangle.html Use the Point, Line, and Rectangle classes to simplify your geometry calculations.
    The TableListBox classIncorporate tables into your JUCE user interfaces. Display data loaded from an XML file and customise the format of your table.
 
* Advanced GUI layout techniques
http://docs.juce.com/master/tutorial_rectangle_advanced.html Lay out your components with a simple yet powerful technique that will produce elegant code with fewer bugs.
 
* Responsive GUI layouts using FlexBox and Grid
http://docs.juce.com/master/tutorial_flex_box_grid.html Build responsive GUI layouts that work across different screen sizes and orientations using the FlexBox and Grid classes. Learn how to quickly visualise Components using the Projucer Live Build editor.
 
* Listeners and Broadcasters
http://docs.juce.com/master/tutorial_listeners_and_broadcasters.html Make your app interactive! Learn how to connect different elements of your GUI. In this example, we let a graphical element automatically change whenever the user clicks on a button.
 
* The Slider class
http://docs.juce.com/master/tutorial_slider_values.html Add sliders to your app to graphically modify a value within a range. Learn how to use the Slider class to handle different values and ranges, and how to use logarithmic ranges.
 
* The Label class
http://docs.juce.com/master/tutorial_label.html Add labels to display text in your apps. Learn how to customise the appearance of text using the Label class and display simple text editors.
 
* The ComboBox class
http://docs.juce.com/master/tutorial_combo_box.html This tutorial introduces the ComboBox class, which is a component for displaying lists of items to the user. The contents of a ComboBox object can be modified dynamically, and can be used for text input, too.
 
* Radio buttons and checkboxes
http://docs.juce.com/master/tutorial_radio_buttons_checkboxes.html Use radio buttons and checkboxes to add selectable options to your application.
 
* The TableListBox class
http://docs.juce.com/master/tutorial_table_list_box.html Incorporate tables into your JUCE user interfaces. Display data loaded from an XML file and customise the format of your table.


=== Mobile ===
=== Mobile ===


    Getting started with AndroidThis tutorial introduces the use of Android Studio for creating JUCE-based projects.
* Getting started with Android
    Managing Android screen sizesBuild your application for different screen sizes. There are many available screen sizes on Android, this tutorial examines some strategies to manage this.
http://docs.juce.com/master/tutorial_android_studio.html This tutorial introduces the use of Android Studio for creating JUCE-based projects.
    In-App Purchases on desktop and mobile devicesSell consumable and non-consumable In-App Purchases in your desktop and mobile applications. Learn how to setup and process payments for IAP products on both macOS/iOS and Android devices.
 
    Push Notifications on desktop and mobile devicesTrigger local and remote notifications in your desktop and mobile applications. Learn how to send push notifications from a remote server to both macOS/iOS and Android devices.
* Managing Android screen sizes
http://docs.juce.com/master/tutorial_android_screen_sizes.html Build your application for different screen sizes. There are many available screen sizes on Android, this tutorial examines some strategies to manage this.
 
* In-App Purchases on desktop and mobile devices
http://docs.juce.com/master/tutorial_in_app_purchases.html Sell consumable and non-consumable In-App Purchases in your desktop and mobile applications. Learn how to setup and process payments for IAP products on both macOS/iOS and Android devices.
 
* Push Notifications on desktop and mobile devices
http://docs.juce.com/master/tutorial_push_notifications.html Trigger local and remote notifications in your desktop and mobile applications. Learn how to send push notifications from a remote server to both macOS/iOS and Android devices.


=== Utility Classes ===
=== Utility Classes ===


    The BigInteger classThis tutorial introduces the BigInteger class, which is for handling arbitrarily large integers. BigInteger objects are often used in cryptography applications, when large bit masks are needed, and anywhere else where really large integers are needed.
* The BigInteger class
    The Random classThis tutorial introduces generating random numbers using the Random class. Random numbers are useful in all sorts of situations including games, cryptography, and audio.
http://docs.juce.com/master/tutorial_big_integer.html This tutorial introduces the BigInteger class, which is for handling arbitrarily large integers. BigInteger objects are often used in cryptography applications, when large bit masks are needed, and anywhere else where really large integers are needed.
    File readingOpen and read data from text and binary files.
    The ValueTree classLearn how to use the ValueTree class to manage data effectively in your applications.
    Using an UndoManager with a ValueTreeImplement undo/redo actions in your applications. Easily restore previous intermediate states with UndoableAction objects and learn how to group undoable actions into transactions.
    App analytics collectionCollect app usage data from users in JUCE applications. Send analytics events to Google Analytics using the analytics module.
    Unlock your plugins through online registrationImprove the security of your apps and plugins by locking their access until authorisation. Learn how to provide users with a mechanism to unlock your plugins through online registration of keys.
    Package your app or plugin for distributionLearn how to prepare your audio application or plugin for distribution on various marketplaces. Create installers for all plugin types on different OS platforms.
    Implement the OSC protocol in your appLearn how to harness the Open Sound Control protocol to connect several applications together over a network. Send and receive interaction data between applications.


== Examples ==
* The Random class
Digital signal processing (DSP) is the use of digital processing, such as by computers or more specialized digital signal processors, to perform a wide variety of signal processing operations. The signals processed in this manner are a sequence of numbers that represent samples of a continuous variable in a domain such as time, space, or frequency.
http://docs.juce.com/master/tutorial_random.html This tutorial introduces generating random numbers using the Random class. Random numbers are useful in all sorts of situations including games, cryptography, and audio.


Digital signal processing and analog signal processing are subfields of signal processing. DSP applications include audio and speech processing, sonar, radar and other sensor array processing, spectral density estimation, statistical signal processing, digital image processing, signal processing for telecommunications, control systems, biomedical engineering, seismology, among others.
* File reading
http://docs.juce.com/master/tutorial_file_reading.html Open and read data from text and binary files.


http://docs.juce.com/master/tutorial_dsp_introduction.html
* The ValueTree class
Discover the realm of digital signal processing and audio buffer manipulation. Learn the basics of the JUCE DSP module and how you can incorporate its classes in your own audio application and plugins.
http://docs.juce.com/master/tutorial_value_tree.html Learn how to use the ValueTree class to manage data effectively in your applications.


* Using an UndoManager with a ValueTree
http://docs.juce.com/master/tutorial_undo_manager_value_tree.html Implement undo/redo actions in your applications. Easily restore previous intermediate states with UndoableAction objects and learn how to group undoable actions into transactions.


http://docs.juce.com/master/tutorial_dsp_convolution.html
* App analytics collection
Add grit to a synthesiser sound by creating harmonic distortion through waveshaping. Learn the basics of convolution to retrieve the sonic characteristics contained in an impulse response.
http://docs.juce.com/master/tutorial_analytics_collection.html Collect app usage data from users in JUCE applications. Send analytics events to Google Analytics using the analytics module.


http://docs.juce.com/master/tutorial_dsp_delay_line.html
* Unlock your plugins through online registration
Implement a realistic string model by means of physical modelling. Incorporate a delay line to create intricate echo patterns in the stereo sound field.
http://docs.juce.com/master/tutorial_online_unlock_status.html Improve the security of your apps and plugins by locking their access until authorisation. Learn how to provide users with a mechanism to unlock your plugins through online registration of keys.


* Package your app or plugin for distribution
http://docs.juce.com/master/tutorial_app_plugin_packaging.html Learn how to prepare your audio application or plugin for distribution on various marketplaces. Create installers for all plugin types on different OS platforms.


http://docs.juce.com/master/tutorial_simd_register_optimisation.html
* Implement the OSC protocol in your app
Take advantage of the processor's parallelism to perform single instruction multiple data calculations. Optimise your audio applications without introducing concurrency.
http://docs.juce.com/master/tutorial_osc_sender_receiver.html Learn how to harness the Open Sound Control protocol to connect several applications together over a network. Send and receive interaction data between applications.


http://docs.juce.com/master/tutorial_simple_fft.html
== Examples ==
Learn how to display incoming audio data as a spectrogram by using the FFT class of the DSP module. Understand the benefits of using a Fast Fourier Transform.
 
http://docs.juce.com/master/tutorial_spectrum_analyser.html
Learn how to display incoming audio data as a spectrum analyser by using the FFT class of the DSP module. Understand the benefits of using a windowing function.


== Video Tutorials ==
== Video Tutorials ==

Latest revision as of 12:16, 21 December 2022

Info[edit]

JUCE is an open-source cross-platform C ++ Frameworks, used for the development of desktop and mobile applications.

JUCE is used in particular for its GUI and plug-ins libraries. It is dual licensed under the GPLv3 and a commercial license.[2]

The aim of JUCE is to allow software to be written such that the same source code will compile and run identically on Windows, macOS and Linux platforms. It supports various development environments and compilers.

Class Index[edit]

https://docs.juce.com/master/index.html

Modules[edit]

https://docs.juce.com/master/modules.html

Official Tutorials[edit]

Getting Started[edit]

  • Getting started with the Projucer

http://docs.juce.com/master/tutorial_new_projucer_project.html Learn how to install JUCE. Create an Projucer project, and generate Xcode/Visual Studio projects that you can run and debug.

  • Manage your Projucer projects

http://docs.juce.com/master/tutorial_manage_projucer_project.html The Projucer is a very powerful tool for managing cross-platform projects. Learn how to configure your build settings, create new export targets and configurations, and use the Projucer's C++ code editor.

  • Create a basic audio plug-in, part 1

http://docs.juce.com/master/tutorial_create_projucer_basic_plugin.html Set up your computer to create and build audio plug-ins using JUCE.

  • Create a basic audio plug-in, part 2

http://docs.juce.com/master/tutorial_code_basic_plugin.html Create a simple VST or AudioUnit plugin using JUCE, featuring a custom GUI and MIDI input.

  • Choosing the right Projucer template for your application

http://docs.juce.com/master/tutorial_choosing_projucer_template.html Explore the different template projects that the Projucer offers and the main classes to watch for when conceiving your applications.

Audio[edit]

  • Build an audio player

http://docs.juce.com/master/tutorial_playing_sound_files.html Let your app read from audio files such as WAV, AIFF, Ogg-Vorbis etc. Add more GUI controls to your music player such as Play, Pause, and Stop buttons.

  • Processing audio input

http://docs.juce.com/master/tutorial_processing_audio_input.html Capture audio input, process it and pass it to the audio output.

  • Looping audio using the AudioSampleBuffer class

http://docs.juce.com/master/tutorial_looping_audio_sample_buffer.html This tutorial shows how to play and loop audio stored in an AudioSampleBuffer object. This is a useful basis for sampling applications that manipulate recorded audio data.

  • Looping audio using the AudioSampleBuffer class (advanced)

http://docs.juce.com/master/tutorial_looping_audio_sample_buffer_advanced.html This tutorial shows how to play and loop audio stored in an AudioSampleBuffer object using thread-safe techniques. A technique for loading the audio data on a background thread is also introduced.

  • Draw audio waveforms

http://docs.juce.com/master/tutorial_audio_thumbnail.html Learn how to draw waveforms of audio files loaded from disk. This tutorial will familiarise the reader with the AudioThumbnail class.

  • The AudioDeviceManager class

http://docs.juce.com/master/tutorial_audio_device_manager.html This tutorial introduces the AudioDeviceManager class which is used for managing audio devices on all platforms.

Synth[edit]

  • Build a white noise generator

http://docs.juce.com/master/tutorial_simple_synth_noise.html Create a basic audio app that outputs some sound. In this example, we will build a simple white noise generator.

  • Control audio levels

http://docs.juce.com/master/tutorial_synth_level_control.html Add user controls to your audio app. Add a slider to let the user adjust the level of a noise generator.

  • Control audio levels using decibels

http://docs.juce.com/master/tutorial_synth_db_level_control.html This tutorial shows how to process audio to change its output level using the decibel scale. This is a more common way in which to present audio level values to the user within audio applications.

  • Build a sine wave synthesiser

http://docs.juce.com/master/tutorial_sine_synth.html Learn how to use a sine wave to synthesise a basic musical tone. Let the user modify the pitch of the tone from the graphical user interface.

  • Build a MIDI synthesiser

http://docs.juce.com/master/tutorial_synth_using_midi_input.html This tutorial implements a polyphonic sine wave synthesiser that responds to MIDI input. This makes use of the Synthesiser class and related classes.

  • Wavetable synthesis

http://docs.juce.com/master/tutorial_wavetable_synth.html Incorporate wavetables to optimise your synthesiser oscillators. Manage the state of a sine wave oscillator using a wavetable and write data to the audio output.

MIDI[edit]

  • Create MIDI data

http://docs.juce.com/master/tutorial_midi_message.html Generate MIDI data in your app so that you can control external synths and devices.

  • Handling MIDI events

http://docs.juce.com/master/tutorial_handling_midi_events.html This tutorial illustrates how to handle MIDI input events. In addition to handing MIDI data from an external source, an on-screen keyboard component is introduced.

  • Build a multi-polyphonic synthesiser

http://docs.juce.com/master/tutorial_mpe_introduction.html Learn the basics of the MPE standard and how to implement a synthesiser that supports MPE.

  • Understanding MPE zones

http://docs.juce.com/master/tutorial_mpe_zones.html Learn the concept of zones and the conventions for zone layouts as defined in the MPE standard.

Plugins[edit]

  • Adding plug-in parameters

http://docs.juce.com/master/tutorial_audio_parameter.html Add parameters to your audio plug-in to allow control and automation from your digital audio workstation.

  • Saving and loading your plug-in state

http://docs.juce.com/master/tutorial_audio_processor_value_tree_state.html Manage your plug-in parameters in an elegant and sophisticated manner.

  • Configuring the right bus layouts for your plugins

http://docs.juce.com/master/tutorial_audio_bus_layouts.html Learn how to configure and restrict the bus layouts in your plugins for a multitude of configurations. Check the bus arrangements of your AU plugins using the auval tool provided in Apple's Logic Pro.

  • Cascading plug-in effects

http://docs.juce.com/master/tutorial_audio_processor_graph.html Create your own channel strip by learning how to daisy chain audio processors or plugins using an AudioProcessorGraph. Learn how to use the AudioProcessorGraph in both a plugin and standalone application context.

  • Plugin examples

http://docs.juce.com/master/tutorial_plugin_examples.html This tutorial explains several audio/midi plug-in examples in detail and explores the open possibilities of plug-in development.

DSP[edit]

  • Introduction to DSP

http://docs.juce.com/master/tutorial_dsp_introduction.html Discover the realm of digital signal processing and audio buffer manipulation. Learn the basics of the JUCE DSP module and how you can incorporate its classes in your own audio application and plugins.

  • Add distortion through waveshaping and convolution

http://docs.juce.com/master/tutorial_dsp_convolution.html Add grit to a synthesiser sound by creating harmonic distortion through waveshaping. Learn the basics of convolution to retrieve the sonic characteristics contained in an impulse response.

  • Create a string model with delay lines

http://docs.juce.com/master/tutorial_dsp_delay_line.html Implement a realistic string model by means of physical modelling. Incorporate a delay line to create intricate echo patterns in the stereo sound field.

  • Optimisation using the SIMDRegister class

http://docs.juce.com/master/tutorial_simd_register_optimisation.html Take advantage of the processor's parallelism to perform single instruction multiple data calculations. Optimise your audio applications without introducing concurrency.

  • The fast Fourier transform

http://docs.juce.com/master/tutorial_simple_fft.html Learn how to display incoming audio data as a spectrogram by using the FFT class of the DSP module. Understand the benefits of using a Fast Fourier Transform.

  • Visualise the frequencies of a signal in real time

http://docs.juce.com/master/tutorial_spectrum_analyser.html Learn how to display incoming audio data as a spectrum analyser by using the FFT class of the DSP module. Understand the benefits of using a windowing function.

Graphics[edit]

  • The application window

http://docs.juce.com/master/tutorial_main_window.html Create a basic GUI app with a resizable window.

  • The main component

http://docs.juce.com/master/tutorial_main_component.html Learn how to add a content component to your window that can hold different graphical elements.

  • The Graphics class

http://docs.juce.com/master/tutorial_graphics_class.html Fill your app with colour! Add colours, text, lines and other geometrical shapes.

  • Animating geometry

http://docs.juce.com/master/tutorial_animation.html Create simple animations in your JUCE applications. Bring static geometry shapes to life using the AnimatedAppComponent class.

  • Build an OpenGL application

http://docs.juce.com/master/tutorial_open_gl_application.html Learn how to get started with OpenGL as a high performance rendering library within your JUCE applications. Render beautiful 2D and 3D graphics in your audio apps and plugins.

Interface Design[edit]

  • Parent and child components

http://docs.juce.com/master/tutorial_component_parents_children.html Learn how to arrange your components into a hierarchy to build a modular graphical user interface for your JUCE app.

  • Customise the look and feel of your app

http://docs.juce.com/master/tutorial_look_and_feel_customisation.html Make a custom skin for your application by drawing your own buttons, sliders, and other components.

  • Colours in JUCE

http://docs.juce.com/master/tutorial_colours.html Specify and apply colours within your application in various ways.

  • The Point, Line, and Rectangle classes

http://docs.juce.com/master/tutorial_point_line_rectangle.html Use the Point, Line, and Rectangle classes to simplify your geometry calculations.

  • Advanced GUI layout techniques

http://docs.juce.com/master/tutorial_rectangle_advanced.html Lay out your components with a simple yet powerful technique that will produce elegant code with fewer bugs.

  • Responsive GUI layouts using FlexBox and Grid

http://docs.juce.com/master/tutorial_flex_box_grid.html Build responsive GUI layouts that work across different screen sizes and orientations using the FlexBox and Grid classes. Learn how to quickly visualise Components using the Projucer Live Build editor.

  • Listeners and Broadcasters

http://docs.juce.com/master/tutorial_listeners_and_broadcasters.html Make your app interactive! Learn how to connect different elements of your GUI. In this example, we let a graphical element automatically change whenever the user clicks on a button.

  • The Slider class

http://docs.juce.com/master/tutorial_slider_values.html Add sliders to your app to graphically modify a value within a range. Learn how to use the Slider class to handle different values and ranges, and how to use logarithmic ranges.

  • The Label class

http://docs.juce.com/master/tutorial_label.html Add labels to display text in your apps. Learn how to customise the appearance of text using the Label class and display simple text editors.

  • The ComboBox class

http://docs.juce.com/master/tutorial_combo_box.html This tutorial introduces the ComboBox class, which is a component for displaying lists of items to the user. The contents of a ComboBox object can be modified dynamically, and can be used for text input, too.

  • Radio buttons and checkboxes

http://docs.juce.com/master/tutorial_radio_buttons_checkboxes.html Use radio buttons and checkboxes to add selectable options to your application.

  • The TableListBox class

http://docs.juce.com/master/tutorial_table_list_box.html Incorporate tables into your JUCE user interfaces. Display data loaded from an XML file and customise the format of your table.

Mobile[edit]

  • Getting started with Android

http://docs.juce.com/master/tutorial_android_studio.html This tutorial introduces the use of Android Studio for creating JUCE-based projects.

  • Managing Android screen sizes

http://docs.juce.com/master/tutorial_android_screen_sizes.html Build your application for different screen sizes. There are many available screen sizes on Android, this tutorial examines some strategies to manage this.

  • In-App Purchases on desktop and mobile devices

http://docs.juce.com/master/tutorial_in_app_purchases.html Sell consumable and non-consumable In-App Purchases in your desktop and mobile applications. Learn how to setup and process payments for IAP products on both macOS/iOS and Android devices.

  • Push Notifications on desktop and mobile devices

http://docs.juce.com/master/tutorial_push_notifications.html Trigger local and remote notifications in your desktop and mobile applications. Learn how to send push notifications from a remote server to both macOS/iOS and Android devices.

Utility Classes[edit]

  • The BigInteger class

http://docs.juce.com/master/tutorial_big_integer.html This tutorial introduces the BigInteger class, which is for handling arbitrarily large integers. BigInteger objects are often used in cryptography applications, when large bit masks are needed, and anywhere else where really large integers are needed.

  • The Random class

http://docs.juce.com/master/tutorial_random.html This tutorial introduces generating random numbers using the Random class. Random numbers are useful in all sorts of situations including games, cryptography, and audio.

  • File reading

http://docs.juce.com/master/tutorial_file_reading.html Open and read data from text and binary files.

  • The ValueTree class

http://docs.juce.com/master/tutorial_value_tree.html Learn how to use the ValueTree class to manage data effectively in your applications.

  • Using an UndoManager with a ValueTree

http://docs.juce.com/master/tutorial_undo_manager_value_tree.html Implement undo/redo actions in your applications. Easily restore previous intermediate states with UndoableAction objects and learn how to group undoable actions into transactions.

  • App analytics collection

http://docs.juce.com/master/tutorial_analytics_collection.html Collect app usage data from users in JUCE applications. Send analytics events to Google Analytics using the analytics module.

  • Unlock your plugins through online registration

http://docs.juce.com/master/tutorial_online_unlock_status.html Improve the security of your apps and plugins by locking their access until authorisation. Learn how to provide users with a mechanism to unlock your plugins through online registration of keys.

  • Package your app or plugin for distribution

http://docs.juce.com/master/tutorial_app_plugin_packaging.html Learn how to prepare your audio application or plugin for distribution on various marketplaces. Create installers for all plugin types on different OS platforms.

  • Implement the OSC protocol in your app

http://docs.juce.com/master/tutorial_osc_sender_receiver.html Learn how to harness the Open Sound Control protocol to connect several applications together over a network. Send and receive interaction data between applications.

Examples[edit]

Video Tutorials[edit]

Gui chapters[edit]

Audio chapters[edit]

Simple Gain Plugin chapters[edit]


Updated 2020[edit]

Metronome chapters[edit]

Synthesiser chapters[edit]


Back to Main Page