modusa 0.2.23__py3-none-any.whl → 0.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.
- modusa/.DS_Store +0 -0
- modusa/__init__.py +8 -1
- modusa/devtools/{generate_doc_source.py → generate_docs_source.py} +5 -5
- modusa/devtools/generate_template.py +5 -5
- modusa/devtools/main.py +3 -3
- modusa/devtools/templates/generator.py +1 -1
- modusa/devtools/templates/io.py +1 -1
- modusa/devtools/templates/{signal.py → model.py} +18 -11
- modusa/devtools/templates/plugin.py +1 -1
- modusa/generators/__init__.py +11 -1
- modusa/generators/audio.py +188 -0
- modusa/generators/audio_waveforms.py +1 -1
- modusa/generators/base.py +1 -1
- modusa/generators/ftds.py +298 -0
- modusa/generators/s1d.py +270 -0
- modusa/generators/s2d.py +300 -0
- modusa/generators/s_ax.py +102 -0
- modusa/generators/t_ax.py +64 -0
- modusa/generators/tds.py +267 -0
- modusa/models/__init__.py +14 -0
- modusa/models/__pycache__/signal1D.cpython-312.pyc.4443461152 +0 -0
- modusa/models/audio.py +90 -0
- modusa/models/base.py +70 -0
- modusa/models/data.py +457 -0
- modusa/models/ftds.py +584 -0
- modusa/models/s1d.py +578 -0
- modusa/models/s2d.py +619 -0
- modusa/models/s_ax.py +448 -0
- modusa/models/t_ax.py +335 -0
- modusa/models/tds.py +465 -0
- modusa/plugins/__init__.py +3 -1
- modusa/tmp.py +98 -0
- modusa/tools/__init__.py +5 -0
- modusa/tools/audio_converter.py +56 -67
- modusa/tools/audio_loader.py +90 -0
- modusa/tools/audio_player.py +42 -67
- modusa/tools/math_ops.py +104 -1
- modusa/tools/plotter.py +305 -497
- modusa/tools/youtube_downloader.py +31 -98
- modusa/utils/excp.py +6 -0
- modusa/utils/np_func_cat.py +44 -0
- modusa/utils/plot.py +142 -0
- {modusa-0.2.23.dist-info → modusa-0.3.dist-info}/METADATA +5 -16
- modusa-0.3.dist-info/RECORD +60 -0
- modusa/devtools/docs/source/generators/audio_waveforms.rst +0 -8
- modusa/devtools/docs/source/generators/base.rst +0 -8
- modusa/devtools/docs/source/generators/index.rst +0 -8
- modusa/devtools/docs/source/io/audio_loader.rst +0 -8
- modusa/devtools/docs/source/io/base.rst +0 -8
- modusa/devtools/docs/source/io/index.rst +0 -8
- modusa/devtools/docs/source/plugins/base.rst +0 -8
- modusa/devtools/docs/source/plugins/index.rst +0 -7
- modusa/devtools/docs/source/signals/audio_signal.rst +0 -8
- modusa/devtools/docs/source/signals/base.rst +0 -8
- modusa/devtools/docs/source/signals/frequency_domain_signal.rst +0 -8
- modusa/devtools/docs/source/signals/index.rst +0 -11
- modusa/devtools/docs/source/signals/spectrogram.rst +0 -8
- modusa/devtools/docs/source/signals/time_domain_signal.rst +0 -8
- modusa/devtools/docs/source/tools/audio_converter.rst +0 -8
- modusa/devtools/docs/source/tools/audio_player.rst +0 -8
- modusa/devtools/docs/source/tools/base.rst +0 -8
- modusa/devtools/docs/source/tools/fourier_tranform.rst +0 -8
- modusa/devtools/docs/source/tools/index.rst +0 -13
- modusa/devtools/docs/source/tools/math_ops.rst +0 -8
- modusa/devtools/docs/source/tools/plotter.rst +0 -8
- modusa/devtools/docs/source/tools/youtube_downloader.rst +0 -8
- modusa/io/__init__.py +0 -5
- modusa/io/audio_loader.py +0 -184
- modusa/io/base.py +0 -43
- modusa/signals/__init__.py +0 -3
- modusa/signals/audio_signal.py +0 -540
- modusa/signals/base.py +0 -27
- modusa/signals/frequency_domain_signal.py +0 -376
- modusa/signals/spectrogram.py +0 -564
- modusa/signals/time_domain_signal.py +0 -412
- modusa/tools/fourier_tranform.py +0 -24
- modusa-0.2.23.dist-info/RECORD +0 -70
- {modusa-0.2.23.dist-info → modusa-0.3.dist-info}/WHEEL +0 -0
- {modusa-0.2.23.dist-info → modusa-0.3.dist-info}/entry_points.txt +0 -0
- {modusa-0.2.23.dist-info → modusa-0.3.dist-info}/licenses/LICENSE.md +0 -0
modusa/io/__init__.py
DELETED
modusa/io/audio_loader.py
DELETED
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
|
|
3
|
-
from modusa.io import ModusaIO
|
|
4
|
-
from modusa.signals import AudioSignal
|
|
5
|
-
from modusa.decorators import validate_args_type
|
|
6
|
-
from pathlib import Path
|
|
7
|
-
import tempfile
|
|
8
|
-
import numpy as np
|
|
9
|
-
|
|
10
|
-
class AudioLoader(ModusaIO):
|
|
11
|
-
"""
|
|
12
|
-
Loads audio from various sources like filepath, YouTube, etc.
|
|
13
|
-
|
|
14
|
-
Note
|
|
15
|
-
----
|
|
16
|
-
- All `from_` methods return :class:`~modusa.signals.AudioSignal` instance.
|
|
17
|
-
|
|
18
|
-
"""
|
|
19
|
-
|
|
20
|
-
#--------Meta Information----------
|
|
21
|
-
_name = "Audio Loader"
|
|
22
|
-
_description = "Loads audio from various sources."
|
|
23
|
-
_author_name = "Ankit Anand"
|
|
24
|
-
_author_email = "ankit0.anand0@gmail.com"
|
|
25
|
-
_created_at = "2025-07-05"
|
|
26
|
-
#----------------------------------
|
|
27
|
-
|
|
28
|
-
def __init__(self):
|
|
29
|
-
super().__init__()
|
|
30
|
-
|
|
31
|
-
@staticmethod
|
|
32
|
-
@validate_args_type()
|
|
33
|
-
def from_youtube(url: str, sr: int | None = None) -> "AudioSignal":
|
|
34
|
-
"""
|
|
35
|
-
Loads audio from youtube url using :class:`~modusa.io.YoutubeDownloader`,
|
|
36
|
-
:class:`~modusa.io.AudioConverter` and `librosa`.
|
|
37
|
-
|
|
38
|
-
.. code-block:: python
|
|
39
|
-
|
|
40
|
-
from modusa.io import AudioSignalLoader
|
|
41
|
-
|
|
42
|
-
# From youtube
|
|
43
|
-
audio_signal = AudioSignalLoader.from_youtube(
|
|
44
|
-
url="https://www.youtube.com/watch?v=lIpw9-Y_N0g",
|
|
45
|
-
sr=None
|
|
46
|
-
)
|
|
47
|
-
|
|
48
|
-
PARAMETERS
|
|
49
|
-
----------
|
|
50
|
-
url: str
|
|
51
|
-
Link to the YouTube video.
|
|
52
|
-
sr: int
|
|
53
|
-
Sampling rate to load the audio in.
|
|
54
|
-
|
|
55
|
-
Returns
|
|
56
|
-
-------
|
|
57
|
-
|
|
58
|
-
AudioSignal:
|
|
59
|
-
`Audio signal` instance with loaded audio content from YouTube.
|
|
60
|
-
"""
|
|
61
|
-
|
|
62
|
-
from modusa.tools.youtube_downloader import YoutubeDownloader
|
|
63
|
-
from modusa.tools.audio_converter import AudioConverter
|
|
64
|
-
import librosa
|
|
65
|
-
|
|
66
|
-
# Download the audio in temp directory using tempfile module
|
|
67
|
-
with tempfile.TemporaryDirectory() as tmpdir:
|
|
68
|
-
audio_fp: Path = YoutubeDownloader.download(url=url, content_type="audio", output_dir=Path(tmpdir))
|
|
69
|
-
|
|
70
|
-
# Convert the audio to ".wav" form for loading
|
|
71
|
-
wav_audio_fp: Path = AudioConverter.convert(inp_audio_fp=audio_fp, output_audio_fp=audio_fp.with_suffix(".wav"))
|
|
72
|
-
|
|
73
|
-
# Load the audio in memory and return that
|
|
74
|
-
audio_data, audio_sr = librosa.load(wav_audio_fp, sr=sr)
|
|
75
|
-
|
|
76
|
-
audio = AudioSignal(y=audio_data, sr=audio_sr, title=audio_fp.stem)
|
|
77
|
-
|
|
78
|
-
return audio
|
|
79
|
-
|
|
80
|
-
@staticmethod
|
|
81
|
-
@validate_args_type()
|
|
82
|
-
def from_fp(fp: str | Path, sr: int | None = None) -> AudioSignal:
|
|
83
|
-
"""
|
|
84
|
-
Loads audio from a filepath using `librosa`.
|
|
85
|
-
|
|
86
|
-
.. code-block:: python
|
|
87
|
-
|
|
88
|
-
from modusa.io import AudioSignalLoader
|
|
89
|
-
|
|
90
|
-
# From file
|
|
91
|
-
audio_signal = AudioSignalLoader.from_fp(
|
|
92
|
-
fp="path/to/audio.wav",
|
|
93
|
-
sr=None
|
|
94
|
-
)
|
|
95
|
-
|
|
96
|
-
Parameters
|
|
97
|
-
----------
|
|
98
|
-
fp: str | Path
|
|
99
|
-
Local filepath of the audio.
|
|
100
|
-
sr: int | None
|
|
101
|
-
Sampling rate to load the audio in.
|
|
102
|
-
|
|
103
|
-
Returns
|
|
104
|
-
-------
|
|
105
|
-
AudioSignal
|
|
106
|
-
`Audio signal` instance with loaded audio content from filepath.
|
|
107
|
-
|
|
108
|
-
"""
|
|
109
|
-
import librosa
|
|
110
|
-
import warnings
|
|
111
|
-
warnings.filterwarnings("ignore", message="pkg_resources is deprecated as an API.")
|
|
112
|
-
|
|
113
|
-
fp = Path(fp)
|
|
114
|
-
y, sr = librosa.load(fp, sr=sr)
|
|
115
|
-
|
|
116
|
-
audio_signal = AudioSignal(y=y, sr=sr, title=fp.name)
|
|
117
|
-
|
|
118
|
-
return audio_signal
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
@staticmethod
|
|
122
|
-
def from_array(y: np.ndarray, sr: int) -> AudioSignal:
|
|
123
|
-
"""
|
|
124
|
-
Loads audio with a given sampling rate.
|
|
125
|
-
|
|
126
|
-
.. code-block:: python
|
|
127
|
-
|
|
128
|
-
from modusa.io import AudioSignalLoader
|
|
129
|
-
import numpy as np
|
|
130
|
-
|
|
131
|
-
# From numpy array
|
|
132
|
-
audio_signal = AudioSignalLoader.from_array_with_sr(
|
|
133
|
-
x=np.random.random((100, )),
|
|
134
|
-
sr = 100 # Automatically generates time index
|
|
135
|
-
)
|
|
136
|
-
|
|
137
|
-
Parameters
|
|
138
|
-
----------
|
|
139
|
-
y: np.ndarray
|
|
140
|
-
Data of the audio signal.
|
|
141
|
-
sr: int
|
|
142
|
-
Sampling rate of the audio signal.
|
|
143
|
-
|
|
144
|
-
Returns
|
|
145
|
-
-------
|
|
146
|
-
AudioSignal
|
|
147
|
-
`Audio signal` instance with loaded audio content from sampling rate.
|
|
148
|
-
"""
|
|
149
|
-
|
|
150
|
-
return AudioSignal(y=y, sr=sr)
|
|
151
|
-
|
|
152
|
-
@staticmethod
|
|
153
|
-
def from_list(y: list, t: list) -> AudioSignal:
|
|
154
|
-
"""
|
|
155
|
-
Loads `AudioSignal` instance from python list.
|
|
156
|
-
|
|
157
|
-
.. code-block:: python
|
|
158
|
-
|
|
159
|
-
from modusa.io import AudioSignalLoader
|
|
160
|
-
|
|
161
|
-
# From list
|
|
162
|
-
audio_signal = AudioSignalLoader.from_list(
|
|
163
|
-
y=[1, 2, 3, 2, 3],
|
|
164
|
-
t = [0.1, 0.2, 0.3, 0.4, 0.5]
|
|
165
|
-
)
|
|
166
|
-
|
|
167
|
-
Parameters
|
|
168
|
-
----------
|
|
169
|
-
y: list
|
|
170
|
-
Data of the audio signal.
|
|
171
|
-
t: np.ndarray | None
|
|
172
|
-
Corresponding time stamps of the audio signal.
|
|
173
|
-
|
|
174
|
-
Returns
|
|
175
|
-
-------
|
|
176
|
-
AudioSignal
|
|
177
|
-
`Audio signal` instance with loaded audio content from python list.
|
|
178
|
-
"""
|
|
179
|
-
y = np.array(y)
|
|
180
|
-
t = np.array(t)
|
|
181
|
-
|
|
182
|
-
return AudioSignal(y=y, t=t)
|
|
183
|
-
|
|
184
|
-
|
modusa/io/base.py
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
|
|
3
|
-
from abc import ABC, abstractmethod
|
|
4
|
-
|
|
5
|
-
class ModusaIO(ABC):
|
|
6
|
-
"""
|
|
7
|
-
Base class for all I/O components: loaders, savers, recorders, etc.
|
|
8
|
-
|
|
9
|
-
>>> modusa-dev create io
|
|
10
|
-
|
|
11
|
-
.. code-block:: python
|
|
12
|
-
|
|
13
|
-
# General template of a subclass of ModusaIO
|
|
14
|
-
from modusa.io import ModusaIO
|
|
15
|
-
|
|
16
|
-
class MyCustomIOClass(ModusaIO):
|
|
17
|
-
#--------Meta Information----------
|
|
18
|
-
_name = "My Custom I/O"
|
|
19
|
-
_description = "My custom class for I/O."
|
|
20
|
-
_author_name = "Ankit Anand"
|
|
21
|
-
_author_email = "ankit0.anand0@gmail.com"
|
|
22
|
-
_created_at = "2025-07-06"
|
|
23
|
-
#----------------------------------
|
|
24
|
-
|
|
25
|
-
@staticmethod
|
|
26
|
-
def do_something():
|
|
27
|
-
pass
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
Note
|
|
31
|
-
----
|
|
32
|
-
- This class is intended to be subclassed by any IO related tools built for the modusa framework.
|
|
33
|
-
- In order to create an IO tool, you can use modusa-dev CLI to generate an IO template.
|
|
34
|
-
- It is recommended to treat subclasses of ModusaIO as namespaces and define @staticmethods with control parameters, rather than using instance-level __init__ methods.
|
|
35
|
-
"""
|
|
36
|
-
|
|
37
|
-
#--------Meta Information----------
|
|
38
|
-
_name: str = "Modusa I/O"
|
|
39
|
-
_description: str = "Base class for any I/O in the Modusa framework."
|
|
40
|
-
_author_name = "Ankit Anand"
|
|
41
|
-
_author_email = "ankit0.anand0@gmail.com"
|
|
42
|
-
_created_at = "2025-07-06"
|
|
43
|
-
#----------------------------------
|
modusa/signals/__init__.py
DELETED