X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=helpers%2F__init__.py;h=ce8f04bf026a55840f2a4b095f9954484c9ef6ea;hb=d6290f14246b69e10a73e2798dd3905e866b3e88;hp=2339b9ba7852318d043abf45373a3a38f089089c;hpb=1b4b78f5b6df7182ac066fcc26a7b4f0e8586a47;p=perso%2FImmae%2FProjets%2FPython%2FMusicSampler.git diff --git a/helpers/__init__.py b/helpers/__init__.py index 2339b9b..ce8f04b 100644 --- a/helpers/__init__.py +++ b/helpers/__init__.py @@ -3,13 +3,10 @@ import argparse import sys import os import math +import sounddevice as sd class Config: - def __init__(self, **kwargs): - for arg in kwargs: - setattr(self, arg, kwargs[arg]) - -config = Config(yml_file="config.yml") + pass def path(): if getattr(sys, 'frozen', False): @@ -28,21 +25,75 @@ def parse_args(): sys.argv.extend(kivy_args) - parser = argparse.ArgumentParser(description="A Music Sampler application.") + parser = argparse.ArgumentParser( + description="A Music Sampler application.", + formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument("-c", "--config", default="config.yml", required=False, help="Config file to load") + parser.add_argument("-m", "--builtin-mixing", + action="store_true", + help="Make the mixing of sounds manually (do it if the system cannot handle it correctly)") + parser.add_argument("-l", "--latency", + default="high", + required=False, + help="Latency: low, high or number of seconds") + parser.add_argument("-b", "--blocksize", + default=0, + type=int, + required=False, + help="Blocksize: If not 0, the numbe of frames to take at each step for the mixer") + parser.add_argument("-f", "--frame-rate", + default=44100, + type=int, + required=False, + help="Frame rate to play the musics") + parser.add_argument("-x", "--channels", + default=2, + type=int, + required=False, + help="Number of channels to use") + parser.add_argument("-s", "--sample-width", + default=2, + type=int, + required=False, + help="Sample width (number of bytes for each frame)") parser.add_argument("-V", "--version", 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.") args = parser.parse_args(argv) - config.yml_file = args.config + Config.yml_file = args.config + Config.latency = args.latency + Config.blocksize = args.blocksize + Config.frame_rate = args.frame_rate + Config.channels = args.channels + Config.sample_width = args.sample_width + Config.builtin_mixing = args.builtin_mixing + +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): @@ -51,9 +102,6 @@ def show_version(): else: return "option '-v' can only be used in bundled package" -def yml_file(): - return config.yml_file - def duration_to_min_sec(duration): minutes = int(duration / 60) seconds = int(duration) % 60