audio-spectrogram 0.1.0a1__tar.gz → 0.2.0__tar.gz
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.
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/PKG-INFO +4 -2
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/README.md +1 -1
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/pyproject.toml +4 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/app/application.py +1 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/app/control_panel_handler.py +2 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/app/plot_handler.py +8 -10
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/app/widgets/control_panel_widget.py +14 -2
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram.egg-info/PKG-INFO +4 -2
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/.github/dependabot.yml +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/.github/release.yml +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/.github/workflows/ci.yml +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/.gitignore +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/.pre-commit-config.yaml +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/.python-version +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/.vscode/launch.json +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/LICENSE +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/doc/GUI.png +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/setup.cfg +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/__init__.py +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/__main__.py +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/app/__init__.py +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/app/qapplication.py +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/app/spectrogram.py +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/app/widgets/__init__.py +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/app/widgets/combobox.py +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/app/widgets/main_window.py +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/app/widgets/plot_widget.py +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/app/widgets/power_of_two_spinbox.py +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/util.py +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram.egg-info/SOURCES.txt +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram.egg-info/dependency_links.txt +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram.egg-info/entry_points.txt +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram.egg-info/requires.txt +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram.egg-info/top_level.txt +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/tox.ini +0 -0
- {audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/uv.lock +0 -0
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: audio-spectrogram
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Audio spectrogram app based on PySide6
|
|
5
5
|
Author-email: Artur Drogunow <Artur.Drogunow@zf.com>
|
|
6
6
|
License: GPL-3.0-or-later
|
|
7
|
+
Project-URL: Issues, https://github.com/zariiii9003/audio_spectrogram/issues
|
|
8
|
+
Project-URL: Source, https://github.com/zariiii9003/audio_spectrogram
|
|
7
9
|
Keywords: Audio,Microphone,FFT,STFT,Spectrogram,Sonogram
|
|
8
10
|
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
9
11
|
Classifier: Operating System :: OS Independent
|
|
@@ -32,7 +34,7 @@ Dynamic: license-file
|
|
|
32
34
|
|
|
33
35
|
*Audio Spectrogram* is a small python GUI application to analyze the frequency content of your microphone input.
|
|
34
36
|
|
|
35
|
-
<img src="doc/GUI.png" width="683" alt="GUI Screenshot" />
|
|
37
|
+
<img src="https://raw.githubusercontent.com/zariiii9003/audio_spectrogram/refs/heads/master/doc/GUI.png" width="683" alt="GUI Screenshot" />
|
|
36
38
|
|
|
37
39
|
## Usage
|
|
38
40
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
*Audio Spectrogram* is a small python GUI application to analyze the frequency content of your microphone input.
|
|
9
9
|
|
|
10
|
-
<img src="doc/GUI.png" width="683" alt="GUI Screenshot" />
|
|
10
|
+
<img src="https://raw.githubusercontent.com/zariiii9003/audio_spectrogram/refs/heads/master/doc/GUI.png" width="683" alt="GUI Screenshot" />
|
|
11
11
|
|
|
12
12
|
## Usage
|
|
13
13
|
|
|
@@ -41,6 +41,10 @@ audio-spectrogram-console = "audio_spectrogram.__main__:main"
|
|
|
41
41
|
[project.gui-scripts]
|
|
42
42
|
audio-spectrogram = "audio_spectrogram.__main__:main"
|
|
43
43
|
|
|
44
|
+
[project.urls]
|
|
45
|
+
Issues = "https://github.com/zariiii9003/audio_spectrogram/issues"
|
|
46
|
+
Source = "https://github.com/zariiii9003/audio_spectrogram"
|
|
47
|
+
|
|
44
48
|
[tool.setuptools.packages.find]
|
|
45
49
|
where = ["src"]
|
|
46
50
|
|
{audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/app/application.py
RENAMED
|
@@ -35,6 +35,7 @@ class Application(QObject):
|
|
|
35
35
|
def on_capture_start(self, settings: Settings) -> None:
|
|
36
36
|
LOGGER.info("%s.%s(%s)", self.__class__.__name__, self.on_capture_start.__name__, settings)
|
|
37
37
|
self.plot_handler.start(
|
|
38
|
+
recorded_length=settings.recorded_length_s,
|
|
38
39
|
sample_rate=settings.sample_rate,
|
|
39
40
|
window_size=settings.window_size,
|
|
40
41
|
hop_size=settings.hop_size,
|
|
@@ -15,6 +15,7 @@ from .widgets.control_panel_widget import ControlPanelWidget
|
|
|
15
15
|
|
|
16
16
|
@dataclass
|
|
17
17
|
class Settings:
|
|
18
|
+
recorded_length_s: int # seconds
|
|
18
19
|
sample_rate: int
|
|
19
20
|
window_size: int
|
|
20
21
|
hop_size: int
|
|
@@ -114,6 +115,7 @@ class ControlPanelHandler(QObject):
|
|
|
114
115
|
self.control_panel_widget.set_state(connected=True)
|
|
115
116
|
self.start.emit(
|
|
116
117
|
Settings(
|
|
118
|
+
recorded_length_s=self.control_panel_widget.recorded_length(),
|
|
117
119
|
sample_rate=sample_rate,
|
|
118
120
|
window_size=self.control_panel_widget.window_size(),
|
|
119
121
|
hop_size=self.control_panel_widget.hop_size(),
|
{audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/app/plot_handler.py
RENAMED
|
@@ -17,7 +17,6 @@ class PlotHandler(QObject):
|
|
|
17
17
|
|
|
18
18
|
# variables
|
|
19
19
|
self.configured = False
|
|
20
|
-
self.recording_duration: float = 20.0 # seconds
|
|
21
20
|
self.time_plot_length: int = 1
|
|
22
21
|
self.time_plot_x: npt.NDArray[np.float32] = np.zeros(self.time_plot_length).astype(np.float32)
|
|
23
22
|
self.time_plot_y: npt.NDArray[np.float32] = np.zeros(self.time_plot_length).astype(np.float32)
|
|
@@ -40,20 +39,19 @@ class PlotHandler(QObject):
|
|
|
40
39
|
def _connect_signals(self) -> None:
|
|
41
40
|
pass
|
|
42
41
|
|
|
43
|
-
def start(self, sample_rate: int, window_size: int, hop_size: int) -> None:
|
|
42
|
+
def start(self, recorded_length: int, sample_rate: int, window_size: int, hop_size: int) -> None:
|
|
44
43
|
LOGGER.info(
|
|
45
|
-
"%s.%s(sample_rate=%d, window_size=%d, hop_size=%d)",
|
|
44
|
+
"%s.%s(recorded_length=%d, sample_rate=%d, window_size=%d, hop_size=%d)",
|
|
46
45
|
self.__class__.__name__,
|
|
47
46
|
self.start.__name__,
|
|
47
|
+
recorded_length,
|
|
48
48
|
sample_rate,
|
|
49
49
|
window_size,
|
|
50
50
|
hop_size,
|
|
51
51
|
)
|
|
52
52
|
# configure timeseries
|
|
53
|
-
self.time_plot_length =
|
|
54
|
-
self.time_plot_x = np.linspace(-
|
|
55
|
-
np.float32
|
|
56
|
-
)
|
|
53
|
+
self.time_plot_length = recorded_length * sample_rate
|
|
54
|
+
self.time_plot_x = np.linspace(-recorded_length, 0, self.time_plot_length).astype(np.float32)
|
|
57
55
|
self.time_plot_y = np.zeros(self.time_plot_length).astype(np.float32)
|
|
58
56
|
self.plot_widget.time_plot_item.setData(x=self.time_plot_x, y=self.time_plot_y)
|
|
59
57
|
self.plot_widget.time_plot.setXRange(-0.1, 0)
|
|
@@ -62,13 +60,13 @@ class PlotHandler(QObject):
|
|
|
62
60
|
self.spec_plot_data = SpectrogramData(
|
|
63
61
|
window_size=window_size,
|
|
64
62
|
hop_size=hop_size,
|
|
65
|
-
frame_count=round(
|
|
63
|
+
frame_count=round(recorded_length * sample_rate / hop_size),
|
|
66
64
|
)
|
|
67
65
|
self.plot_widget.spec_plot_item.setImage(self.spec_plot_data.image, autoLevels=False)
|
|
68
66
|
self.plot_widget.spec_plot_item.setRect(
|
|
69
|
-
-
|
|
67
|
+
-recorded_length,
|
|
70
68
|
0,
|
|
71
|
-
|
|
69
|
+
recorded_length,
|
|
72
70
|
sample_rate / 2,
|
|
73
71
|
)
|
|
74
72
|
self.plot_widget.spec_plot.setYRange(0, sample_rate / 2)
|
|
@@ -11,6 +11,9 @@ from PySide6.QtWidgets import (
|
|
|
11
11
|
QHBoxLayout,
|
|
12
12
|
QLabel,
|
|
13
13
|
QPushButton,
|
|
14
|
+
QSizePolicy,
|
|
15
|
+
QSpacerItem,
|
|
16
|
+
QSpinBox,
|
|
14
17
|
QVBoxLayout,
|
|
15
18
|
)
|
|
16
19
|
|
|
@@ -28,6 +31,7 @@ class ControlPanelWidget(QGroupBox):
|
|
|
28
31
|
self.device_cb = ComboBoxWithSignal()
|
|
29
32
|
self.sample_rate_cb = ComboBoxWithSignal()
|
|
30
33
|
self.window_size_sb = PowerOfTwoSpinBox()
|
|
34
|
+
self.recorded_length_sb = QSpinBox(minimum=1, value=20)
|
|
31
35
|
self.overlap_cb = QComboBox()
|
|
32
36
|
self.start_btn = QPushButton("Start")
|
|
33
37
|
self.stop_btn = QPushButton("Stop")
|
|
@@ -61,16 +65,20 @@ class ControlPanelWidget(QGroupBox):
|
|
|
61
65
|
hbox1 = QHBoxLayout()
|
|
62
66
|
hbox1.addWidget(QLabel("Capture device"), 0)
|
|
63
67
|
hbox1.addWidget(self.device_cb, 1)
|
|
64
|
-
hbox1.addWidget(QLabel("Sample rate"), 0)
|
|
68
|
+
hbox1.addWidget(QLabel("Sample rate [Hz]"), 0)
|
|
65
69
|
hbox1.addWidget(self.sample_rate_cb, 0)
|
|
66
70
|
vbox.addLayout(hbox1)
|
|
67
71
|
|
|
68
72
|
hbox2 = QHBoxLayout()
|
|
73
|
+
hbox2.addWidget(QLabel("Recording length [s]"), 0)
|
|
74
|
+
hbox2.addWidget(self.recorded_length_sb, 0)
|
|
69
75
|
hbox2.addWidget(QLabel("FFT window size"), 0)
|
|
70
76
|
hbox2.addWidget(self.window_size_sb, 0)
|
|
71
77
|
hbox2.addWidget(QLabel("Overlap"), 0)
|
|
72
78
|
hbox2.addWidget(self.overlap_cb, 0)
|
|
73
|
-
hbox2.
|
|
79
|
+
hbox2.addSpacerItem(
|
|
80
|
+
QSpacerItem(50, 0, hData=QSizePolicy.Policy.MinimumExpanding, vData=QSizePolicy.Policy.Fixed)
|
|
81
|
+
)
|
|
74
82
|
hbox2.addWidget(self.start_btn, 0)
|
|
75
83
|
hbox2.addWidget(self.stop_btn, 0)
|
|
76
84
|
vbox.addLayout(hbox2)
|
|
@@ -114,11 +122,15 @@ class ControlPanelWidget(QGroupBox):
|
|
|
114
122
|
def set_state(self, *, connected: bool) -> None:
|
|
115
123
|
self.device_cb.setEnabled(not connected)
|
|
116
124
|
self.sample_rate_cb.setEnabled(not connected)
|
|
125
|
+
self.recorded_length_sb.setEnabled(not connected)
|
|
117
126
|
self.window_size_sb.setEnabled(not connected)
|
|
118
127
|
self.overlap_cb.setEnabled(not connected)
|
|
119
128
|
self.start_btn.setEnabled(not connected)
|
|
120
129
|
self.stop_btn.setEnabled(connected)
|
|
121
130
|
|
|
131
|
+
def recorded_length(self) -> int:
|
|
132
|
+
return self.recorded_length_sb.value()
|
|
133
|
+
|
|
122
134
|
def sample_rate(self) -> int:
|
|
123
135
|
return int(self.sample_rate_cb.currentText())
|
|
124
136
|
|
{audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram.egg-info/PKG-INFO
RENAMED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: audio-spectrogram
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Audio spectrogram app based on PySide6
|
|
5
5
|
Author-email: Artur Drogunow <Artur.Drogunow@zf.com>
|
|
6
6
|
License: GPL-3.0-or-later
|
|
7
|
+
Project-URL: Issues, https://github.com/zariiii9003/audio_spectrogram/issues
|
|
8
|
+
Project-URL: Source, https://github.com/zariiii9003/audio_spectrogram
|
|
7
9
|
Keywords: Audio,Microphone,FFT,STFT,Spectrogram,Sonogram
|
|
8
10
|
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
9
11
|
Classifier: Operating System :: OS Independent
|
|
@@ -32,7 +34,7 @@ Dynamic: license-file
|
|
|
32
34
|
|
|
33
35
|
*Audio Spectrogram* is a small python GUI application to analyze the frequency content of your microphone input.
|
|
34
36
|
|
|
35
|
-
<img src="doc/GUI.png" width="683" alt="GUI Screenshot" />
|
|
37
|
+
<img src="https://raw.githubusercontent.com/zariiii9003/audio_spectrogram/refs/heads/master/doc/GUI.png" width="683" alt="GUI Screenshot" />
|
|
36
38
|
|
|
37
39
|
## Usage
|
|
38
40
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/app/qapplication.py
RENAMED
|
File without changes
|
{audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/app/spectrogram.py
RENAMED
|
File without changes
|
{audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/app/widgets/__init__.py
RENAMED
|
File without changes
|
{audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram/app/widgets/combobox.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram.egg-info/requires.txt
RENAMED
|
File without changes
|
{audio_spectrogram-0.1.0a1 → audio_spectrogram-0.2.0}/src/audio_spectrogram.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|