fixed it, should be working now.
I translated your program into C, ran it, and get
a nice constant vibrato.
If you want to have a look (if you read C):
http://pastebin.com/pJKA10Ub
It spits floats, the 2s of vibrato followed by the 2s with no vibrato.
You can compile: gcc ex.c -lm then run ./a.out | aplay -r 44100 -f FLOAT_LE
(it works on my x86_64 computer, it should work on
any little endian thing, I guess)
I tried your python version and get weird results.
I don't know what's wrong. Translating line by line
into C gives a nice vibrato...
weird...
Sorry, I can't help more.