{"items": [{"author": "Jeff&nbsp;Kaufman", "source_link": "https://www.facebook.com/jefftk/posts/10100099840755162?comment_id=10100099852815992", "anchor": "fb-10100099852815992", "service": "fb", "text": "I think the right interface here would be something like the drawbars on a tonewheel (Hammond) organ.", "timestamp": "1561851651"}, {"author": "Jeff&nbsp;Kaufman", "source_link": "https://www.facebook.com/jefftk/posts/10100099840755162?comment_id=10100099852915792", "anchor": "fb-10100099852915792", "service": "fb", "text": "Possibly instead of pitch shifting I should just be using pitch to midi", "timestamp": "1561851687"}, {"author": "Jeff&nbsp;Kaufman", "source_link": "https://www.facebook.com/jefftk/posts/10100099840755162?comment_id=10100099853953712", "anchor": "fb-10100099853953712", "service": "fb", "text": "I wonder whether imitone would do what I want?", "timestamp": "1561852302"}, {"author": "Jeff&nbsp;Kaufman", "source_link": "https://www.facebook.com/jefftk/posts/10100099840755162?comment_id=10100099853953712&reply_comment_id=10100099877047432", "anchor": "fb-10100099853953712_10100099877047432", "service": "fb", "text": "&rarr;&nbsp;I've bought imitone, and it seems like it might be what I want.  Next step is to figure out how I want to integrate this.", "timestamp": "1561862635"}, {"author": "opted out", "source_link": "#", "anchor": "unknown", "service": "unknown", "text": "this user has requested that their comments not be shown here", "timestamp": "1561864107"}, {"author": "Jeff&nbsp;Kaufman", "source_link": "https://www.facebook.com/jefftk/posts/10100099840755162?comment_id=10100100099581472", "anchor": "fb-10100100099581472", "service": "fb", "text": "After playing more with the pitch shifting approach I'm having trouble getting any sort of acceptable latency.  Fundamentally, pitch shifting involves first pitch detection and then modification.  Since all I care about is the frequency and amplitude of the sine wave produced by whistling, the complex process of re-emitting it through pitch shifting doesn't make sense.  Instead I should just, once I know the tones in question, generate low frequency sine waves directly.  Or generate MIDI from them (though I haven't gotten imitone down to low enough latency yet).", "timestamp": "1562011205"}, {"author": "Jeff&nbsp;Kaufman", "source_link": "https://www.facebook.com/jefftk/posts/10100099840755162?comment_id=10100100100165302", "anchor": "fb-10100100100165302", "service": "fb", "text": "It's possible that I don't need fancy pitch detection algorithms and can just count time between zero crossings?  Low frequency information will shift the whole wave up and down, so the time from one crossing to the next isn't reliable, but the time from one crossing to the one after should be pretty good.  At 1000Hz that's only 1ms of latency.", "timestamp": "1562011441"}, {"author": "Jan-Willem", "source_link": "https://www.facebook.com/jefftk/posts/10100099840755162?comment_id=10100100126048432", "anchor": "fb-10100100126048432", "service": "fb", "text": "Given that it's a pretty pure sine that ought to work reasonably.  I was amazed how chip-tunes-y the repitched versions sounded, proof that clean waves don't sound very interesting.", "timestamp": "1562022421"}, {"author": "Jeff&nbsp;Kaufman", "source_link": "https://www.facebook.com/jefftk/posts/10100099840755162?comment_id=10100100126048432&reply_comment_id=10100100136657172", "anchor": "fb-10100100126048432_10100100136657172", "service": "fb", "text": "&rarr;&nbsp;Jan-Willem some of it sounding chippy may just be distortion from asking it to drop the pitch so many octaves", "timestamp": "1562026670"}, {"author": "Jeff&nbsp;Kaufman", "source_link": "https://www.facebook.com/jefftk/posts/10100099840755162?comment_id=10100100197545152", "anchor": "fb-10100100197545152", "service": "fb", "text": "Here's a rough python version of a zero-crossing pitch detector and synthesizer.  Unfortunately it's too slow in python and can't keep up, probably because I have three math.sin calls per sample.<br><br>Next step is to try writing it in C and see if it's fast enough.<br><br>Alternatively, some kind of rough quick sine might be better, since right now I'm going with whatever python does.<br><br>https://github.com/jeff.../pitch-detect/blob/master/zeros.py", "timestamp": "1562072215"}, {"author": "Jeff&nbsp;Kaufman", "source_link": "https://www.facebook.com/jefftk/posts/10100099840755162?comment_id=10100100377988542", "anchor": "fb-10100100377988542", "service": "fb", "text": "got it working: https://www.jefftk.com/bass-whistle-2019-07-03.mp3", "timestamp": "1562179978"}, {"author": "Jeff&nbsp;Kaufman", "source_link": "https://www.facebook.com/jefftk/posts/10100099840755162?comment_id=10100100377988542&reply_comment_id=10100100377998522", "anchor": "fb-10100100377988542_10100100377998522", "service": "fb", "text": "&rarr;&nbsp;post: https://www.jefftk.com/p/real-time-bass-whistling", "timestamp": "1562179987"}]}