Post on 14-Aug-2020
transcript
TeensyAudio CapstoneConnor DelaplaneJoshua BucklinJonathan JensenAida KeiferRyan MellmerNicholas CraigYu Tang
THE PRODUCT•What is it?
• A C++ library and accompanying Python utility to allow realistic
instrumentation audio to be synthesized on the Teensy 3.2. Will
allow pitch shifting, looping, tremolo, and vibrato effects to be
imposed on a raw byte buffer of recorded samples.
•Who will use it?
• This library will be exposed mainly to developers who will
integrate it into their personal projects.
•Why?
• True wavetable synthesis hasn’t been implemented for use on
such a small microcontroller, and would allow these devices to
be turned into realistic-sounding instruments.
ASSUMPTIONS AND CONSTRAINTS
• Low latency
• There should be no perceivable delay in playing samples in response to user
input
• Run time efficient
• Performance cannot degrade upon playback of multiple samples
• Teensy 3.2 has limited memory, 64K RAM
• All functionality must be memory efficient
• C++ code will be interacting with pre-existing device drivers for
generating sound. Driver creation is outside the scope of this project.
FEATURES
● Extracts attack, sustain, release phases from a SoundFont file for a
given note/instrument.
● Loads extracted SoundFont data for playback on the Teensy.
● Changes the pitch of a note by altering the frequency and intensity.
(Turns one note into many.)
● Looping of a sample until a stopping condition occurs.
● Plays audio with tremolo or vibrato effect.
DELIVERABLES
• SoundFont 2 file decoding script (in Python)
• Run from command line; takes SF2 pathname as input parameter.
• Can select one of multiple instruments.
• Produces a .cpp file with arrays of audio bit data (one each for attack, sustain,
release sections).
• Teensy Wavetable Synthesis library (in C++)
• Load audio data onto Teensy (from .cpp file).
• Create interpolated audio data.
• Functionality for looping, vibrato, and tremolo.
Both of these deliverables will be deployed as open-source code.
PROCESS AND SCHEDULE(Iterative Waterfall)
ITERATION 1
PROCESS AND SCHEDULE(Iterative Waterfall)
ITERATION 2
PROCESS AND SCHEDULE(Iterative Waterfall)
ITERATION 3
ITERATION 4
● Translate prototyped looping to C++
● Implement tremolo and vibrato.
● Overall code optimization
○ Decrease latency so there is no perceivable delay in response to user
input.
TEAM ROLES
Person RoleRyan Mellmer Team LeadNicholas Craig Requirements ManagerAida Keifer Planning/Scheduling ManagerConnor Delaplane Infrastructure ManagerJoshua Bucklin Design/Architecture ManagerYu Tang Developer Documentation ManagerJonathan Jensen Verification and Validation Manager
Note: All team members also acting as developers
PROBLEMS AND CONTINGENCIES
Event Mitigation Likelihood
Teammember unavailable/behind Reassign work leading to project changes in the extreme High
Sponsor unavailable Pull on external resources Med
Subject material too difficult Redefine schedule and seek help from sponsor Low
Backups fail Reassemble from local git repository Low
Design proves unfeasible Revise requirements and design Low
WHAT WE LEARNED
● Wavetable Synthesis
○ Gained familiarity with ideas behind implementation
● Soundfont
○ Bank of audio samples and parameters for manipulation
● Resource Interchange File Format (RIFF)
○ How it applies to Soundfont file structure
● Development on Arduino Platform
● Interpolation
○ Within context of modifying sound bytes
● Iteration scheduling
Questions?