Feature #822

Feature #821: continuous frequency sonification

pitch track sonification

Added by Matthias Mauch over 6 years ago. Updated 7 months ago.

Status:ClosedStart date:2013-12-05
Priority:HighDue date:
Assignee:-% Done:


Target version:-


make a continuous re-synthesis of the pitch from the pitch track and rms information


#1 Updated by Chris Cannam over 6 years ago

  • Assignee set to Chris Cannam

#2 Updated by Chris Cannam over 6 years ago

  • Priority changed from Normal to High
  • % Done changed from 0 to 20

This is now wired through, with only a very simplistic sinusoidal synth so far (no harmonics or anything).

#3 Updated by Chris Cannam over 6 years ago

  • Assignee deleted (Chris Cannam)

We now have a nasty-sounding square wave, to encourage others to do something nicer with it.

The synthesis code is in svapp/audioio/ContinuousSynth.{cpp,h}. The output is currently panned hard to one side: search for setPlayPan in src/Analyser.cpp to see the pan settings.

If you'd like to have a crack at improving this output, please assign this issue to yourself and go ahead.

#4 Updated by Chris Cannam over 6 years ago

Note also that it would be no problem to have more than one possible synthesis method -- we could have a user switch for the sound or whatever. But those methods will still need implementations and we need to decide on a default one.

#5 Updated by Rachel Bittner over 6 years ago

  • % Done changed from 20 to 30

I added a couple more synthesis methods - sawtooth, a single sine, and sum of 3 sines. I set the default to be a sum of 3 sines, though that decision was fairly arbitrary. Didn't make any improvements on the CPU usage side yet. More to come...

#6 Updated by Chris Cannam over 6 years ago

Sounds good, thanks. Can you commit and push this?

The file in question is in the svapp/ sub-repository, so (without knowing how familiar you are with Mercurial) you will need to either

  • commit in svapp/ first, then commit the updated sub-repo state in the top-level Tony directory, then push from the Tony directory (which will push the sub-repositories as well), or
  • hg commit -S in the top-level directory (which recurses to sub-repositories) then push

Either way, check the diffs first (hg diff -S from the top-level directory to diff sub-repos as well) to make sure you aren't committing any other random changes. You may need to pull and merge before pushing, if anyone else has changed the remote repository in the mean time, though I think in this case probably nobody has yet.

You should have permission to push to both the Tony repo and the svapp sub-repo, let me know if it doesn't work.

#7 Updated by Chris Cannam over 6 years ago

btw I think Matthias has some (MATLAB) code that employs a method we could consider which synthesises a variable pitch track to something that sounds a bit like a sung vowel sound.

I've seen but haven't actually tested this and don't have a spare moment to do so just now, so perhaps he could chime in. As I understand it, it works by synthesising a bandlimited impulse train and filtering it according to the formant shape for the desired vowel.

Presumably one could do this very efficiently in real-time in the time domain:

  • Precalculate a single bandlimited impulse as a windowed sinc grain (depending on the current sample rate)
  • In MATLAB or wherever, design a short IIR filter approximating the desired formant shape
  • Overlap-add a series of the pre-calculated impulses spaced according to the varying f0 estimate
  • Filter with the pre-calculated filter coefficients

But I think the code worked by stacking sinusoidal harmonics -- perhaps I'm misunderstanding what it does or perhaps this is another way of doing the same thing.

#8 Updated by Chris Cannam 7 months ago

  • Status changed from New to Closed

Also available in: Atom PDF