Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Get rid of broken links to rawmaterialsoftware.com

Introduction to Juce

Juce is a GPL-licensed library for writing C++ software. "Juce" stands for "Jules' Utility Class Extensions," as it was written by one person, Julian Storer. Capitalization of its name doesn't seem to matter—we've seen it written as "Juce," "juce," and "JUCE" in official documents.

...

  • Completely open-source, which allows us to tweak the library as needed
  • No licensing restrictions for non-commercial applications
  • Intuitive class structure based on components
  • Completely cross-platform so we can compile the same code for Linux, Windows, and Mac
  • Extremely lightweight, which allows us to include the source code in our GitHub repository.
  • Great documentation
  • A very helpful forum, where you'll often get help from Jules himself
  • Built-in audio processor classes, which make it easy to set up processing pipelines for ephys data

...

* Only one available tutorial. However, the Juce package contains example applications that cover almost every aspect of the library.
* It's not as widely adopted as Qt, which means you can't purchase Juce books or find extensive online examples. However, we have found Juce's online documentation and forum to be more than adequate for learning and troubleshooting.

...

The library files contained in this repository are based on Juce version 4.2.0, the latest stable release1. If you want to check out the original source, you can download a .zip file from GitHub. In addition to the source code, this package contains example applications that are useful for gaining familiarity with Juce.

...

Here are some Juce classes that are used extensively throughout the GUI. You should learn to love them:

  • AudioSampleBuffer - used to shuttle continuous data through the ProcessorGraph. Holds an array of floats of size channels x samples.
  • MidiBuffer - used to shuttle event data through the ProcessorGraph. Holds discrete events with a timestamp and several bytes of data. In the Juce source code in this repository, the MidiBuffer class has been modified so that each event can hold an arbitrary number of bytes. This is so things like spike events can be sent from processor to processor through the MidiBuffer.
  • Component - almost everything the user can interact with is a component. Components hold other components as children, which inform their parents when they receive a user input, such as a click.
  • Graphics - used to draw within Components.

...

  • `MidiBuffer::addEvent` in `modules/juce_audio_basics/midi/juce_MidiBuffer.cpp` was modified to handle MIDI events of arbitrary length (lines 143-160). This allows spikes and other event-based data to be passed between processors via the MIDI buffer.
  • `MidiMessage::getMessageLengthFromFirstByte` in `modules/juce_audio_basics/midi/juce_MidiMessage.cpp` was changed to return the input (i.e., it no longer checks to see that the message length is less than or equal to three bytes.
  • The assertion on line 121 of `modules/juce_audio_basics/midi/juce_MidiMessage.cpp` was commented out.
  • The "if" statement on line 406 of `modules/juce_audio_basics/midi/juce_MidiMessage.cpp` was commented out, to allow the second byte of a MidiMessage to be set to zero (for saving purposes)

...