C++ и JUCE
Статьи с примерами кода на C++ и фреймворке JUCE. 25 статей.
- Алиасинг в нелинейной обработке: интермодуляция и передискретизацияПочему цифровой сатуратор добавляет призвуки, которых нет у аналогового прибора, и как их убирает передискретизация?
- Дисторшн и сатурация: передаточная кривая и гармоникиКак функция «вход → выход» добавляет гармоники и чем мягкое ограничение отличается от жёсткого?
- Математика для аудиоКак читать формулы с синусами, логарифмами и суммами в статьях о звуке?
- Паттерны проектирования в JUCEЧто такое паттерн проектирования и как по паттерну «посетитель» JUCE сохраняет параметры плагина в JSON и читает их обратно?
- Цифровые фильтры: импульсная характеристика, КИХ и БИХКак описать любой линейный фильтр и предсказать, какие частоты он ослабит и насколько задержит?
- C++ в плагине: шаблоны и сериализация параметровКак устроены шаблоны C++ в коде плагина на JUCE и как на них построено сохранение параметров в JSON?
- Стандартная библиотека C++ в плагине: optional, контейнеры, лямбды и std::functionКакие типы стандартной библиотеки C++ использует плагин на JUCE, и где они проверяют ошибки, а где нет?
- Основы C++ для JUCE: сборка, типы, функции и указателиЧто нужно знать о синтаксисе C++, чтобы читать код плагина на JUCE?
- C++ в плагине: классы, конструкторы и время жизниКак в C++ устроены классы, конструкторы, наследование и время жизни объектов, которые встречаются в коде плагина на JUCE?
- Спектр сигнала: ДПФ и БПФКак по отсчётам узнать, из каких частот состоит сигнал?
- Голос синтезатора: сборка и рендер ноты в WAVКак соединить источники, фильтр и огибающую в программу, которая записывает ноту в файл?
- Линия задержки: кольцевой буфер, эхо и обратная связьКак хранить прошлые отсчёты, чтобы через заданное время вернуть их на выход?
- Однополюсный фильтр нижних частотКак ослабить высокие частоты, помня только один предыдущий отсчёт?
- Микширование сигналов: усиление, фаза и запас уровняКак складывать несколько источников, управлять их уровнями и избегать перегрузки?
- Огибающая ADSR и VCA: как нота начинается и затихаетЧто происходит с громкостью ноты от нажатия до отпускания и почему резкий скачок усиления щёлкает?
- LFO: низкочастотный генератор и модуляцияКак медленное колебание управляет звуком и как получить его на C++ и JUCE?
- Кто владеет объектом: std::make_unique и время жизни в плагине JUCEЗачем создавать объект через std::make_unique, если тут же отдаёшь его процессору, и кто потом его удаляет?
- C++ в аудиопотоке: выделение памяти, общие объекты и инструменты JUCEПочему в processBlock не создают и не удаляют объекты и чем заменить std::shared_ptr при обмене данными с интерфейсом?
- Dry/wet и bypass: исходный и обработанный сигнал в плагинеЧто означают dry, wet и bypass и как выключить эффект без сдвига во времени и щелчка?
- Белый и розовый шум: спектр и генерацияЧем отличаются белый и розовый шум и как сделать воспроизводимый шумовой источник на C++/JUCE?
- Осцилляторы синтезатора: формы, расстройка и саб-осцилляторКак из нескольких генераторов собрать источник одного голоса и не перегрузить сумму?
- Тремоло: глубина модуляции и усилениеКак LFO меняет амплитуду звука и почему одинаковая глубина может давать разный результат?
- Устройство WAV-файла: RIFF, чанки, fmt и dataКак найти в WAV-файле параметры звука и сами отсчёты?
- Целочисленный PCM: байты, знак и перевод во floatКак прочитать отсчёт из байтов и записать его обратно без ошибки знака, масштаба и округления?
- Аудиоданные в программах: представление отсчётов, каналы, кадры и буферыЧто означает «буфер на 512 сэмплов» и сколько чисел в нём хранится?