]> git.immae.eu Git - perso/Immae/Projets/Python/MusicSampler.git/blobdiff - helpers/__init__.py
Add a common mixer
[perso/Immae/Projets/Python/MusicSampler.git] / helpers / __init__.py
index 3b97f2fb435d5837c803895e479184b9c16b694d..4b9529dc8b64b2b7869bb07c5c7b62135c391270 100644 (file)
@@ -2,6 +2,8 @@
 import argparse
 import sys
 import os
+import math
+import sounddevice as sd
 
 class Config:
     def __init__(self, **kwargs):
@@ -36,6 +38,15 @@ def parse_args():
             action="version",
             help="Displays the current version and exits. Only use in bundled package",
             version=show_version())
+    parser.add_argument("--device",
+            action=SelectDeviceAction,
+            help="Select this sound device"
+            )
+    parser.add_argument("--list-devices",
+            nargs=0,
+            action=ListDevicesAction,
+            help="List available sound devices"
+            )
     parser.add_argument('--',
             dest="args",
             help="Kivy arguments. All arguments after this are interpreted by Kivy. Pass \"-- --help\" to get Kivy's usage.")
@@ -43,6 +54,16 @@ def parse_args():
 
     config.yml_file = args.config
 
+class SelectDeviceAction(argparse.Action):
+    def __call__(self, parser, namespace, values, option_string=None):
+        sd.default.device = values
+
+class ListDevicesAction(argparse.Action):
+    nargs = 0
+    def __call__(self, parser, namespace, values, option_string=None):
+        print(sd.query_devices())
+        sys.exit()
+
 def show_version():
     if getattr(sys, 'frozen', False):
         with open(path() + ".pyinstaller_commit", "r") as f:
@@ -60,3 +81,10 @@ def duration_to_min_sec(duration):
         return "{:2}:{:0>2}".format(minutes, seconds)
     else:
         return "{}:{:0>2}".format(minutes, seconds)
+
+def gain(volume, old_volume = None):
+    if old_volume is None:
+        return 20 * math.log10(volume / 100)
+    else:
+        return [20 * math.log10(max(volume, 0.1) / max(old_volume, 0.1)), max(volume, 0)]
+