Skip to content

An asynchronous, time-variant feedback delay networks for reverberation.

Notifications You must be signed in to change notification settings

kweiwen/puannhi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

91 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Puannhi - An asynchronous, time-variant feedback delay networks for reverberation

Shoutout to Professor Sebastian J. Schlecht!

Whenever my colleagues or music-friends ask how I created such a cool effect, I tell them that I met the "Gulu of Reverb" and drew the most of my inspiration from this paper:

Schlecht, Sebastian J and Habets, Emanuël A P, Time-varying feedback matrices in feedback delay networks and their application in artificial reverberation, Journal of the Acoustical Society of America, 2015.

$\mathbf{A}(n)$: The feedback matrix itself. It changes over time, whic is denoted by the index $n$.

$\mathbf{A}(0)$: This is the initial feedback matrix. Serving as the starting point for the time-variant modulation process. Chosen to be a unitary matrix

$\mathbf{U}$: Unitary matrix.

$\Uplambda^{\Phi(n)}$: A diagonal matrix of modulation functions.

$\mathbf{U}^H$: Unitary matrix with conjugate transpose.

If we assume there are 4 delay lines in the implementation, $\mathbf{U}$ is a Hadamard matrix, $\mathbf{U}^H$ is the conjugate transpose of a Hadamard matrix, $\phi_1(n)$, $\phi_2(n)$, $\phi_3(n)$, and $\phi_4(n)$ are triangle modulation function. It will look like the following equation.

$$ \begin{align} \mathbf{A}(n) &= \mathbf{A}(0) \mathbf{U} \Uplambda^{\Phi(n)} \mathbf{U}^H \\ &= \mathbf{A}(0) \left( \frac{1}{2} \begin{bmatrix} 1 & 1 & 1 & 1 \\ 1 & -1 & 1 & -1 \\ 1 & 1 & -1 & -1 \\ 1 & -1 & -1 & 1 \end{bmatrix} \right) \begin{bmatrix} \phi_1(n) & 0 & 0 & 0 \\ 0 & \phi_2(n) & 0 & 0 \\ 0 & 0 & \phi_3(n) & 0 \\ 0 & 0 & 0 & \phi_4(n) \end{bmatrix} \left( \frac{1}{2} \begin{bmatrix} 1 & 1 & 1 & 1 \\ 1 & -1 & 1 & -1 \\ 1 & 1 & -1 & -1 \\ 1 & -1 & -1 & 1 \end{bmatrix} \right) \end{align} $$

When it comes to implementation, it would be much easier to implement this Time-Variant FDN in ProcessBySample() compared to ProcessByBlock(); however, I have discovered another approach to modulate the FDN, inspired by matrix modulation, which modulates the delay time of the delay lines itself. The modulation function of $f_1(n)$, $f_2(n)$, $f_3(n)$, and $f_4(n)$ are sine waves in the current implementation, and they can be substituted for any shapes of the waveform.

287506598-784f91fc-1f11-4963-afcd-6a64766bb22d

About

An asynchronous, time-variant feedback delay networks for reverberation.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published