Formant synthesizer possible in Max?

Andre Oppenheimer's icon

Hello to who might ever read this post!

We are a group of linguistics students with no prior knowledge in Max.

Our goal for the project is to achieve a sort of game that the participants can try out: They listen to a prerecorded audio sample of a vowel (from any language, doesn´t have to be English or German), and their job is to match what they are hearing on the synthesizer. Ideally, they get some sort of visual interface where they can manipulate three parameters, which correspond to F1, F2 and F3 respectively (basically a simulation of the vowel map). As part of the game they get a set number of tries to "find" a spot on the simulated vowel map that matches what they heard from the recording. After their tries are up we can compare their result to what the ideal result would have been, possibly showing spectrograms and explaining the parameters / formants. So our idea is a game for the participants which results in a small educational part on our topic.

Has anyone ever done this or something similar in Max? Is what we are planning to do even possible?

Roman Thilenius's icon

given that the vowel formant (of most "vowel synths") itself is nothing but a set of parallel, regular bandpassfilters with (up to) 3 parameters, yes of course it is possible also to control these parameters from GUI controls or match them against presets for these values.

if you rely on biquad~ as your filter, max has a premade object called filtergraph~, which can be put into "display" mode where it only shows the frequency response of the coefficients (or parameters) you input.

at the same time filtergraph~ is also the most basic (and i think the only vanilla-) source for calculating such filter coefficients, so you can use 2 copies if it, one to convert
F1 bw1 amp1 F2 bw2 amp2 F3 bw3 amp3
into
0 A1 A2 B1 B2 0 A1 A2 B1 B2 0 A1 A2 B1 B2

and the second one to display the sum of the curves.

it is more or less shown in the filtergraph~ helpfile of max v.8 under the "cascade~" tab (the tilde is a typo, though)