Реализация простого синтезатора частот с использованием алгоритма Карплуса-Стронга Входом является набор частот в звуковом диапазоне, частота дискретизации, длительность в секундах. Выходом является сигнал, который допустимо записать в файл либо вывести на звуковую карту. При записи в файл привести отсчеты к формату int16 с использованием python-скрипта. Использовался метод перезаписи через txt файл для удобства.
Решение:
Hardware: i5-10300H
OS: Ubuntu 18.04
Compiler: CMake 3.8, Python 3.10.8 (Графики для удобства строил в Python)
Файлы: "StringSynthesis.cpp", "StringSynthesisFun.h", "main.py" Для создания файла в формате .wav используется python-скрипт
Pick-Direction Lowpass Filter
Pick-Position Comb Filter
One-Zero String Damping Filter
Allpass filter used for tuning
Allpass filter used to simulate string stiffness
Для упрощения использовалось свойтсво последовательных фильтров:
Тем самым была создана функция MergedFilter:
После MergedFilter применялся стандартный фильтр Allpass, вместо string stiffness.
Литература:
- https://ccrma.stanford.edu/realsimple/faust_strings/faust_strings.pdf
- http://musicweb.ucsd.edu/~trsmyth/papers/KSExtensions.pdf
- https://www.dsprelated.com/freebooks/filters/Allpass_Filters.html
- https://lms.kgeu.ru/pluginfile.php?file=%2F157450%2Fmod_resource%2Fcontent%2F2%2F%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F-9%20%D0%A1%D0%90%D0%A0%D0%A3.pdf