TubeTalker and Pink Trombone

I haven’t been having a lot of luck with the direct synthesis experiments, and for some reason the idea of playing with articulatory synthesis again seemed like a good idea.

This is a familiar delusion. After hitting a brick wall with something, I’ll reluctantly let it go. After enough time has passed, I’ll decide that I’ve magically acquired enough knowledge and skill to successfully solve the problem, and have another go at it.

Pink Trombone is an interactive physical model of the vocal tract written in JavaScript by Neil Thapen. It runs in a browser window in real time, and it very cool. I’d played around with it before, and been fairly impressed by how it sounded. I’m not sure that it sounds better that formant synthesis, but I decided to have a go at writing a toy version in Lua and see how it sounded.

I ran across the paper by Brad Story titled Vocal tract area functions from magnetic resonance imaging, which included a table of vocal tract measurements for various phonemes. It seemed like a good place to start, so I grabbed cobbled together a vocal tract simulation.

I eventually got something that resembled different vowel sounds. It didn’t sound particularly good, but it was a reasonable start.

I started digging through the Pink Trombone code. There’s a lot of code in there, and some parts are a bit puzzling.

One thing that makes Pink Trombone different from the Tube Resonance Model is that it doesn’t explicitly use waveguides. The “classic” tube model is a series of digital delays connected together with simulated scattering junctions. Pink Trombone only uses the scattering junctions portion of the model. I believe that since the junctions are placed at 5 cm intervals, the junctions also act as (very short) waveguides.

Fortunately, there are at least two C rewrites of Pink Trombone, both coincidentally named Voc. The version of Voc by Paul Batchelor is documented using Literate Programming, which is helpful in working out Pink Trombone works its magic.

Paul includes a quite nice explanation of the implementation of the LF model of glottal flow. While my current glottal model is probably good enough, it’s about time synSinger had an implementation of the LF model as well.

EDIT: I’ve implemented the LF glottal flow model, but the code in Pink Trombone is simplified to be driven off the single tenseness parameter. At some point, I’ll get around to implementing a fuller version.

 

About synsinger

Developer and Musician
This entry was posted in Development and tagged , , , , . Bookmark the permalink.

Leave a comment