Showing the changes to python (1 of 1 file). Show all
Unified · Split
| @@ -0,0 +1,45 @@ | ||
| 1 | +#! /usr/bin/env python | |
| 2 | + | |
| 3 | +import alsaaudio | |
| 4 | +import numpy as np | |
| 5 | +import aubio | |
| 6 | + | |
| 7 | +# constants | |
| 8 | +samplerate = 44100 | |
| 9 | +win_s = 2048 | |
| 10 | +hop_s = win_s // 2 | |
| 11 | +framesize = hop_s | |
| 12 | + | |
| 13 | +# set up audio input | |
| 14 | +recorder = alsaaudio.PCM(type=alsaaudio.PCM_CAPTURE) | |
| 15 | +recorder.setperiodsize(framesize) | |
| 16 | +recorder.setrate(samplerate) | |
| 17 | +recorder.setformat(alsaaudio.PCM_FORMAT_FLOAT_LE) | |
| 18 | +recorder.setchannels(1) | |
| 19 | + | |
| 20 | +# create aubio pitch detection (first argument is method, "default" is | |
| 21 | +# "yinfft", can also be "yin", "mcomb", fcomb", "schmitt"). | |
| 22 | +pitcher = aubio.pitch("default", win_s, hop_s, samplerate) | |
| 23 | +# set output unit (can be 'midi', 'cent', 'Hz', ...) | |
| 24 | +pitcher.set_unit("Hz") | |
| 25 | +# ignore frames under this level (dB) | |
| 26 | +pitcher.set_silence(-40) | |
| 27 | + | |
| 28 | +print("Starting to listen, press Ctrl+C to stop") | |
| 29 | + | |
| 30 | +# main loop | |
| 31 | +while True: | |
| 32 | + try: | |
| 33 | + # read data from audio input | |
| 34 | + _, data = recorder.read() | |
| 35 | + # convert data to aubio float samples | |
| 36 | + samples = np.fromstring(data, dtype=aubio.float_type) | |
| 37 | + # pitch of current frame | |
| 38 | + freq = pitcher(samples)[0] | |
| 39 | + # compute energy of current block | |
| 40 | + energy = np.sum(samples**2)/len(samples) | |
| 41 | + # do something with the results | |
| 42 | + print("{:10.4f} {:10.4f}".format(freq,energy)) | |
| 43 | + except KeyboardInterrupt: | |
| 44 | + print("Ctrl+C pressed, exiting") | |
| 45 | + break | |