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 | ||