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)