code.py
1 # SPDX-FileCopyrightText: 2018 Kattni Rembor for Adafruit Industries 2 # 3 # SPDX-License-Identifier: MIT 4 5 import time 6 import array 7 import math 8 import board 9 import audiobusio 10 11 12 # Remove DC bias before computing RMS. 13 def mean(values): 14 return sum(values) / len(values) 15 16 17 def normalized_rms(values): 18 minbuf = int(mean(values)) 19 samples_sum = sum( 20 float(sample - minbuf) * (sample - minbuf) 21 for sample in values 22 ) 23 24 return math.sqrt(samples_sum / len(values)) 25 26 27 # Main program 28 mic = audiobusio.PDMIn(board.TX, board.D12, sample_rate=16000, bit_depth=16) 29 samples = array.array('H', [0] * 160) 30 31 32 while True: 33 mic.record(samples, len(samples)) 34 magnitude = normalized_rms(samples) 35 print((magnitude,)) 36 time.sleep(0.1)