Skip to content

Personal Summer Project - Building an audio plugin prototype for Vibe Music Productions while learning C++ and the JUCE audio framework.

Notifications You must be signed in to change notification settings

apollomoon-ucf/Audio_Sampler_Plugin

Repository files navigation

Audio Sampler Plugin

Introduction

For one of my summer projects, I will be building an audio sampler plugin prototype for Vibe Music Productions, a professional recording studio and music production facility located in Ponte Vedra Beach, Florida. https://www.vibemusicproductions.com/

Notes: updates coming soon!

For anyone wanting to create a similar project, I used the following sources:

https://juce.com/learn/tutorials

https://www.youtube.com/c/TheAudioProgrammer

(Plugin UI as of 7|20|21)

Screenshot_with_KeysLit2

Objective

The goal of this project is to practice C++, Object-oriented programming, and the JUCE audio framework by building a plugin that can load an audio sample, trigger/play the sample via an external or on-screen midi keyboard, control output level, and manipulate the loaded sound using an ADSR envelope. After establishing the base functionality, I would like to add the ability to divide a sample into key-assignable sections, as well as offer a record feature that could route audio inputs into the plugin for live audio sampling capabilities.

The entire development process of the plugin is documented below, please see the end of README for the latest updates.

-Brian Moon

(Plugin prototype demo as of 7|20|21 - updates coming soon) Plugin_Demo_Vibe_Audio_Sampler

Technology and Setup

The recording studio will need the plugin to be compatible with Native Instrument's Maschine 2 running on Windows 10. C++ and the JUCE audio framework will be used to develop the plugin.

(Loading VST tester in Native Instrument's Maschine 2 Software) Screenshot_Loading_Vibe_Sampler

(VST success message) Screenshot_SuccessMessage_Vibe_Sampler

Layout Vision (sketch)

To visualize a rough layout of the plugin, I created a sketch using https://sketch.io/sketchpad/, simply putting some images together to get a feel for the layout. Knobs are a modified version of a template from KnobMan.

Note: This visualization is not meant to represent the final design of the user interface. Once plugin functionality is established, I will work on making it aesthetically pleasing.

(First sketch of plugin prototype) Screenshot_vibe_sampler_sketch

Update (7/7/21): Users would like to have a sound library located on the left side of the plugin to streamline the process of dragging and dropping samples onto the sample editor located in the center of the plugin. Maschine 2 has a sidebar for samples if we can't make this work properly, but it would be a nice addition. Also, the Gain knob may look better in the top right corner as a dedicated master volume knob.

(Second sketch of plugin prototype with proposed sample/sound library sidebar) Screenshot_vibe_sampler_sketch_with_library

Development (coding the plugin)

Now it's time to dive into the core functionality of the plugin. Drag and drop capabilities were added so users can simply drop their desired sound onto the plugin. I also added a file upload link for .wav, .mp3, and .aiff/.aif files to give the user an additional upload method.

Upon successful upload of an acceptable audio file, a success message is displayed (as seen in the image below).

At this point, the plugin loads a file, and the sound can be triggered via midi in Maschine 2 (a test beat was successfully created using the VibeSampler in this raw form as the only instrument). Note: plugin states are not reloadable at this stage; the plugin is cleared when daw is restarted.

(Plugin displaying success message "Sound file loaded!" after loading sound/sample) Screenshot_plugin_loading_success_drag_drop

Continuing development, I added knobs and labels and displayed them on the plugin. I attempted to match the placement of the knobs to the plugin layout seen in the previous section.

(Plugin displaying knobs, labels (showing ms but needs to be changed to seconds, and sample load options) Screenshot_knobs_labels_coded

Added button to change polyphony of sampler, and ADSR knobs are fully functional. The gain knob still needs to be connected to the output.

(Plugin displaying polyphonic control) Screenshot_polyphony

The displayed waveform is in the center of the window with a width equal to window width. I want to create a sample window to house the waveform, therefore, the next step will be to draw the waveform inside of a centered box.

(Plugin displaying waveform) waveform_image_for_sketch

I centered waveform on the plugin, and preparing to outline/frame it to match the layout. Displayed sample/test Vibe logo, but need to replace it with a high-resolution version, along with the text "Vibe Audio Sampler" during the design phase.

(Plugin displaying waveform - need to change labels to seconds, but I might remove labels or only show them on mouse hover for a clean look) Screenshot_waveform_drawn_v2

7|13|21 Corrected position of loaded waveform visualization, fixed logo dimensions, added plugin title ("Vibe Audio Sampler"), and tested a dark mode layout.

(Plugin displaying dark mode test) Screenshot_dark_mode_mono

7|17|21 -- Connected Gain knob, saved parameters and audio sample file path in Value Tree to allow settings and sounds to be reloaded when daw is restarted, added a visual component to house the waveform, and made a note to fix audio clicking/popping when a note is played fast in monophonic mode. When a voice is stolen, there is an audible click. The solution may include changing how abrupt the first sample releases, and how fast the new sample attacks when ending the first sample/voice and starting the new/second sample/voice.

(Plugin displaying updated UI) Screenshot_waveform_box

7|18|21 -- I adjusted the position of ADSR knobs, added playhead and waveform tracing when the sample is triggered. The playhead and waveform tracing (shown in purple) display for a duration equal to the amount of time the midi note is active. Another implementation could be displaying the playhead and waveform tracing for the duration of the release time parameter. Note: I think I want to add a meter, or meters, to monitor input and output levels; displaying the levels using a purple hue as seen in Vibe's logo.

(Plugin displaying playhead and waveform tracing) Screenshot_showing_playhead_waveform_tracing

7|19|21 -- Updated logo and filled buttons with black. Added keyboard component and rescaled layout to fit other elements. Changed polyphony textbox to label.

(Plugin displaying new keyboard component, poly/mono label, and newly scaled UI) Screenshot_vibe_sampler_withKeyboard

ALT Logo Test

(Plugin displaying alt logo without Vibe text) Screenshot_vibe_sampler_withKeyboard_withoutvibetext

7|20|21 -- Connected on-screen keyboard and changed mouse hover color and note-on color to rebeccapurple to match the color scheme.

(Plugin displaying on-screen keyboard connected with highlighted keys) Screenshot_with_keys_Lit1

Added sample loading instructions.

(Plugin displaying sample loading instructions) Screenshot_with_sample_load_instructions

About

Personal Summer Project - Building an audio plugin prototype for Vibe Music Productions while learning C++ and the JUCE audio framework.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages