
Python As in Monty Python What is Python? • Prototyping language • Structured as pseudocode • Easy to write • Garbage collection • Dynamic typing • Fast and flexible development time Why it's perfect for sound design Or, our Agenda for today • Less DAW overhead • Numpy, Scipy, Numba • More accessible math • Fast, iterative development • Jupyter • Live compiling • Machine learning, simulation, etc Details of Python • Interpreted Language • Dictionary / BST backend • Add / remove variables • Built-in data structures • Dynamically typed Numpy • Corollary to python • Math / Array handling library • Vectorized • C++ backend • Basis for machine learning Python Advantages • Development time • Access to Scientific Libraries • Overlap with Machine Learning and research fields • Magenta: Google's Sound Design Library Disadvantages • Slower runtime • No access to DAW • Will not port into VST format • No access to existing libraries like JUCE Flying Without the DAW • Longer computations • Iterative design process • Play it fast and loose Avoid Real-time • Envelopes based on length • Note lead time • Guitars, theremins Numpy Math Library Numpy • Python math library • Array manipulation • Vectorized - Array operations • C++ backend Numpy 10 Lines of C++ = 1 Line of Numpy C++ Numpy Some Oneliners in Numpy Sine Wave: np.sin(x) Saw Wave: -((x/np.pi) % 2) + 1 Square Wave: np.where(x/np.pi % 2 > 1,-1,1) Triangle Wave: np.abs((x/np.pi-.5)% 2 -1) *2 - 1 Compressor: np.where(sound > thresh, (sound - thresh) * ratio + thresh, np.where(sound < -thresh, (sound + thresh) * ratio - thresh, sound)) Distortion: np.arcsin(np.clip(sound, -1, 1)) Numpy Extensions SciPy • Filter design, analysis • Chebyshev, elliptical, butterworth • Filter response, poles & zeros analysis, processing • Convolutions for Reverb • Interpolation • Envelope creation • Pooling • Envelope Detection Numba • Just-in-time Compiling • Decorator • Speed up non-vectorized code Slow Python Code With Numba Numba • Repeated function calls • Any place with a for loop • Non-object oriented - move to static function • Not compatible with everything Jupyter Programming in Jupyter Long function Listen to output • Run cells individually • Variables are stored betweenTry lowpassing it runs • Iterate on code, iterate on Graph it process • Graphs, audio output, print statements What is Jupyter? • Interface to the Python terminal • HTML Frontend - Hosted in browser • Runs over localhost Using Jupyter for Sound Design • ipywebrtc AudioRecorder for input • IPython.display.Audio(audio, rate=sr) for output • autoplay=True • Store parameters in dictionary • Write utility file and include it in every notebook • Typesafe array functions • Envelopes & Oscillators • Midi lookup Math Frequency over Time Summation • Changing frequency • Array of frequencies • Cumulative sum • Exponential Decay Percussive Sounds • Function that loses percentage of its energy each step • Good for percussive envelopes Logistic Curve Transition • Carrying capacity • In sound, good for smooth transitions • Affects only critical section • Pitch bend, volume change, etc More math • sin(tan(x)) - Alien sfx • Random numbers - white noise • Saturation - stacking powers of waves • Intervals: f + 2f + 3f ... • Note intervals: 5th, 7th Bugs Bugs can be good • Bugs can be good in sound design • Interesting, unique • Work for one-off sounds • Moug's overdriven filter • (always test production!) • My reverb glitch Python Real-Time Applications Python Applications • Real-time guarantee • Block safety checks • Less multithreading because of garbage collection • Try block to catch exceptions Libraries for Python Applications • PyQT • PyAudio on PortAudio • RTMidi • Soundfile • Importlib for Live Compiling Live Compiling "Syntax Error on line 1" Live Compiling Demo Live Compiling • Write code - reload code • A/B Testing • Flow • Iterative process Live Compiling Basic Steps • Step 1: • Wrap instruments with decorator • Decorator - a function that accepts a class as an argument and returns another class • Step 2: • Reload function in decorator Live Compiling Things to Remember • Python uses a dictionary backend • Decorators are zealous • Python uses __getattr__ to handle variable access and function calls Decorator Code @decorator • instrument_decorator function • Create new object • Forward calls with getattr • Create metatype • Store classtype • Forward static calls Reload Step def reload: • Get module • Try/Catch compilation errors • Re-compile module • Get new class • Reinstantiate class with original arguments • Transfer object data • Replace stored object Usage instr.play_regular() • @instrument_decorator on every parent and child object • Dereference inheritance with .O • Use object normally • Reload as a function call • Isinstance no longer works • use type(i).__name__ Advanced Topics Future Development Rendering • More unisons, more intervals • More reverb • Advanced note controls • Finer control over song • Lead-time Simulation • Air fluid flow simulations • Instrument body simulations • Create realistic yet impossible instruments Machine Learning It's all if statements • Python is the ML standard • Frequency domain • Advanced forms Auto-Encoders Latent Space Compression • Compresses data along patterns • Results unpredictable while following standard patterns • Can be used to save disk space on massive multisamplers • Most likely to create something cool Style Transfer Layer mixing • Mixes and matches detail levels • Can be used on several levels, each from different inputs • Fuse sounds • Style transfer FX • Most likely to work GANs Generative Adversarial Networks • Imposter / Art Critic Paradigm • Best for machine creativity • Most likely to create realistic sounds That's it! Algorithmic Design AlgorithmicSounds.com IsaacRoberts.tech Thank you for coming! I will now be taking questions!.
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages53 Page
-
File Size-