Skip to content

(Whistled) melody detection workshop. First presented at LauzHack Days (Nov 13, 2018).


Notifications You must be signed in to change notification settings


Repository files navigation

Fun Fourier Transform Workshop: Whistle Detector

Check out this Colaboratory notebook for the exercises!

  • Press "Open in Playground" under the toolbar in order to make edits.
  • You will have to be signed into your Google Account to run the notebook.

If you are having technical difficulties or prefer running locally, no problem! Go to "File > Download .ipynb". Locally, you don't need to run the cells with following lines of code:

from google.colab import files

Just make sure that the WAV files are in the same directory as the notebook.

Accompanying slides can be found here!

You can request for the solutions here or by emailing me: ebezzam[at]gmail[dot]com

Requirements if running locally

Make sure you have the packages specified in requirements.txt: matplotlib and pyserial are only needed for the NeoPixels demo.

Live testing of the whistle detector

Once you have completed the following functions from the notebook:


Copy them to the file.

You can then run to test the Whistle Detector! A command line prompt will appear; you can press "r+Enter" to record yourself and see if you can match the "passphrase". You should hear a bell if you whistled the correct tune and a buzzer if not.

If you have an Arduino and a NeoPixels 60 LED Ring, you can run for a whistle detector that provides visual feedback (green for correct, red for incorrect). You will first have to flash your Arduino with neopixels_firmware/neopixels_firmware.ino.

Tuning the whistle detector

Think you got it right but it's not detecting the melody? Or perhaps your detection thinks everything is correct (false positives).

You can tune the whistle detector by adjusting the following parameters:

  • THRESHOLD at the top of the demo_*.py scripts. A lower value will be more selective, while a higher value will yield a less strict detector.
  • PEAK_WIDTH and E_RATIO in the utils.transcribe function.

Otherwise, you can tune your own whistling ;)


Workshop content is modified from material by Paolo Prandoni.

WAV file sources:


(Whistled) melody detection workshop. First presented at LauzHack Days (Nov 13, 2018).








No releases published