Nformant is a program that takes in peak values from a vocal input and uses these values to determine the first and second formants of the incoming signal. The formants are mapped to a two-dimensional X-Y plane. Additionally, the fundamental frequency is mapped to a third seperate Z-axis.
Based on Miller Puckette's fiddle~, Nformant takes the first 20 peaks from a vocal signal, selects the most likely candidates to be the first and second formant peaks and ultimately uses relevant neighbouring peaks to determine the center formant frequencies. These formants (f1 and f2) are mapped to X and Y axes to allow for control within a two-dimensionaal plane. A third variable, the fundamental frequency, is mapped to a seperate Z-axis. The script is dependent on a clear signal from a quality microphone with a good frequency response. If the program receives the necessay data from the fiddle~ object, the script works quite well. However, the output can be sketchy if fiddle~ fails to detect any peaks within one of the formant groups.
How is the program useful?
This is very much a work in progress and should not be seen as a fully developed program. The idea behind Nformant is to develop a powerful tool for controlling musical instruments and effects in a performance setting. When fully operational it will allow for minute hands-free control of parameters in three dimensions without the need to stray from a perceptual level of brain processing. Controlling effects can often take the focus away from the performance itself, but with a system such as Nformant, the controlling of effects and the performance could ultimately become fused into one action, although it may take some rehearsing.
There are still some challenges to be overcome. Any background noise coming from the stage or from the environment would need to be filtered out, perhaps by using signal cancellation techniques developed by the telecommunications industry. Another more immediate enhancemant would be to make full use of the X-Y plane by "streching" the output values, especially in the lower left hand side of the X-Y plane. As visualized in the below illustration, vowels can categorized as "front to back" and "high to low", and this is also the way they are mapped to the X-Y plane. The high to low axis is determined by the first formant, while the second formant determines the front to back values. However, the second formant frequency for high vowels such as the "æ" in "cat" are considerably lower than the second formant frequencies for higher vowels. Therefore, the next step in further developing Nformant would be to give low-front vowels more "front weight". There are other areas that need similar treatment.
||Back / High
During the development of Nformant I have also come to realize that fiddle~ is not an optimal source of data. It would be better if all peaks, no matter how insignificant, were outputted, because this would avoid the problem I have been experiencing so far, where sometimes no peaks in the second formant frequency range are represented, thereby causing a glitch in the calculation of the second formant. The Nformant script tries to compensate for fiddle~'s shortcomings, but there are many already-made tools out there that would be of much greater use. The reason I stuck with fiddle~ is because I am new to programming. There are several fine formant tracking programs written in Matlab code, for example, but in the time scope of this project, it turned out to be more realistic to stick to Max externals, where the choice was between Tristan Jehan's analyzer~ and Miller Puckette's fiddle~, upon which a part of analyzer~ is based. I eventually opted for fiddle~ because it outputs index numbers as well as frequencies and amplitudes, which made it easier to keep track of the data outputted.
Nformant is designed and programmed by Notto Thelle.
Special thanks to Miller Puckette's Max external fiddle~ object.
Also thanks to the Vocal Joystick project at the Univeristy of Washington for inspiration and ideas.