sonusai 0.17.0__py3-none-any.whl → 0.17.3__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.
Files changed (46) hide show
  1. sonusai/audiofe.py +25 -54
  2. sonusai/calc_metric_spenh.py +212 -219
  3. sonusai/doc/doc.py +1 -1
  4. sonusai/mixture/__init__.py +2 -0
  5. sonusai/mixture/audio.py +12 -0
  6. sonusai/mixture/datatypes.py +11 -3
  7. sonusai/mixture/mixdb.py +100 -0
  8. sonusai/mixture/soundfile_audio.py +39 -0
  9. sonusai/mixture/sox_augmentation.py +3 -0
  10. sonusai/mixture/speaker_metadata.py +35 -0
  11. sonusai/mixture/torchaudio_audio.py +22 -0
  12. sonusai/mkmanifest.py +1 -1
  13. sonusai/mkwav.py +4 -4
  14. sonusai/onnx_predict.py +114 -410
  15. sonusai/post_spenh_targetf.py +2 -2
  16. sonusai/queries/queries.py +1 -1
  17. sonusai/speech/__init__.py +3 -0
  18. sonusai/speech/l2arctic.py +116 -0
  19. sonusai/speech/librispeech.py +99 -0
  20. sonusai/speech/mcgill.py +70 -0
  21. sonusai/speech/textgrid.py +100 -0
  22. sonusai/speech/timit.py +135 -0
  23. sonusai/speech/types.py +12 -0
  24. sonusai/speech/vctk.py +52 -0
  25. sonusai/speech/voxceleb.py +102 -0
  26. sonusai/utils/__init__.py +3 -2
  27. sonusai/utils/asr_functions/aaware_whisper.py +2 -2
  28. sonusai/utils/asr_manifest_functions/__init__.py +0 -1
  29. sonusai/utils/asr_manifest_functions/data.py +0 -8
  30. sonusai/utils/asr_manifest_functions/librispeech.py +1 -1
  31. sonusai/utils/asr_manifest_functions/mcgill_speech.py +1 -1
  32. sonusai/utils/asr_manifest_functions/vctk_noisy_speech.py +1 -1
  33. sonusai/utils/braced_glob.py +7 -3
  34. sonusai/utils/onnx_utils.py +110 -106
  35. sonusai/utils/path_info.py +7 -0
  36. sonusai/utils/{wave.py → write_audio.py} +2 -2
  37. {sonusai-0.17.0.dist-info → sonusai-0.17.3.dist-info}/METADATA +3 -1
  38. {sonusai-0.17.0.dist-info → sonusai-0.17.3.dist-info}/RECORD +40 -35
  39. {sonusai-0.17.0.dist-info → sonusai-0.17.3.dist-info}/WHEEL +1 -1
  40. sonusai/calc_metric_spenh-save.py +0 -1334
  41. sonusai/onnx_predict-old.py +0 -240
  42. sonusai/onnx_predict-save.py +0 -487
  43. sonusai/ovino_predict.py +0 -508
  44. sonusai/ovino_query_devices.py +0 -47
  45. sonusai/torchl_onnx-old.py +0 -216
  46. {sonusai-0.17.0.dist-info → sonusai-0.17.3.dist-info}/entry_points.txt +0 -0
sonusai/utils/__init__.py CHANGED
@@ -27,11 +27,12 @@ from .max_text_width import max_text_width
27
27
  from .model_utils import import_module
28
28
  from .numeric_conversion import float_to_int16
29
29
  from .numeric_conversion import int16_to_float
30
- from .onnx_utils import SonusAIMetaData
31
30
  from .onnx_utils import add_sonusai_metadata
32
31
  from .onnx_utils import get_sonusai_metadata
32
+ from .onnx_utils import load_ort_session
33
33
  from .parallel import pp_imap
34
34
  from .parallel import pp_tqdm_imap
35
+ from .path_info import PathInfo
35
36
  from .print_mixture_details import print_class_count
36
37
  from .print_mixture_details import print_mixture_details
37
38
  from .ranges import consolidate_range
@@ -48,5 +49,5 @@ from .stacked_complex import stacked_complex_imag
48
49
  from .stacked_complex import stacked_complex_real
49
50
  from .stacked_complex import unstack_complex
50
51
  from .stratified_shuffle_split import stratified_shuffle_split_mixid
51
- from .wave import write_wav
52
+ from .write_audio import write_audio
52
53
  from .yes_or_no import yes_or_no
@@ -13,7 +13,7 @@ def aaware_whisper(data: ASRData) -> ASRResult:
13
13
  from sonusai import SonusAIError
14
14
  from sonusai.utils import ASRResult
15
15
  from sonusai.utils import float_to_int16
16
- from sonusai.utils import write_wav
16
+ from sonusai.utils import write_audio
17
17
 
18
18
  url = getenv('AAWARE_WHISPER_URL')
19
19
  if url is None:
@@ -22,7 +22,7 @@ def aaware_whisper(data: ASRData) -> ASRResult:
22
22
 
23
23
  with tempfile.TemporaryDirectory() as tmp:
24
24
  file = join(tmp, 'asr.wav')
25
- write_wav(name=file, audio=float_to_int16(data.audio))
25
+ write_audio(name=file, audio=float_to_int16(data.audio))
26
26
 
27
27
  files = {'audio_file': (file, open(file, 'rb'), 'audio/wav')}
28
28
 
@@ -1,4 +1,3 @@
1
- from .data import PathInfo
2
1
  from .data import TranscriptData
3
2
  from .librispeech import collect_librispeech_transcripts
4
3
  from .librispeech import get_librispeech_manifest_entry
@@ -1,9 +1 @@
1
- from dataclasses import dataclass
2
-
3
1
  TranscriptData = dict[str, str]
4
-
5
-
6
- @dataclass(frozen=True)
7
- class PathInfo:
8
- abs_path: str
9
- audio_filepath: str
@@ -1,4 +1,4 @@
1
- from sonusai.utils.asr_manifest_functions import PathInfo
1
+ from sonusai.utils import PathInfo
2
2
  from sonusai.utils.asr_manifest_functions import TranscriptData
3
3
 
4
4
 
@@ -1,4 +1,4 @@
1
- from sonusai.utils.asr_manifest_functions import PathInfo
1
+ from sonusai.utils import PathInfo
2
2
 
3
3
 
4
4
  def get_mcgill_speech_manifest_entry(entry: PathInfo, transcript_data: list[str]) -> dict:
@@ -1,4 +1,4 @@
1
- from sonusai.utils.asr_manifest_functions import PathInfo
1
+ from sonusai.utils import PathInfo
2
2
  from sonusai.utils.asr_manifest_functions import TranscriptData
3
3
 
4
4
 
@@ -1,9 +1,10 @@
1
1
  from typing import Generator
2
+ from typing import LiteralString
2
3
  from typing import Optional
3
4
  from typing import Set
4
5
 
5
6
 
6
- def expand_braces(text: str, seen: Optional[Set[str]] = None) -> Generator[str, None, None]:
7
+ def expand_braces(text: LiteralString | str | bytes, seen: Optional[Set[str]] = None) -> Generator[str, None, None]:
7
8
  """Brace-expansion pre-processing for glob.
8
9
 
9
10
  Expand all the braces, then run glob on each of the results.
@@ -16,6 +17,9 @@ def expand_braces(text: str, seen: Optional[Set[str]] = None) -> Generator[str,
16
17
  if seen is None:
17
18
  seen = set()
18
19
 
20
+ if not isinstance(text, str):
21
+ text = str(text)
22
+
19
23
  spans = [m.span() for m in re.finditer(r'\{[^{}]*}', text)][::-1]
20
24
  alts = [text[start + 1: stop - 1].split(',') for start, stop in spans]
21
25
 
@@ -31,7 +35,7 @@ def expand_braces(text: str, seen: Optional[Set[str]] = None) -> Generator[str,
31
35
  yield from expand_braces(''.join(replaced), seen)
32
36
 
33
37
 
34
- def braced_glob(pathname: str, recursive: bool = False) -> list[str]:
38
+ def braced_glob(pathname: LiteralString | str | bytes, recursive: bool = False) -> list[str]:
35
39
  from glob import glob
36
40
 
37
41
  result = []
@@ -41,7 +45,7 @@ def braced_glob(pathname: str, recursive: bool = False) -> list[str]:
41
45
  return result
42
46
 
43
47
 
44
- def braced_iglob(pathname: str, recursive: bool = False) -> Generator[str, None, None]:
48
+ def braced_iglob(pathname: LiteralString | str | bytes, recursive: bool = False) -> Generator[str, None, None]:
45
49
  from glob import iglob
46
50
 
47
51
  for expanded_path in expand_braces(pathname):
@@ -1,120 +1,134 @@
1
- from dataclasses import dataclass
1
+ from typing import Optional
2
+ from typing import Sequence
2
3
 
3
- from sonusai import logger
4
- from typing import Any #List, Optional, Tuple
5
- import onnxruntime as ort
6
- from onnxruntime import InferenceSession
7
- import onnx
4
+ from onnx import ModelProto
8
5
  from onnx import ValueInfoProto
9
- from os.path import basename, splitext, exists, isfile
6
+ from onnxruntime import InferenceSession
7
+ from onnxruntime import NodeArg
8
+ from onnxruntime import SessionOptions
9
+
10
+ REQUIRED_HPARAMS = ('feature', 'batch_size', 'timesteps', 'flatten', 'add1ch', 'truth_mutex')
11
+
12
+
13
+ def _extract_shapes(io: list[ValueInfoProto]) -> list[list[int] | str]:
14
+ shapes: list[list[int] | str] = []
15
+
16
+ # iterate through inputs of the graph to find shapes
17
+ for item in io:
18
+ # get tensor type: 0, 1, 2, etc.
19
+ tensor_type = item.type.tensor_type
20
+ # check if it has a shape
21
+ if tensor_type.HasField('shape'):
22
+ tmp_shape = []
23
+ # iterate through dimensions of the shape
24
+ for d in tensor_type.shape.dim:
25
+ if d.HasField('dim_value'):
26
+ # known dimension, int value
27
+ tmp_shape.append(d.dim_value)
28
+ elif d.HasField('dim_param'):
29
+ # dynamic dim with symbolic name of d.dim_param; set size to 0
30
+ tmp_shape.append(0)
31
+ else:
32
+ # unknown dimension with no name; also set to 0
33
+ tmp_shape.append(0)
34
+ # add as a list
35
+ shapes.append(tmp_shape)
36
+ else:
37
+ shapes.append('unknown rank')
10
38
 
39
+ return shapes
11
40
 
12
- @dataclass(frozen=True)
13
- class SonusAIMetaData:
14
- input_shape: list[int]
15
- output_shape: list[int]
16
- flattened: bool
17
- timestep: bool
18
- channel: bool
19
- mutex: bool
20
- feature: str
21
41
 
42
+ def get_and_check_inputs(model: ModelProto) -> tuple[list[ValueInfoProto], list[list[int] | str]]:
43
+ from sonusai import logger
22
44
 
23
- def get_and_check_inputs(model: onnx.ModelProto) -> tuple[list[ValueInfoProto], list[list[int] | str]]:
24
- # ignore initializer inputs (only seen in older onnx < v1.5
45
+ # ignore initializer inputs (only seen in older ONNX < v1.5)
25
46
  initializer_names = [x.name for x in model.graph.initializer]
26
- onnx_inputs = [ipt for ipt in model.graph.input if ipt.name not in initializer_names]
27
- if len(onnx_inputs) != 1:
28
- logger.warning(f'Warning: onnx model does not have 1 input, but {len(onnx_inputs)}')
29
- #raise SystemExit(1)
30
-
31
- inshapes = []
32
- for inp in onnx_inputs: # iterate through inputs of the graph to find shapes
33
- tensor_type = inp.type.tensor_type # get tensor type: 0, 1, 2,
34
- if (tensor_type.HasField("shape")): # check if it has a shape:
35
- tmpshape = []
36
- for d in tensor_type.shape.dim: # iterate through dimensions of the shape
37
- if (d.HasField("dim_value")): # known dimension, int value
38
- tmpshape.append(d.dim_value)
39
- elif (d.HasField("dim_param")): # dynamic dim with symbolic name of d.dim_param
40
- tmpshape.append(0) # set size to 0
41
- else: # unknown dimension with no name
42
- tmpshape.append(0) # also set to 0
43
- inshapes.append(tmpshape) # add as a list
44
- else:
45
- inshapes.append("unknown rank")
47
+ inputs = [i for i in model.graph.input if i.name not in initializer_names]
48
+ if len(inputs) != 1:
49
+ logger.warning(f'Warning: ONNX model has {len(inputs)} inputs; expected only 1')
46
50
 
47
51
  # This one-liner works only if input has type and shape, returns a list
48
- #in0shape = [d.dim_value for d in onnx_inputs[0].type.tensor_type.shape.dim]
49
-
50
- return onnx_inputs, inshapes
51
-
52
-
53
- def get_and_check_outputs(model: onnx.ModelProto) -> tuple[list[ValueInfoProto], list[list[int | Any] | str]]:
54
- onnx_outputs = [opt for opt in model.graph.output]
55
- if len(onnx_outputs) != 1:
56
- logger.warning(f'Warning: onnx model does not have 1 output, but {len(onnx_outputs)}')
57
-
58
- oshapes = []
59
- for inp in onnx_outputs: # iterate through inputs of the graph to find shapes
60
- tensor_type = inp.type.tensor_type # get tensor type: 0, 1, 2,
61
- if (tensor_type.HasField("shape")): # check if it has a shape:
62
- tmpshape = []
63
- for d in tensor_type.shape.dim: # iterate through dimensions of the shape
64
- if (d.HasField("dim_value")): # known dimension, int value
65
- tmpshape.append(d.dim_value)
66
- elif (d.HasField("dim_param")): # dynamic dim with symbolic name of d.dim_param
67
- tmpshape.append(0) # set size to 0
68
- else: # unknown dimension with no name
69
- tmpshape.append(0) # also set to 0
70
- oshapes.append(tmpshape) # add as a list
71
- else:
72
- oshapes.append("unknown rank")
52
+ # shape0 = [d.dim_value for d in inputs[0].type.tensor_type.shape.dim]
53
+ shapes = _extract_shapes(inputs)
54
+
55
+ return inputs, shapes
56
+
57
+
58
+ def get_and_check_outputs(model: ModelProto) -> tuple[list[ValueInfoProto], list[list[int] | str]]:
59
+ from sonusai import logger
60
+
61
+ outputs = [o for o in model.graph.output]
62
+ if len(outputs) != 1:
63
+ logger.warning(f'Warning: ONNX model has {len(outputs)} outputs; expected only 1')
73
64
 
74
- return onnx_outputs, oshapes
65
+ shapes = _extract_shapes(outputs)
75
66
 
67
+ return outputs, shapes
76
68
 
77
- def add_sonusai_metadata(model, hparams):
78
- """Add SonusAI hyper-parameter metadata to an ONNX model using key hparams
69
+
70
+ def add_sonusai_metadata(model: ModelProto, hparams: dict) -> ModelProto:
71
+ """Add SonusAI hyperparameters as metadata to an ONNX model using 'hparams' key
79
72
 
80
73
  :param model: ONNX model
81
- :hparams: dictionary of hyper-parameters, added
74
+ :param hparams: dictionary of hyperparameters to add
75
+ :return: ONNX model
76
+
82
77
  Note SonusAI conventions require models to have:
83
- - feature: Model feature type
84
- - is_flattened: Model input feature data is flattened (stride + bins combined)
85
- - timesteps: Size of timestep dimension (0 for no dimension)
86
- - add1ch: Model input has channel dimension
87
- - truth_mutex: Model label output is mutually exclusive
78
+ feature: Model feature type
79
+ batch_size: Model batch size
80
+ timesteps: Size of timestep dimension (0 for no dimension)
81
+ flatten: Model input feature data is flattened (stride + bins combined)
82
+ add1ch: Model input has channel dimension
83
+ truth_mutex: Model label output is mutually exclusive
88
84
  """
85
+ from sonusai import logger
86
+
87
+ # Note hparams should be a dict (i.e., extracted from checkpoint)
88
+ assert eval(str(hparams)) == hparams
89
+ for key in REQUIRED_HPARAMS:
90
+ if key not in hparams.keys():
91
+ logger.warning(f'Warning: SonusAI hyperparameters are missing: {key}')
89
92
 
90
- # Add hyper-parameters as metadata in onnx model under hparams key
91
- assert eval(str(hparams)) == hparams # Note hparams should be a dict (i.e. extracted from checkpoint)
92
93
  meta = model.metadata_props.add()
93
- meta.key = "hparams"
94
+ meta.key = 'hparams'
94
95
  meta.value = str(hparams)
95
96
 
96
97
  return model
97
98
 
98
99
 
99
- def get_sonusai_metadata(session: InferenceSession) -> SonusAIMetaData:
100
- """Get SonusAI hyper-parameter metadata from an ONNX Runtime session.
101
- Returns dictionary hparams
100
+ def get_sonusai_metadata(session: InferenceSession) -> Optional[dict]:
101
+ """Get SonusAI hyperparameter metadata from an ONNX Runtime session.
102
102
  """
103
+ from sonusai import logger
104
+
103
105
  meta = session.get_modelmeta()
104
- hparams = eval(meta.custom_metadata_map["hparams"])
106
+ if 'hparams' not in meta.custom_metadata_map.keys():
107
+ logger.warning("Warning: ONNX model metadata does not contain 'hparams'")
108
+ return None
105
109
 
106
- # m = model.get_modelmeta().custom_metadata_map
107
- # return SonusAIMetaData(input_shape=model.get_inputs()[0].shape,
108
- # output_shape=model.get_outputs()[0].shape,
109
- # flattened=m['is_flattened'] == 'True',
110
- # timestep=m['has_timestep'] == 'True',
111
- # channel=m['has_channel'] == 'True',
112
- # mutex=m['is_mutex'] == 'True',
113
- # feature=m['feature'])
110
+ hparams = eval(meta.custom_metadata_map['hparams'])
111
+ for key in REQUIRED_HPARAMS:
112
+ if key not in hparams.keys():
113
+ logger.warning(f'Warning: ONNX model does not have required SonusAI hyperparameters: {key}')
114
114
 
115
115
  return hparams
116
116
 
117
- def load_ort_session(model_path, providers=['CPUExecutionProvider']):
117
+
118
+ def load_ort_session(model_path: str, providers: Sequence[str | tuple[str, dict]] = None) -> tuple[
119
+ InferenceSession, SessionOptions, str, dict, list[NodeArg], list[NodeArg]]:
120
+ from os.path import basename
121
+ from os.path import exists
122
+ from os.path import isfile
123
+ from os.path import splitext
124
+
125
+ import onnxruntime as ort
126
+
127
+ from sonusai import logger
128
+
129
+ if providers is None:
130
+ providers = ['CPUExecutionProvider']
131
+
118
132
  if exists(model_path) and isfile(model_path):
119
133
  model_basename = basename(model_path)
120
134
  model_root = splitext(model_basename)[0]
@@ -123,32 +137,22 @@ def load_ort_session(model_path, providers=['CPUExecutionProvider']):
123
137
  session = ort.InferenceSession(model_path, providers=providers)
124
138
  options = ort.SessionOptions()
125
139
  except Exception as e:
126
- logger.exception(f'Error: could not load onnx model from {model_path}: {e}')
140
+ logger.exception(f'Error: could not load ONNX model from {model_path}: {e}')
127
141
  raise SystemExit(1)
128
142
  else:
129
143
  logger.exception(f'Error: model file does not exist: {model_path}')
130
144
  raise SystemExit(1)
131
145
 
132
146
  logger.info(f'Opened session with provider options: {session._provider_options}.')
133
- try:
134
- meta = session.get_modelmeta()
135
- hparams = eval(meta.custom_metadata_map["hparams"])
136
- logger.info(f'Sonusai hyper-parameter metadata was found in model with {len(hparams)} parameters, '
137
- f'checking for required ones ...')
138
- # Print to log here will fail if required parameters not available.
139
- logger.info(f'feature {hparams["feature"]}')
140
- logger.info(f'batch_size {hparams["batch_size"]}')
141
- logger.info(f'timesteps {hparams["timesteps"]}')
142
- logger.info(f'flatten, add1ch {hparams["flatten"]}, {hparams["add1ch"]}')
143
- logger.info(f'truth_mutex {hparams["truth_mutex"]}')
144
- except:
145
- hparams = None
146
- logger.warning(f'Warning: onnx model does not have required SonusAI hyper-parameters.')
147
+ hparams = get_sonusai_metadata(session)
148
+ if hparams is not None:
149
+ for key in REQUIRED_HPARAMS:
150
+ logger.info(f' {key:12} {hparams[key]}')
147
151
 
148
152
  inputs = session.get_inputs()
149
153
  outputs = session.get_outputs()
150
154
 
151
- #in_names = [n.name for n in session.get_inputs()]
152
- #out_names = [n.name for n in session.get_outputs()]
155
+ # in_names = [n.name for n in session.get_inputs()]
156
+ # out_names = [n.name for n in session.get_outputs()]
153
157
 
154
- return session, options, model_root, hparams, inputs, outputs
158
+ return session, options, model_root, hparams, inputs, outputs
@@ -0,0 +1,7 @@
1
+ from dataclasses import dataclass
2
+
3
+
4
+ @dataclass(frozen=True)
5
+ class PathInfo:
6
+ abs_path: str
7
+ audio_filepath: str
@@ -2,8 +2,8 @@ from sonusai.mixture.constants import SAMPLE_RATE
2
2
  from sonusai.mixture.datatypes import AudioT
3
3
 
4
4
 
5
- def write_wav(name: str, audio: AudioT, sample_rate: int = SAMPLE_RATE) -> None:
6
- """ Write a simple, uncompressed WAV file.
5
+ def write_audio(name: str, audio: AudioT, sample_rate: int = SAMPLE_RATE) -> None:
6
+ """ Write an audio file.
7
7
 
8
8
  To write multiple channels, use a 2D array of shape [channels, samples].
9
9
  The bits per sample and PCM/float are determined by the data type.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sonusai
3
- Version: 0.17.0
3
+ Version: 0.17.3
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
@@ -21,11 +21,13 @@ Requires-Dist: h5py (>=3.11.0,<4.0.0)
21
21
  Requires-Dist: jiwer (>=3.0.3,<4.0.0)
22
22
  Requires-Dist: librosa (>=0.10.1,<0.11.0)
23
23
  Requires-Dist: matplotlib (>=3.8.0,<4.0.0)
24
+ Requires-Dist: numpy (>=1.26.4,<2.0.0)
24
25
  Requires-Dist: onnx (>=1.14.1,<2.0.0)
25
26
  Requires-Dist: onnxruntime (>=1.16.1,<2.0.0)
26
27
  Requires-Dist: paho-mqtt (>=2.0.0,<3.0.0)
27
28
  Requires-Dist: pandas (>=2.1.1,<3.0.0)
28
29
  Requires-Dist: pesq (>=0.0.4,<0.0.5)
30
+ Requires-Dist: praatio (>=6.2.0,<7.0.0)
29
31
  Requires-Dist: pyaaware (>=1.5.7,<2.0.0)
30
32
  Requires-Dist: pyaudio (>=0.2.14,<0.3.0)
31
33
  Requires-Dist: pydub (>=0.25.1,<0.26.0)
@@ -1,14 +1,13 @@
1
1
  sonusai/__init__.py,sha256=vzTFfRB-NeO-Sm3puySDJOybk3ND_Oj6w0EejQPmH1U,2978
2
2
  sonusai/aawscd_probwrite.py,sha256=GukR5owp_0A3DrqSl9fHWULYgclNft4D5OkHIwfxxkc,3698
3
- sonusai/audiofe.py,sha256=yPtbxeRAzlnPcRESXKNVexvIm6fM4WVxEHjd0w9n5O0,12455
4
- sonusai/calc_metric_spenh-save.py,sha256=-LR5BtAnYNYKav1B2ZsB7gGevidCsQ91yFEaH8Ycyr8,61765
5
- sonusai/calc_metric_spenh.py,sha256=_92RWCyxAf7_S61L5oX6o4GuvuOCDKn7BPg7pB0r1kY,61836
3
+ sonusai/audiofe.py,sha256=zOySiYs5ZZm60eMbA7RjhG6C0Ouhaii3WfL1d0Q8rxg,11154
4
+ sonusai/calc_metric_spenh.py,sha256=0UvJibVjjoHTty3QFh0qzugXe-LvIj2XsMwoaIR44BM,62171
6
5
  sonusai/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
6
  sonusai/data/genmixdb.yml,sha256=-XSs_hUR6wHJVoTPmSewzXL7u61X-xmHY46lNPatxSE,1025
8
7
  sonusai/data/speech_ma01_01.wav,sha256=PK0vMKg-NR6rPE3KouxHGF6PKXnJCr7AwjMqfu98LUA,76644
9
8
  sonusai/data/whitenoise.wav,sha256=I2umov0m34y56F9IsIBi1XtE76ZeZaSKDf70cJRe3pI,1920044
10
9
  sonusai/doc/__init__.py,sha256=rP5Hgn0Iys_xkuv4caxngdqehuU4zLZsiKuv8Nde67M,19
11
- sonusai/doc/doc.py,sha256=3z210v6ZckuOlsGZ3ySQBdlCNmBp2M1ahqhqG_eUN58,22664
10
+ sonusai/doc/doc.py,sha256=4NEZ2K-hTk7Y1Gxx09UEjNhiYkD9xid-kJ1Nt8H5_gM,22670
12
11
  sonusai/doc.py,sha256=l8CaFgLI8mqx4tn0aXfxKqa2dy9GgC0zjYxZAkpmi1E,878
13
12
  sonusai/genft.py,sha256=OzET3iTE-QhrUckzidfZvCDXZlAxIF5Xe5NEf856Vvk,5662
14
13
  sonusai/genmix.py,sha256=TU5aTebGHsbfwsRbynYbegGBelSma9khuQkDk0dFE3I,7075
@@ -29,28 +28,29 @@ sonusai/metrics/class_summary.py,sha256=4Mb25nuk6eqotnQSFMuOQL3zofGcpNXDfDlPa513
29
28
  sonusai/metrics/confusion_matrix_summary.py,sha256=3qg6TMKjJeHtNjj2YnNjPFSlMrQXt0Zcu1dLkGB_aPU,4001
30
29
  sonusai/metrics/one_hot.py,sha256=QSeH_GdqBpOAKLrNnQ8gjcPC-vSdUqC0yPEQueTA6VI,13548
31
30
  sonusai/metrics/snr_summary.py,sha256=P4U5_Xr7v9F8kF-rZBnpsVNt3p42rIVS6zmch8yfVfg,5575
32
- sonusai/mixture/__init__.py,sha256=BfSJL91URq8-JDlbtpc5SQoQRWEUXvxKozbuquX4Mok,5326
33
- sonusai/mixture/audio.py,sha256=S-ZROf5rVvwv1TCEuwJHz1FfX4oVubb4QhbybUMMqtM,2150
31
+ sonusai/mixture/__init__.py,sha256=yszEbRnlxeZXSegEBUVwyrSZwNIl6ufaJu_NiZ-1rqY,5399
32
+ sonusai/mixture/audio.py,sha256=2lqy0DtTMTYhX4aAOIvVtLNn6QB5ivTa7cJIaAlbfAg,2385
34
33
  sonusai/mixture/augmentation.py,sha256=Blb90tdTwBOj5w9tRcYyS5H67YJuFiXsGqwZWd7ON4g,10468
35
34
  sonusai/mixture/class_count.py,sha256=_wFnVl2yEOnbor7pLg7cYOUeX6nioov-03Cv3SEbh2k,996
36
35
  sonusai/mixture/config.py,sha256=d2IzZ1samHWGMpoKzSmUwMyAWWhgmyNoxyO8oiUwbsg,22193
37
36
  sonusai/mixture/constants.py,sha256=xjCskcQi6khqYZDf7j6z1OkeN1C6wE06kBBapcJiNI4,1428
38
- sonusai/mixture/datatypes.py,sha256=zaxfOHw8ddt-i8JPYOPnlqWz_EHBEDoO4q2VAqJViHM,8173
37
+ sonusai/mixture/datatypes.py,sha256=mMNxtzyDvAmtuoTHVVJP7jBi6OH-QyC1NfC_ZIiuLlY,8440
39
38
  sonusai/mixture/eq_rule_is_valid.py,sha256=MpQwRA5M76wSiQWEI1lW2cLFdPaMttBLcQp3tWD8efM,1243
40
39
  sonusai/mixture/feature.py,sha256=Rwuf82IoXzhHPGbKYVGcatImF_ssBf_FfvbqghVPXtg,4116
41
40
  sonusai/mixture/generation.py,sha256=miUrc3QOSUNIG6mDkiMCZ6M2ulivUZxlYUAJUOVomWc,39039
42
41
  sonusai/mixture/helpers.py,sha256=GSGSD2KnvOeEIB6IwNTxyaQNjghTSBMB729kUEd_RiM,22403
43
42
  sonusai/mixture/log_duration_and_sizes.py,sha256=baTUpqyM15wA125jo9E3posmVJUe3WlpksyO6v9Jul0,1347
44
43
  sonusai/mixture/mapped_snr_f.py,sha256=mlbYM1t14OXe_Zg4CjpWTuA_Zun4W0O3bSUXeodRBQs,1845
45
- sonusai/mixture/mixdb.py,sha256=9Pe0mEG8pnEf9NZynTIldc05GfdOrgmcVoIt63RG5DA,45279
46
- sonusai/mixture/soundfile_audio.py,sha256=Ow_IWIMz4pMsLxMP_JsQ8AuHLCWlYQinLa58CFW97f8,2804
44
+ sonusai/mixture/mixdb.py,sha256=zfBaVOuMKHTDzmwR4hWRpGxFwnV_fJkwLDmn9M1SDds,49791
45
+ sonusai/mixture/soundfile_audio.py,sha256=mHa5SIXsu_uE0j3DO52GydRJrvWSzU_nII-7YJfQ6Qo,4154
47
46
  sonusai/mixture/sox_audio.py,sha256=HT3kYA9TP5QPCuoOJdUMnGVN-qY6q96DGL8zxuog76o,12277
48
- sonusai/mixture/sox_augmentation.py,sha256=F9tBdNvX2guCn7gRppAFrxRnBtjw9q6qAq2_v_A4hh0,4490
47
+ sonusai/mixture/sox_augmentation.py,sha256=kBWPrsFk0EBi71nLcKt5v0GA34bY7g9D9x0cEamNWbU,4564
48
+ sonusai/mixture/speaker_metadata.py,sha256=l98avdxLYUsSDZ88xUjfvHnACkbnD0_Dg1aBGDbzS9I,1380
49
49
  sonusai/mixture/spectral_mask.py,sha256=8AkCwhy-PSdP1Uri9miKZP-bXFYnFcH_c9xZCGrHavU,2071
50
50
  sonusai/mixture/target_class_balancing.py,sha256=NTNiKZH0_PWLooeow0l41CjJKK8ZTMVbUqz9ZkaNtWk,4900
51
51
  sonusai/mixture/targets.py,sha256=wyy5vhLhuN-hqBMBGoziVvEJg3FKFvJFgmEE7_LaV2M,7908
52
52
  sonusai/mixture/tokenized_shell_vars.py,sha256=gCxw8SQUcal6mqWKF7hOBTgSQmbJUk1nT0Gn3H8GA0U,4705
53
- sonusai/mixture/torchaudio_audio.py,sha256=qeYlW2G1q47Dml_Lf12Y9L5C0evo-heGw1NT470ZhGo,2395
53
+ sonusai/mixture/torchaudio_audio.py,sha256=KhHeOMsjmbwOaAcoKD61aFvYBYSlA8OysfT5iGn45MA,3010
54
54
  sonusai/mixture/torchaudio_augmentation.py,sha256=1vEDHI0caL1vrgoY2lAWe4CiHE2jKRuKKH7x23GHw0w,4390
55
55
  sonusai/mixture/truth.py,sha256=Y41pZ52Xkols9LUler0NlgnilUOscBIucmw4GcxXNzU,1612
56
56
  sonusai/mixture/truth_functions/__init__.py,sha256=82lKYHhLy8KW3gHngrocoqwupGVLVsWdIXdYs3vhjOc,359
@@ -61,32 +61,36 @@ sonusai/mixture/truth_functions/file.py,sha256=jOJuC_3y9BH6GGOp9eKcbVrHLVRzUA80B
61
61
  sonusai/mixture/truth_functions/phoneme.py,sha256=stYdlPuNytQK_LLT61OJLfYSqKd-sDjQZdtJKGzt5wA,479
62
62
  sonusai/mixture/truth_functions/sed.py,sha256=8cHjEFjZaH_0hIOHhPmj4AJz2GpEADM6Ys2x4NoiWSY,2469
63
63
  sonusai/mixture/truth_functions/target.py,sha256=KAsjugDRooOA5BRcHVAbZRgV7l8S5CFg7CZ0XtKZaQ0,5764
64
- sonusai/mkmanifest.py,sha256=7lfK7YOdgAEP_Lxrf-YDxZ5iLH9MJuaOltBVpav2M9M,8705
65
- sonusai/mkwav.py,sha256=kLfC2ZuF-t8P97nqYw2falTZpymxAeXv0YTJCe6nK10,5356
66
- sonusai/onnx_predict-old.py,sha256=Bz_pR28oAZBarNajlKwyzBxmW7ktum77SmxDN2onKPM,9060
67
- sonusai/onnx_predict-save.py,sha256=ewiV5-HcW5zcDWuIF9xEbdBwbdL8vNWfu2_kaur5jAo,22354
68
- sonusai/onnx_predict.py,sha256=-ETvGH7fHXjnmY-c2r_8gOHEX1VSLwdSToZ6gSBP3_w,23021
69
- sonusai/ovino_predict.py,sha256=QtWY_YEdaeqJL5yikfeeDwhbBtjXYjGNtR9310PGGSc,21830
70
- sonusai/ovino_query_devices.py,sha256=XkXdOlZldI0MfG6nXZfTq8OgECaY8gAzQl36sJRuaIU,1584
64
+ sonusai/mkmanifest.py,sha256=imI8swwPYVzumrUYEL-9JLvun-ez98PtlUBj2b729k8,8682
65
+ sonusai/mkwav.py,sha256=zfSyIiQTIK3KV9Ij33jkLhhZIMVYqaROcRQ4S7c4sIo,5364
66
+ sonusai/onnx_predict.py,sha256=jSxhD2oFyGSTHOGCXbW4fRT-k4SqKOboK2JaDO-yWcs,8737
71
67
  sonusai/plot.py,sha256=ERkmxMM3qjcCDm4LGDQY4fRAncCYAzP7uW8iZ7_brcg,17105
72
- sonusai/post_spenh_targetf.py,sha256=xOz5T6WZuyTHmfbtILIY9skgH064Wvi2GF2Bo5L3YMU,4998
68
+ sonusai/post_spenh_targetf.py,sha256=pHaJZtms7aj4r6sgqQnEGVi6Gg8H_V29szigogV1vZ8,5002
73
69
  sonusai/queries/__init__.py,sha256=oKY5JeqZ4Cz7DwCwPc1_ydB8bUs6KaMcWFp_w02TjOs,255
74
- sonusai/queries/queries.py,sha256=FNMUKnoY_Ya9S5sNhsB8ppwy0B7V55ilbbjhQRv_UN8,7552
70
+ sonusai/queries/queries.py,sha256=oV-m9uiLZOwYTK-Wo7Gf8dpGisaoGf6uDsAJAarVqZI,7553
71
+ sonusai/speech/__init__.py,sha256=SuPcU_K9wQISsZRIzsRNLtEC6cb616l-Jlx3PU-HWMs,113
72
+ sonusai/speech/l2arctic.py,sha256=28TT3CohvPu98YNUb8O7rWHAYgPGwYTOLSdfNQjOuyc,3736
73
+ sonusai/speech/librispeech.py,sha256=A0IpamojCPXyJiHcjCtI7yNWdMjB00cbggjHslssrg8,3120
74
+ sonusai/speech/mcgill.py,sha256=jcddj64fLdV3sO6CJNafm3w-2SnYoyQtU90odXhdaaE,1976
75
+ sonusai/speech/textgrid.py,sha256=8hB6SdEEXxo6JXVFq8mJ1-ilRbBiRXhaHTQjA-HWg-0,3385
76
+ sonusai/speech/timit.py,sha256=1vWgj6isD3ATOjMJSTjOPLmDkYyB65M5MwYipEmLEvg,4081
77
+ sonusai/speech/types.py,sha256=4eKVPAktpkIrZ2qoVp2iT45zxTVNocQEGT6O_Zlub_w,214
78
+ sonusai/speech/vctk.py,sha256=EAMEBAzjZUI6dw15n-yI2oCN-H4tzM9t4aUVlOxpAbo,1540
79
+ sonusai/speech/voxceleb.py,sha256=aJGN0yDb2LFLmCKmRzmUEjpZWQ-QGWw6XWOpy9967AI,2686
75
80
  sonusai/summarize_metric_spenh.py,sha256=OiZe_bhCq5esXNhsOkHDD7g4ssYrpENDHvDVoPzV9iw,1822
76
- sonusai/torchl_onnx-old.py,sha256=5JYow3XpBaUdtuyAW0mOZyCKL_4FrHvEekYBRdDT6KA,8967
77
81
  sonusai/tplot.py,sha256=85T6OPZfxVegHBiSuilFpdgCNMEE0VKAuciNy4rCY5Y,14544
78
- sonusai/utils/__init__.py,sha256=TCXlcW8W0Up2f5ciSgz3DabvH1MxrrWD0LK6pQTJkeA,2215
82
+ sonusai/utils/__init__.py,sha256=h7QrOyEBMUMoIBFKZpNwDG8Jg-1uw3bs-qflB3CXxhU,2257
79
83
  sonusai/utils/asl_p56.py,sha256=-bvQpd-jRQVURbkZJpRoyEAq6gTv9Rc3oFDbh5_lcjY,3861
80
84
  sonusai/utils/asr.py,sha256=6y6VYJizHpuQ3MgKbEQ4t2gofO-MW6Ez23oAd6d23IE,2920
81
85
  sonusai/utils/asr_functions/__init__.py,sha256=JyHK67s97bw7QzrlkboWhws4yNytdPatqzLJxfwx-yw,43
82
- sonusai/utils/asr_functions/aaware_whisper.py,sha256=LzO9CZV0wBWkjmCR2nSWN_AW9UJwriAsC1OYSlfVeT8,1981
83
- sonusai/utils/asr_manifest_functions/__init__.py,sha256=V-w4R7SHUyoeDuMR3tS12j6DGhmfTlUibMKgq1c6ga0,370
84
- sonusai/utils/asr_manifest_functions/data.py,sha256=mJsaHccBReguOJu9qsshRhL-3GbeyqM0-PXMseFnZbE,151
85
- sonusai/utils/asr_manifest_functions/librispeech.py,sha256=HIaytcYmjRUkuR6fCQlv3Jh3IDWSox_A6WFcFFAHN9M,1635
86
- sonusai/utils/asr_manifest_functions/mcgill_speech.py,sha256=2uF9qgBwcue9W9dlRo16Kvr3jX5g53AGjW2rwob-Cqk,957
87
- sonusai/utils/asr_manifest_functions/vctk_noisy_speech.py,sha256=-69lM0dz18KbU5_-dmSeqDoNNwgJj4UlxgGkNBEi3wM,2169
86
+ sonusai/utils/asr_functions/aaware_whisper.py,sha256=Ew3zb8OfbxEW7q1s-KA7D5eph4SjVSUAJgiLK-vVqhI,1985
87
+ sonusai/utils/asr_manifest_functions/__init__.py,sha256=jfi9xC5c86F_aMSsI5Xj-pxWGxuQ7fwZ8Wdf4T7kDsA,343
88
+ sonusai/utils/asr_manifest_functions/data.py,sha256=nO4oT3EQmydwn1pzc-ZM09yz4X2ic-LQuHzGEnJhKe8,32
89
+ sonusai/utils/asr_manifest_functions/librispeech.py,sha256=_3tGc8qfAUpYJZ0_avpW0vGp7zjdpeqj1HAgXi3TL4Q,1612
90
+ sonusai/utils/asr_manifest_functions/mcgill_speech.py,sha256=dW-5XTC5xOY3PHU2DvlWNWDeoprXDD0Zq2dXDdPAjzE,934
91
+ sonusai/utils/asr_manifest_functions/vctk_noisy_speech.py,sha256=9iMrnE-qabLMnyewyxsBMl0uCS8yS7BPJOdmUoOnGAc,2146
88
92
  sonusai/utils/audio_devices.py,sha256=LgaXTln1oRArBzaet3rZiIO2plgtaThuGBc3sJ_sLlo,1414
89
- sonusai/utils/braced_glob.py,sha256=h4hab7YDbM4CjLg9iSzyHZrkd22IPUOY5zZqHdifkh8,1510
93
+ sonusai/utils/braced_glob.py,sha256=Z_XIpPK17QiP1JbzAnUC5w3oyG8ZovoyM22Wh-Q_vWU,1675
90
94
  sonusai/utils/calculate_input_shape.py,sha256=63ILxibYKuTQozY83QN8Y2OOhBEbW_1X47Q0askcHDM,984
91
95
  sonusai/utils/convert_string_to_number.py,sha256=i17yIxurp8Iz6NPE-imTRlARrXWqadwm8qbOTuzHZvE,236
92
96
  sonusai/utils/create_timestamp.py,sha256=TxoQXWZ3SFdBEHLOv-ujeIsTEJuiFnKOGRy-FQq45YU,148
@@ -103,8 +107,9 @@ sonusai/utils/human_readable_size.py,sha256=SjYT0fUlpbfCzCXHo6csir-VMwqfs5ogr-fg
103
107
  sonusai/utils/max_text_width.py,sha256=pxiJMwb_zlkNntexgo7S6lAuF7NLLZvFdOCkxdsQJVY,315
104
108
  sonusai/utils/model_utils.py,sha256=lt2KOGJqsinG71W0i3U29UXFO-47GMAlEabsf2um7bA,862
105
109
  sonusai/utils/numeric_conversion.py,sha256=GRO_2Fba8CcxcFY7bEXKOEUEUX6neA-VN__Bxi1ULsE,340
106
- sonusai/utils/onnx_utils.py,sha256=L0BcwF0or1UwxYWzvWNWNJHKvG_oEmI2AxYh4msp2vc,6862
110
+ sonusai/utils/onnx_utils.py,sha256=nh2dUDeuERto-0NnTwZ3a6YKKcZFbZjqLLBVzN2l0IU,5682
107
111
  sonusai/utils/parallel.py,sha256=bxedjCzBv9oxzU7NajRr6mOKmkCWr2P7FWAI0p2p9N8,1981
112
+ sonusai/utils/path_info.py,sha256=QY7iQ0nYpeEDnPN9RyPh4DsgYmVYsLrrlAzKuzkqX1o,118
108
113
  sonusai/utils/print_mixture_details.py,sha256=BzYM4-wHHNa6zxPzBMUJxwKt0gKHmvbwdd7Yp0w15Yk,3017
109
114
  sonusai/utils/ranges.py,sha256=NPBZOVzMb95GTOIxltVO-wSzgcXqZ14wbdV46JDLKrw,1222
110
115
  sonusai/utils/read_mixture_data.py,sha256=Sb30RgSpw6DnH_iD81O7G_KOsdfjQWWLk3euEkxfMa8,453
@@ -113,10 +118,10 @@ sonusai/utils/reshape.py,sha256=E8Eu6grynaeWwVO6peIR0BF22SrVaJSa1Rkl109lq6Y,5997
113
118
  sonusai/utils/seconds_to_hms.py,sha256=oxLuZhTJJr9swj-fOSOrZJ5vBNM7_BrOMQhX1pYpiv0,260
114
119
  sonusai/utils/stacked_complex.py,sha256=feLhz3GC1ILxBGMHOj3sJK--sidsXKbfwkalwAVwizc,2950
115
120
  sonusai/utils/stratified_shuffle_split.py,sha256=rJNXvBp-GxoKzH3OpL7k0ANSu5xMP2zJ7K1fm_33UzE,7022
116
- sonusai/utils/wave.py,sha256=O4ZXkZ6wjrKGa99wBCdFd8G6bp91MXXDnmGihpaEMh0,856
121
+ sonusai/utils/write_audio.py,sha256=ZsPGExwM86QHLLN2LOWekK2uAqf5pV_1oRW811p0QAI,840
117
122
  sonusai/utils/yes_or_no.py,sha256=eMLXBVH0cEahiXY4W2KNORmwNQ-ba10eRtldh0y4NYg,263
118
123
  sonusai/vars.py,sha256=m2AefF0m5bXWGXpJj8Pi42zWL2ydeEj7bkak3GrtMyM,940
119
- sonusai-0.17.0.dist-info/METADATA,sha256=wn6MaT5JXlVzp45_huLIAnJeH04kQZm8r0_vWiDX3LU,2443
120
- sonusai-0.17.0.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
121
- sonusai-0.17.0.dist-info/entry_points.txt,sha256=zMNjEphEPO6B3cD1GNpit7z-yA9tUU5-j3W2v-UWstU,92
122
- sonusai-0.17.0.dist-info/RECORD,,
124
+ sonusai-0.17.3.dist-info/METADATA,sha256=Zu3DK9fCT1xiipWOBY4JhUZJ3qm1cVRc5eLAXonDb2s,2522
125
+ sonusai-0.17.3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
126
+ sonusai-0.17.3.dist-info/entry_points.txt,sha256=zMNjEphEPO6B3cD1GNpit7z-yA9tUU5-j3W2v-UWstU,92
127
+ sonusai-0.17.3.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.8.1
2
+ Generator: poetry-core 1.9.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any