Fabrizio Cheloni

Audio Programmer

Wiki

A curated collection of articles covering C++, audio programming, software engineering practices, development tools, and programming philosophy.

No articles found matching your search.

C++ Programming

Initializer List Basics
Explores std::initializer_list in C++, explaining its internal mechanics and demonstrating use cases such as container initialization, creating custom container-like objects, and flexible function parameter handling.
Six Handy Operations for String Processing
Covers useful string processing operations in C++, providing practical examples for common text manipulation tasks and demonstrating efficient approaches to string handling.
From Chars - Fast String to Number Conversion
Discusses the from_chars function in C++17 for efficient string-to-number conversion, comparing performance with traditional parsing methods and showing practical usage examples.
Constexpr Number Parsing in C++23
Explores compile-time number parsing capabilities in C++23, demonstrating how constexpr functions can be used for parsing numbers at compile time for improved performance.
Expected in C++23
Introduces std::expected in C++23, a type that represents either a value or an error, providing a safer alternative to exceptions for error handling in C++.
Monadic Optional Operations in C++23
Covers the new monadic operations for std::optional in C++23, including and_then, or_else, and transform, enabling more functional programming patterns in C++.
The Pipe Operator in C++
Explores the proposed pipe operator for C++, demonstrating how it can improve code readability and enable more functional programming patterns in C++.
2 Lines, 3 Features: Function Overloading
Demonstrates how to leverage multiple C++ features in just a few lines of code, focusing on function overloading and template techniques for clean, efficient code.
Enum Improvements in Modern C++
Covers the evolution of enums in modern C++, including scoped enums, underlying types, and best practices for type-safe enumeration usage.
Enum Class Bitmasks
Shows how to create type-safe bitmasks using enum classes in C++, providing a modern approach to flag handling with enhanced type safety and readability.
Arithmetic Types in C++
Deep dive into C++ arithmetic types, covering integer and floating-point types, their sizes, precision, and best practices for numeric computations.

Memory & Performance

std::move is Not Free
Explains that std::move() is not inherently free, as its efficiency depends on the object type. Shows how moves can be efficient for dynamic resources but equivalent to copies for simple types.
Struct Packing and Memory Optimization
Explains struct packing in C/C++, demonstrating how to optimize memory usage by ordering struct members strategically and understanding compiler padding behavior.
Daily Bite of C++: Optimizing Code
Practical tips for optimizing C++ code, covering compiler optimizations, algorithmic improvements, and performance measurement techniques for better program efficiency.
Software Performance and Class Layout
Analyzes how class and struct layout affects software performance in C++, discussing memory alignment, cache efficiency, and data structure design for optimal performance.
shared_ptr is Evil
Critical analysis of std::shared_ptr usage in C++, discussing performance implications, ownership semantics, and when to avoid shared ownership patterns.
Efficiently Allocating shared_ptr
Explores efficient allocation strategies for std::shared_ptr in C++, including make_shared usage, memory layout considerations, and performance optimization techniques.
Most Important Complexities
Covers the most important time and space complexities in algorithm analysis, providing practical examples and guidance for performance-conscious programming.
RAII All The Things
Comprehensive guide to Resource Acquisition Is Initialization (RAII) in C++, demonstrating how to use RAII for automatic resource management and memory safety.

Build Systems & Compilation

Library Dynamic Loading on Mac
Explains how to dynamically load libraries at runtime on macOS, covering dlopen, dlsym, and the intricacies of shared library loading in C++ applications.
C Program Compilation Process
Detailed walkthrough of the C compilation process, from preprocessing to linking, explaining each stage and how source code transforms into executable programs.
Header Include Directories in CMake
Guide to managing header include directories in CMake, covering target_include_directories, PUBLIC/PRIVATE/INTERFACE keywords, and best practices for C++ projects.
Zero to CMake
Comprehensive tutorial for beginners to learn CMake from scratch, covering project setup, dependencies, and modern CMake best practices for C++ development.

Advanced C++ Concepts

if constexpr requires requires requires
Deep dive into advanced C++ template metaprogramming, exploring the intricate relationships between if constexpr, requires clauses, and concept definitions.
Template Best Practices
Comprehensive guide to C++ template best practices, covering design patterns, error handling, and techniques for writing maintainable template code.
Concepts vs Type Traits
Comparison between C++20 concepts and traditional type traits, discussing when to use each approach and their respective advantages in template programming.
C++ Opaque Pointer Pattern
Explains the opaque pointer (PIMPL) pattern in C++, demonstrating how to achieve better encapsulation and reduce compilation dependencies in large codebases.
Observable Property Pattern
Implementation of the observable property pattern in C++, enabling reactive programming paradigms with automatic notification of property changes.
Efficient Programming with Components
Explores component-based programming in C++, discussing how to design efficient, modular systems using component architecture patterns for better performance and maintainability.
Tetrads in C++
Introduction to tetrads as a data structure concept in C++, exploring their applications in efficient algorithm design and memory-conscious programming.
C++26 Reflections: Adventures in Compile-time UML
Explores the upcoming reflection features in C++26, demonstrating how compile-time introspection can be used to generate UML diagrams and enhance metaprogramming capabilities.

Concurrency & Threading

How I Learned to Stop Worrying and Love Juggling C++ Atomics
Personal journey into understanding C++ atomic operations, covering memory ordering, synchronization primitives, and practical approaches to concurrent programming.
Atomics and Concurrency
Deep dive into atomic operations and concurrency in systems programming, explaining memory models, race conditions, and synchronization techniques for parallel programming.
Windows Threading and Synchronization
Microsoft's insights into Windows threading and synchronization primitives, covering mutexes, critical sections, and platform-specific concurrency considerations.

Security & Safety

Safety and Security in Programming Languages
Comprehensive analysis of safety and security concepts in programming languages, covering memory safety, type safety, thread safety, and their impact on software security.
The Error Model
Comprehensive exploration of error handling strategies in programming languages, comparing exceptions, return codes, and other approaches for building resilient software systems.
Why we need C++ Exceptions
The author argues that C++ exceptions were crucial in developing a complex UML Editor, enabling sophisticated error handling and transaction management. Exceptions allowed the team to manage intricate scenarios like nested object interactions and XML parsing, providing a more elegant solution than traditional error return values.

Testing & Quality Assurance

Data Flow Testing: A Comprehensive Guide
Complete guide to data flow testing methodology, covering test case design, data dependency analysis, and systematic approaches to testing data transformations in software.
Metamorphic Testing
Innovative software testing approach that evaluates systems by applying transformations to inputs and checking for consistent outputs, particularly useful for complex systems like ML models.
Metamorphic Testing Methodology
Detailed methodology for implementing metamorphic testing in software projects, with practical examples and guidelines for creating effective metamorphic test cases.
Uplifting QA Teams Through Metrics
Guide to using metrics effectively in QA teams, covering key performance indicators, measurement strategies, and how to drive quality improvements through data-driven approaches.
No Final Mock
Discusses challenges with mocking final classes in C++ unit testing, exploring alternative testing strategies and design patterns for testable code architecture.
Testing Microservices
Comprehensive guide to testing microservices architectures, covering unit testing, integration testing, contract testing, and end-to-end testing strategies for distributed systems.

Audio Programming & DSP

Getting Started Quickly with Undertone 2 – Dialogue Ambience Replacement
Quick tutorial on using Undertone 2 audio plugin for dialogue ambience replacement in post-production. Shows how to isolate background noise from recordings and create consistent sound beds for dialogue editing workflows.
How to Replace Footstep Sounds in Pro Tools
Step-by-step tutorial for manually replacing footstep sounds in Pro Tools using clip replacement techniques. Covers chopping audio tracks, using "tab to transient" for precise cuts, and replacing clips while maintaining original timing for professional sound design workflows.
Bouncing Surround Audio in Pro Tools – Are You Doing it Wrong?
Comprehensive guide to exporting surround sound audio from Pro Tools, covering Dolby Atmos bouncing, stem workflows, and the Dragout 2 plugin for multiple output formats. Explains the difference between mono summed and interleaved export methods and Pro Tools' traditional studio routing approach.
WaveGAN: Audio Synthesis with GANs
Machine learning algorithm that synthesizes raw audio waveforms using generative adversarial networks, capable of generating up to 4-second audio clips across multiple domains including speech, music, and sound effects. Based on DCGAN architecture adapted for audio generation with novel phase shuffling techniques.
JUCE Component Mouse and Keyboard Handling
Comprehensive guide to handling mouse and keyboard events in JUCE Components, covering event propagation, focus management, and creating responsive audio software interfaces.
How JUCE Components Work
Deep dive into the JUCE component system architecture, explaining the rendering pipeline, component hierarchy, and best practices for building efficient audio applications.
Mental Reverb Blog
Technical blog covering reverb algorithms, DSP techniques, and audio effect implementation, with practical insights for audio software developers.
Music DSP Collection
Comprehensive collection of DSP algorithms, filters, and audio processing techniques with source code examples for music and audio applications.
DAVE - Digital Audio Visual Environment
Open-source framework for developing audio plugins and digital audio workstation software, providing tools and abstractions for professional audio development.
Uttori Audio Wave Processing
JavaScript library for audio wave processing and manipulation, providing tools for web-based audio applications and sound analysis.
Whisper.cpp Implementation Discussion
Technical discussion about implementing OpenAI's Whisper speech recognition model in C++, covering performance optimizations and practical deployment considerations.
EBU ADM Guidelines
Comprehensive guide to Audio Definition Model (ADM), a standardized metadata model for describing technical properties of audio content, covering rendering processes, structural components, and practical use cases.

Development Tools & Practices

Debugging C++ is a UI Nightmare
Critique of current C++ debugging tools and their user interfaces, discussing the challenges developers face and proposing improvements for debugging experiences.
Google Benchmark for C++
Guide to using Google Benchmark library for C++ performance measurement, covering microbenchmarking techniques, statistical analysis, and performance optimization workflows.
Understanding Code Duplication
Analysis of code duplication in software projects, discussing when duplication is acceptable, refactoring strategies, and maintaining clean, maintainable codebases.
Programming Principles and Philosophy
Insights from Salvatore Sanfilippo (antirez) on programming philosophy, software design principles, and approaches to building reliable, maintainable systems.
12 Logging Best Practices: Dos and Don'ts
Comprehensive guide to logging best practices in software development, covering log levels, structured logging, performance considerations, and debugging strategies.
Log Management for Modern Applications
Guide to implementing effective log management systems, covering log aggregation, analysis, retention policies, and monitoring strategies for production applications.
Sorry Rick Rubin, Vibe Coding Isn't Punk Rock
Critiques the "vibe coding" approach that relies heavily on AI tools, arguing that traditional programming is a creative, meditative process that involves deep problem-solving and modeling the world. Explores the philosophical differences between AI-generated code and genuine programming craftsmanship.

Machine Learning & AI

TensorFlow Model Encryption in Mobile Apps
Guide to encrypting and decrypting TensorFlow pretrained models in mobile applications, covering security considerations and implementation strategies for protected AI deployment.
PyTorch Model Loading with istream
Discussion on loading PyTorch models using C++ istream, addressing integration challenges between PyTorch and C++ applications for model deployment.
DVC Model Registry
Guide to using Data Version Control (DVC) for model registry and versioning, covering MLOps workflows, model management, and deployment strategies for machine learning projects.

UI/UX & Design

Nielsen Norman Group Articles
Collection of user experience research articles from industry leaders, covering usability principles, design patterns, and evidence-based UX practices for software interfaces.
Ten Usability Heuristics
Jakob Nielsen's famous ten usability heuristics for user interface design, providing fundamental principles for creating intuitive and user-friendly software interfaces.

Education & Technology

Phone Bans in Schools: The Kids Debate
Opinion piece examining the implementation of smartphone bans in schools and their impact on students. Explores the debate around distraction-free learning environments, emergency communication concerns, and the balance between educational focus and modern technology integration.

Learning Resources & References

Comprehensive Learning Resources
Curated collection of programming and computer science learning resources, including books, courses, tutorials, and practice materials for software developers.
C++ Algorithms Book
Open-source book covering algorithms and data structures in C++, providing practical examples and explanations for computer science fundamentals in modern C++.
Programming Fundamentals Video Tutorial
Comprehensive video tutorial covering programming fundamentals and software development concepts, suitable for developers looking to strengthen their foundation skills.