Added note about cgroup2 protection
[ampy.git] / run.py
diff --git a/run.py b/run.py
index 3a599fc2f7d6931069d7462e79abe25e1bff5c8b..cfdb9500c40121f2a88fbb7f83a1014fb72216e1 100755 (executable)
--- a/run.py
+++ b/run.py
@@ -4,15 +4,16 @@ PyAudio example: Record a few seconds of audio and save to a WAVE
 file.
 """
 
+import json
 import os
 import struct
 import time
 
 import pyaudio
 
+PARAMFILE = '/var/lib/ampy/params.json'
 FORMAT = pyaudio.paInt32  # Format
 STRUCTFORMAT = 'i'  # Format for python struct module
-DEVICE = 5  # which alsa decive to read
 RATE = 44100
 RECORD_SECONDS = 0.5
 
@@ -36,17 +37,32 @@ VOLUME_CONSTANT = 132360.98315789475
 # average 4806.6W
 
 
+def read_params_file():
+    with open(PARAMFILE) as f:
+        params = json.loads(f.read())
+    return params
+
+
 def loop(optrecord, optstats):
+    try:
+        params = read_params_file()
+        alsadevice = params['alsadevice']
+    except (FileNotFoundError, json.decoder.JSONDecodeError, KeyError):
+        print("Error reading the parameters. Please run device.py")
+
     p = pyaudio.PyAudio()
+    print("PyAudio opened")
+
+    print("Ampy Selected input device #{}: {}".format(
+        alsadevice, p.get_device_info_by_index(alsadevice)['name']))
 
-    print("opened")
     NSAMPLE = int(RATE * RECORD_SECONDS)
     stream = p.open(
             format=FORMAT,
             channels=1,  # Our ampmeter always returns 0 on the second channel
             rate=RATE,
             input=True,
-            input_device_index=DEVICE)
+            input_device_index=alsadevice)
 
     structformat = '<' + STRUCTFORMAT * NSAMPLE
     while(True):
@@ -91,7 +107,7 @@ def loop(optrecord, optstats):
 def main():
     import argparse
 
-    parser = argparse.ArgumentParser(description='Ampemeter processing')
+    parser = argparse.ArgumentParser(description='Ammeter processing')
     parser.add_argument(
             '--stats',
             action='store_true',