sonusai 1.0.7__py3-none-any.whl → 1.0.9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
sonusai/mixture/mixdb.py CHANGED
@@ -2,8 +2,6 @@
2
2
  from functools import cached_property
3
3
  from functools import lru_cache
4
4
  from functools import partial
5
- from sqlite3 import Connection
6
- from sqlite3 import Cursor
7
5
  from typing import Any
8
6
 
9
7
  from ..datatypes import ASRConfigs
@@ -31,66 +29,8 @@ from ..datatypes import TruthDict
31
29
  from ..datatypes import TruthsConfigs
32
30
  from ..datatypes import TruthsDict
33
31
  from ..datatypes import UniversalSNR
34
-
35
-
36
- def db_file(location: str, test: bool = False) -> str:
37
- from os.path import join
38
-
39
- from .constants import MIXDB_NAME
40
- from .constants import TEST_MIXDB_NAME
41
-
42
- if test:
43
- name = TEST_MIXDB_NAME
44
- else:
45
- name = MIXDB_NAME
46
-
47
- return join(location, name)
48
-
49
-
50
- def db_connection(
51
- location: str,
52
- create: bool = False,
53
- readonly: bool = True,
54
- test: bool = False,
55
- verbose: bool = False,
56
- ) -> Connection:
57
- import sqlite3
58
- from os import remove
59
- from os.path import exists
60
-
61
- from .. import logger_db
62
-
63
- name = db_file(location, test)
64
- if create and exists(name):
65
- remove(name)
66
-
67
- if not create and not exists(name):
68
- raise OSError(f"Could not find mixture database in {location}")
69
-
70
- if not create and readonly:
71
- name += "?mode=ro"
72
-
73
- connection = sqlite3.connect("file:" + name, uri=True, timeout=20)
74
-
75
- if verbose:
76
- connection.set_trace_callback(logger_db.debug)
77
-
78
- return connection
79
-
80
-
81
- class SQLiteContextManager:
82
- def __init__(self, location: str, test: bool = False, verbose: bool = False) -> None:
83
- self.location = location
84
- self.test = test
85
- self.verbose = verbose
86
-
87
- def __enter__(self) -> Cursor:
88
- self.con = db_connection(location=self.location, test=self.test, verbose=self.verbose)
89
- self.cur = self.con.cursor()
90
- return self.cur
91
-
92
- def __exit__(self, exc_type, exc_val, exc_tb) -> None:
93
- self.con.close()
32
+ from .db import SQLiteDatabase
33
+ from .db_file import db_file
94
34
 
95
35
 
96
36
  class MixtureDatabase:
@@ -108,19 +48,22 @@ class MixtureDatabase:
108
48
  if not exists(db_file(self.location, self.test)):
109
49
  raise OSError(f"Could not find mixture database in {self.location}")
110
50
 
111
- self.db = partial(SQLiteContextManager, self.location, self.test, self.verbose)
51
+ self.db = partial(SQLiteDatabase, location=self.location, test=self.test, verbose=self.verbose)
112
52
 
113
- # Check config.yml to see if asr_configs has changed and update database if needed
53
+ # Check config.yml to see if asr_configs has changed and update the database if needed
114
54
  config = load_config(self.location)
115
55
  new_asr_configs = json.dumps(config["asr_configs"])
116
56
  with self.db() as c:
117
57
  old_asr_configs = c.execute("SELECT asr_configs FROM top").fetchone()
118
58
 
119
59
  if old_asr_configs is not None and new_asr_configs != old_asr_configs[0]:
120
- con = db_connection(location=self.location, readonly=False, test=self.test, verbose=self.verbose)
121
- con.execute("UPDATE top SET asr_configs = ? WHERE ? = id", (new_asr_configs,))
122
- con.commit()
123
- con.close()
60
+ with SQLiteDatabase(
61
+ location=self.location,
62
+ readonly=False,
63
+ test=self.test,
64
+ verbose=self.verbose,
65
+ ) as cur:
66
+ cur.execute("UPDATE top SET asr_configs = ? WHERE ? = id", (new_asr_configs,))
124
67
 
125
68
  @cached_property
126
69
  def json(self) -> str:
sonusai/mkwav.py CHANGED
@@ -86,7 +86,7 @@ def main() -> None:
86
86
 
87
87
  start_time = time.monotonic()
88
88
 
89
- create_file_handler(join(location, "mkwav.log"))
89
+ create_file_handler(join(location, "mkwav.log"), verbose)
90
90
  update_console_handler(verbose)
91
91
  initial_log_messages("mkwav")
92
92
 
sonusai/onnx_predict.py CHANGED
@@ -210,7 +210,7 @@ def main() -> None:
210
210
  if mixdb_path is not None or len(pfiles) > 1: # log file only if mixdb or more than one file
211
211
  makedirs(output_dir, exist_ok=True)
212
212
  # Setup logging file
213
- create_file_handler(join(output_dir, "onnx-predict.log"))
213
+ create_file_handler(join(output_dir, "onnx-predict.log"), verbose)
214
214
  update_console_handler(verbose)
215
215
  initial_log_messages("onnx_predict")
216
216
  # print some previous messages
@@ -2,10 +2,10 @@ import numpy as np
2
2
 
3
3
 
4
4
  def int16_to_float(x: np.ndarray) -> np.ndarray:
5
- """Convert int16 array to floating point with range +/- 1"""
5
+ """Convert an int16 array to a floating point array with range +/- 1"""
6
6
  return x.astype(np.float32) / 32768
7
7
 
8
8
 
9
9
  def float_to_int16(x: np.ndarray) -> np.ndarray:
10
- """Convert float point array with range +/- 1 to int16"""
10
+ """Convert a floating point array with range +/- 1 to an int16 array"""
11
11
  return (x * 32768).astype(np.int16)
@@ -1,18 +1,15 @@
1
1
  from collections.abc import Callable
2
2
 
3
3
  from ..datatypes import ClassCount
4
+ from ..mixture.helpers import mixture_all_speech_metadata
4
5
  from ..mixture.mixdb import MixtureDatabase
5
6
 
6
7
 
7
8
  def print_mixture_details(
8
9
  mixdb: MixtureDatabase,
9
10
  mixid: int | None = None,
10
- desc_len: int = 1,
11
11
  print_fn: Callable = print,
12
12
  ) -> None:
13
- import numpy as np
14
-
15
- from ..constants import SAMPLE_RATE
16
13
  from ..utils.seconds_to_hms import seconds_to_hms
17
14
 
18
15
  if mixid is not None:
@@ -21,30 +18,29 @@ def print_mixture_details(
21
18
 
22
19
  print_fn(f"Mixture {mixid} details")
23
20
  mixture = mixdb.mixture(mixid)
24
- target_files = [mixdb.target_files[target.file_id] for target in mixture.targets]
25
- target_augmentations = [target.augmentation for target in mixture.targets]
26
- noise_file = mixdb.noise_file(mixture.noise.file_id)
27
- for t_idx, target_file in enumerate(target_files):
28
- print_fn(f" Target {t_idx}")
29
- print_fn(f"{' Name':{desc_len}} {target_file.name}")
30
- print_fn(f"{' Duration':{desc_len}} {seconds_to_hms(target_file.duration)}")
31
- for truth_name, truth_config in target_file.truth_configs.items():
32
- print_fn(f" Truth config: '{truth_name}'")
33
- print_fn(f"{' Function':{desc_len}} {truth_config.function}")
34
- print_fn(f"{' Stride reduction':{desc_len}} {truth_config.stride_reduction}")
35
- print_fn(f"{' Config':{desc_len}} {truth_config.config}")
36
- print_fn(f"{' Augmentation':{desc_len}} {target_augmentations[t_idx]}")
37
- print_fn(f"{' Samples':{desc_len}} {mixture.samples}")
38
- print_fn(f"{' Feature frames':{desc_len}} {mixdb.mixture_feature_frames(mixid)}")
39
- print_fn(f"{' Noise file':{desc_len}} {noise_file.name}")
40
- noise_offset_percent = int(np.round(100 * mixture.noise_offset / float(noise_file.duration * SAMPLE_RATE)))
41
- print_fn(f"{' Noise offset':{desc_len}} {mixture.noise_offset} samples ({noise_offset_percent}%)")
42
- print_fn(f"{' SNR':{desc_len}} {mixture.snr} dB{' (random)' if mixture.snr.is_random else ''}")
43
- print_fn(
44
- f"{' Target gain':{desc_len}} {[target.gain if not mixture.is_noise_only else 0 for target in mixture.targets]}"
45
- )
46
- print_fn(f"{' Target SNR gain':{desc_len}} {mixture.target_snr_gain}")
47
- print_fn(f"{' Noise SNR gain':{desc_len}} {mixture.noise_snr_gain}")
21
+ speech_metadata = mixture_all_speech_metadata(mixdb, mixture)
22
+ for category, source in mixture.all_sources.items():
23
+ source_file = mixdb.source_file(source.file_id)
24
+ print_fn(f" {category}")
25
+ print_fn(f" name: {source_file.name}")
26
+ print_fn(f" effects: {source.effects.to_dict()}")
27
+ print_fn(f" pre_tempo: {source.pre_tempo}")
28
+ print_fn(f" duration: {seconds_to_hms(source_file.duration)}")
29
+ print_fn(f" start: {source.start}")
30
+ print_fn(f" repeat: {source.repeat}")
31
+ print_fn(f" snr: {source.snr}")
32
+ print_fn(f" random_snr: {source.snr.is_random}")
33
+ print_fn(f" snr_gain: {source.snr_gain}")
34
+ for key in source_file.truth_configs:
35
+ print_fn(f" truth '{key}' function: {source_file.truth_configs[key].function}")
36
+ print_fn(f" truth '{key}' config: {source_file.truth_configs[key].config}")
37
+ print_fn(
38
+ f" truth '{key}' stride_reduction: {source_file.truth_configs[key].stride_reduction}"
39
+ )
40
+ for key in speech_metadata[category]:
41
+ print_fn(f"{category} speech {key}: {speech_metadata[category][key]}")
42
+ print_fn(f" samples: {mixture.samples}")
43
+ print_fn(f" feature frames: {mixdb.mixture_feature_frames(mixid)}")
48
44
  print_fn("")
49
45
 
50
46
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: sonusai
3
- Version: 1.0.7
3
+ Version: 1.0.9
4
4
  Summary: Framework for building deep neural network models for sound, speech, and voice AI
5
5
  Home-page: https://aaware.com
6
6
  License: GPL-3.0-only
@@ -31,6 +31,7 @@ Requires-Dist: psutil (>=6.0.0,<7.0.0)
31
31
  Requires-Dist: pyaaware (>=2.0.0,<3.0.0)
32
32
  Requires-Dist: pyaudio (>=0.2.14,<0.3.0)
33
33
  Requires-Dist: pydub (>=0.25.1,<0.26.0)
34
+ Requires-Dist: pyparsing (>=3.2.3,<4.0.0)
34
35
  Requires-Dist: pystoi (>=0.4.1,<0.5.0)
35
36
  Requires-Dist: pyyaml (>=6.0.2,<7.0.0)
36
37
  Requires-Dist: requests (>=2.32.3,<3.0.0)
@@ -1,7 +1,7 @@
1
- sonusai/__init__.py,sha256=XSjulPEFTHCTNAte0z0Ie0e-3w9uVX5j5mR9QfE_r40,3710
1
+ sonusai/__init__.py,sha256=uIuqSf_XWSVHTj4Q7bfJaO7uK1C25XpSK90DWMRKyx4,3773
2
2
  sonusai/aawscd_probwrite.py,sha256=QZLMQrmPr3OjZ06buyYDwlnk9YPCpyr4KHkBjPsiqjU,3700
3
- sonusai/audiofe.py,sha256=0DNpntK0WpzNZeyHX8_wC-pDtrgvLkJZFPXz-PspdrY,19448
4
- sonusai/calc_metric_spenh.py,sha256=0Md6hRFUH9lGnsvoydqne99O7Gi0ieG9vMU_1PnASBg,50019
3
+ sonusai/audiofe.py,sha256=un6fbS1fHWo9rpgRYG6SdBjaCWuxLkDKtg6N_ZkC1dk,19457
4
+ sonusai/calc_metric_spenh.py,sha256=UW4ItryjYgb4NHkwki9LHvyDBwdIHIARc1yT6yCPJno,50084
5
5
  sonusai/config/__init__.py,sha256=NeXdBQiuRKIm77pK9WHaxkdst9-jwhX1IDrHvpZecpI,52
6
6
  sonusai/config/config.py,sha256=nM1W7dQXBWMdMLrgh3o7_cEItztFf1UTW-4faM0hIqY,1692
7
7
  sonusai/config/config.yml,sha256=9y8wWXemU8tnvm_O21treyCpZF85QzokHsHQ8yl6IfE,283
@@ -18,14 +18,14 @@ sonusai/deprecated/gentcst.py,sha256=nKbHy3aHreHqA-XnLQOzOApS8RuTNUFqnx52a8I5zLQ
18
18
  sonusai/deprecated/plot.py,sha256=ZzOP4b_7cotArSxbTDDDbhc7hj1BFMzooeZ20ppKneg,17430
19
19
  sonusai/deprecated/tplot.py,sha256=0p238DvTaP4oU9y-dp0JdLaTV4TKrooAwbx7zdz_QAc,14641
20
20
  sonusai/doc/__init__.py,sha256=KyQ26Um0RM8A3GYsb_tbFH64RwpoAw6lja2f_moUWas,33
21
- sonusai/doc/doc.py,sha256=vyEfiUNd--F14Eel-u1EY4mfvHUXJrGrV3xKKExUiC4,19272
21
+ sonusai/doc/doc.py,sha256=FURO3pvGKrUCHs5iHf0L2zeNofdePW_jiEwtKQX4pJw,19520
22
22
  sonusai/doc.py,sha256=ZgFSSI56oNDb-yC3xi-RHMClMjryR2VrgGyi3ggX8gM,1098
23
- sonusai/genft.py,sha256=jGjtjQQEuPunROkoDOYZ7gdyZEa09EMCVhpHrkBZ7A0,5571
24
- sonusai/genmetrics.py,sha256=sbcqbjI4YOJd5_Lzor4Re_TK6GUQ5zJuYbhDux8odI0,6184
25
- sonusai/genmix.py,sha256=U62GPgejGfnDfRgXUosmnVVWvTV07sg46JQEIew0nPg,5744
26
- sonusai/genmixdb.py,sha256=9T-qn8_Bekc-P7kOY4pV8w-CHixDvSbZPds7wt_mDYU,11272
23
+ sonusai/genft.py,sha256=yiADvi0J-Fy4kNpNOEB3wVvU9RZowGvOsCTJndQYXFw,5580
24
+ sonusai/genmetrics.py,sha256=9l7g_DAKa126RGq23-Wilzdh1M3QHCCeNfUVYaQS1mU,6193
25
+ sonusai/genmix.py,sha256=gcmqcPqZ1Vz_TtZMp29L8cGnqTK5jcw0cAOc16NOR9A,5753
26
+ sonusai/genmixdb.py,sha256=VDQMF6JHcHc-yJAZ1Se3CM3ac8fFKIgnaxv4e5jdE1I,11281
27
27
  sonusai/ir_metric.py,sha256=nxS_mARPSZG5Y0G3L8HysOnkPj4v-RGxAxAVBYe-gJI,19600
28
- sonusai/lsdb.py,sha256=86t6PpsyardRa6VcSJ-KyU1NiTmlg59VUlcSTptJbn0,5078
28
+ sonusai/lsdb.py,sha256=-Fhwd7YuL-OIymFqaNcBHtOq8l_8LxzoEE6ztduQCpY,5059
29
29
  sonusai/main.py,sha256=72feJv5XEVJE_CQatmNIL1VD9ca-Mo0QNDbXxLrHrbQ,2619
30
30
  sonusai/metrics/__init__.py,sha256=ssV6JEK_oklRSocsp6HMcG-GtJvV8IkRQtdKhHHmwU8,878
31
31
  sonusai/metrics/calc_audio_stats.py,sha256=tIfTa40UdYCkj999kUghWafwnFBqFtJxB5yZhVp1YpA,1244
@@ -44,22 +44,24 @@ sonusai/metrics/class_summary.py,sha256=mQbMxQ8EtFIN7S2h7A4Dk0X4XF_CIxKk3W8zZMmp
44
44
  sonusai/metrics/confusion_matrix_summary.py,sha256=lhd8TyHVMC03khX85h_D75XElmawx56KkqpX3X2O2gQ,3133
45
45
  sonusai/metrics/one_hot.py,sha256=aKc-xYd4zWIjbmoQikIcQ6BJB1k-68XKTg8eJCacHTU,13906
46
46
  sonusai/metrics/snr_summary.py,sha256=qKHctpmvGeu2cmjTG7iQPX1lvVUEtEnCIKwUGu6VrEQ,5773
47
- sonusai/metrics_summary.py,sha256=pQ5kNwweQM6LdP6TpJE7kV3Z9BYUd96IfEjnZLfSpQI,12211
48
- sonusai/mixture/__init__.py,sha256=_vepE2uhAGKHIujPWxfGDeaWHP5yKLf5BjXkU9ZereA,1258
47
+ sonusai/metrics_summary.py,sha256=jtSwHomw23qwTYfzjFo_JmqzrkZcts1CMFFzTmJCmWk,12189
48
+ sonusai/mixture/__init__.py,sha256=l4CgJN0gH4Z19jcQvXJbR8KSZ5f_ysnoAGi93LQaTjM,1260
49
49
  sonusai/mixture/audio.py,sha256=JyrVtVPLH3aTXFgyl446f5uVHxlFRa4aBaSPYaMdg80,5814
50
50
  sonusai/mixture/class_balancing.py,sha256=lubicVCzxs4TMh2dZSsuIffkLkk1gmwjmwtrtQ27BVQ,3638
51
51
  sonusai/mixture/config.py,sha256=2_hEndyRXxyBpGzyBFaDT9REYGoK9Q7HQy8vDqPozus,23320
52
52
  sonusai/mixture/constants.py,sha256=Kklzhf5DL30yb3TpqRbvRUhcFrEXJ4s2S3D_nw4ARxM,1498
53
53
  sonusai/mixture/data_io.py,sha256=DV48sFcP2Qp3NBzvcnlptQOXU3aUEcAeLuh3XOtC5jI,5341
54
+ sonusai/mixture/db.py,sha256=yd0bCiihuUAw3IgRlLqcshXB2QHep837O3TwjPyo-LM,5132
54
55
  sonusai/mixture/db_datatypes.py,sha256=VvNtbOgt5WSeSnBoVcNGC5gs_7hX_38pDUPjy5KRbG4,1471
55
- sonusai/mixture/effects.py,sha256=ghMO-WiSMQc1CvafD0wkt_DGsM2A6Hi_oZS6j-jeZh8,11784
56
+ sonusai/mixture/db_file.py,sha256=P48TWYNyqchycENIqBu1QqhfsRDP6WK2VanPgxN1Imk,278
57
+ sonusai/mixture/effects.py,sha256=zIb6ir0WSdKQJo7uJ3QQnV52RA6lJaqgQqvQh-s0dhc,11038
56
58
  sonusai/mixture/feature.py,sha256=7GJvFhfqeqerfjy9Vq9aKt-cecgYblK0IypNNo5hgwY,2285
57
- sonusai/mixture/generation.py,sha256=2VQ41uc1OLFpDKwu0TlcdtxSXwiTJFr_B6_E20pheIY,32844
59
+ sonusai/mixture/generation.py,sha256=_vGTyqo0ocyOK84rTj_1QXciq1Tmxxl5XhwaXPWIEL0,33105
58
60
  sonusai/mixture/helpers.py,sha256=dmyHwf1C5dZjYOd11kVV16KI33CaM-dU_fyaxOrrKt8,11642
59
61
  sonusai/mixture/ir_delay.py,sha256=aiC23HMWQ08-v5wORgMx1_DOJSdh4kunULqiQ-SGuMo,2026
60
62
  sonusai/mixture/ir_effects.py,sha256=PqiqD4PS42-7kD6ESnsZi2a3tnKCFa4E0xqUujRBvGg,2152
61
63
  sonusai/mixture/log_duration_and_sizes.py,sha256=3ekS27IMKlnxIkQAmprzmBnzHOpRjZh3d7maL2VqWQU,927
62
- sonusai/mixture/mixdb.py,sha256=zGFagqRIV9uX2QiP795lyN29AarGnZgeKTdUIBcuyfY,86305
64
+ sonusai/mixture/mixdb.py,sha256=5YI0zKisFw_B-jKpB-Y1EYlJ8pHQDvOQLs9LEe0gT1w,84905
63
65
  sonusai/mixture/pad_audio.py,sha256=KNxVQAejA0hblLOnMJgLS6lFaeE0n3tWQ5rclaHBnIY,1015
64
66
  sonusai/mixture/resample.py,sha256=jXqH6FrZ0mlhQ07XqPx88TT9elu3HHVLw7Q0a7Lh5M4,221
65
67
  sonusai/mixture/sox_effects.py,sha256=tndS9qrh3eJOTUPrufyWHCt3UqjbPuh81I4Lo4MNmDg,5328
@@ -75,8 +77,8 @@ sonusai/mixture/truth_functions/metrics.py,sha256=Mu6o4Hf-I0-f-dVA_egFBUvf1OBj5v
75
77
  sonusai/mixture/truth_functions/phoneme.py,sha256=PhSev7PNDOECcdjnCwiISDZlXQwAiOdk_hD0p3eoXN4,763
76
78
  sonusai/mixture/truth_functions/sed.py,sha256=bMYHLBNPfzo4K-22_iGNi2NwDAG82vNtlDioA8VqcOo,3750
77
79
  sonusai/mixture/truth_functions/target.py,sha256=06zNRu4aD7TReZiaq0HQgukqOrYr1sDgYhHCTIPV1Es,4913
78
- sonusai/mkwav.py,sha256=Za0Xdn7ixth3RaYDS7ODOpNJmxjfr9ZMZh0anJO6r4o,4191
79
- sonusai/onnx_predict.py,sha256=8ViupBIvbWExOHMxNsrpyElzAD0WQovGZoOXy7tnESk,15772
80
+ sonusai/mkwav.py,sha256=CExhCtnCvWm2pOS0JW_1FL0Te63JC_WbgA78tS4GB1Q,4200
81
+ sonusai/onnx_predict.py,sha256=w_gyvxWlDIxj0ySG3c1y8bMV7xlPb-ecVUtun_LInms,15781
80
82
  sonusai/queries/__init__.py,sha256=gB7mgKVg8nIIgH-M1Oivoxkc3TGieOlIFzRHMwBQmrY,277
81
83
  sonusai/queries/queries.py,sha256=HLbwbd7OSXKO-IH6LxKzpr98_vfNlNQXIKZSUvQ98lw,7702
82
84
  sonusai/speech/__init__.py,sha256=vqAymCBPjMUSM4OZKHTai6BYwXsOBlf_G_vOhELVf8I,133
@@ -115,11 +117,11 @@ sonusai/utils/keyboard_interrupt.py,sha256=fqBFn8ue_BZ4B2Pw5fk5WPvT4w3aKRNrCExIB
115
117
  sonusai/utils/load_object.py,sha256=if4Vammcd-jZTz_n7QzwNIlN4HqSL0v91I9YQzcvEEA,493
116
118
  sonusai/utils/max_text_width.py,sha256=pxiJMwb_zlkNntexgo7S6lAuF7NLLZvFdOCkxdsQJVY,315
117
119
  sonusai/utils/model_utils.py,sha256=OIJBhOjxR0wpxsd7A2r6J2AjqfdYgZzi6UEThw4S1lI,828
118
- sonusai/utils/numeric_conversion.py,sha256=iFPXFU8C_1mW5tmDqHq8-xP1tL8nVaSmhQRakdCqy30,328
120
+ sonusai/utils/numeric_conversion.py,sha256=2Ie9ATgJRAo-1y0ECX2YYS23XZ3BG7AB7M7Bys1-pqY,353
119
121
  sonusai/utils/onnx_utils.py,sha256=XkG7ldYD43_pQXkn-1XFSuwwC8HB7-FH7Y4-AYZOUFo,5591
120
122
  sonusai/utils/parallel.py,sha256=yvRZvZWPR5slM51i08m7sYx-Mvsb5oryCqqJXVoJ8tQ,2190
121
123
  sonusai/utils/path_info.py,sha256=QY7iQ0nYpeEDnPN9RyPh4DsgYmVYsLrrlAzKuzkqX1o,118
122
- sonusai/utils/print_mixture_details.py,sha256=fUYccs25KF-fpgT9wK3PEKkc18gWfIO99zyiUuNWVBM,2979
124
+ sonusai/utils/print_mixture_details.py,sha256=7HObpltY60WdPcrC9lcT3zYHkw-clEZZQbESM9a9DKk,2521
123
125
  sonusai/utils/rand.py,sha256=yQMpYuJFi8GkIocDYIT3ESfNYEgWA7KZMWpgjqr0UXQ,225
124
126
  sonusai/utils/ranges.py,sha256=-TtAR0Vg_j4kYtJOvEOYQllBZEat_KfUKsfRxr5oj-o,1235
125
127
  sonusai/utils/read_predict_data.py,sha256=ZcIlfwxfav8Lh3gye7V150t0c6k-C9y5SbzWtDQ6TuU,1037
@@ -131,7 +133,7 @@ sonusai/utils/tokenized_shell_vars.py,sha256=EDrrAgz5lJ0RBAjLcTJt1MeyjhbNZiqXkym
131
133
  sonusai/utils/write_audio.py,sha256=IHzrJoFtFcea_J6wo6QSiojRkgnNOzAEcg-z0rFV7nU,810
132
134
  sonusai/utils/yes_or_no.py,sha256=0h1okjXmDNbJp7rZJFR2V-HFU1GJDm3YFTUVmYExkOU,263
133
135
  sonusai/vars.py,sha256=m8pdgfR4A6A9TCGf_rok6jPAT5BgrEsYXTSISIh1nrI,1163
134
- sonusai-1.0.7.dist-info/METADATA,sha256=eyPTvxuqs2NwuNq2Rp5JsQOeCCZxol44M6EIWlxW3Ng,2652
135
- sonusai-1.0.7.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
136
- sonusai-1.0.7.dist-info/entry_points.txt,sha256=zMNjEphEPO6B3cD1GNpit7z-yA9tUU5-j3W2v-UWstU,92
137
- sonusai-1.0.7.dist-info/RECORD,,
136
+ sonusai-1.0.9.dist-info/METADATA,sha256=PnNdFaS3cIoP8dZEDP6bKK-QoR5W_rV-z5OwEhxhlQs,2694
137
+ sonusai-1.0.9.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
138
+ sonusai-1.0.9.dist-info/entry_points.txt,sha256=zMNjEphEPO6B3cD1GNpit7z-yA9tUU5-j3W2v-UWstU,92
139
+ sonusai-1.0.9.dist-info/RECORD,,