You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -61,6 +61,6 @@ With the decreasing number of audio devices that provide realtime audio passthro
61
61
<br/>
62
62
63
63
## Project Status
64
-
Chirplab v0.4 is in a basic usable state, supporting file and sound card input and output with real units calibration and a set of standard audio measurements, with additional features and measurement types in development. See the [roadmap](ROADMAP.md) for a high level list of currently implemented and planned features. Contributions are welcome.
64
+
Chirplab v0.5 is in a basic usable state, supporting file and sound card input and output with real units calibration and a set of standard audio measurements, with additional features and measurement types in development. See the [roadmap](ROADMAP.md) for a high level list of currently implemented and planned features. Contributions are welcome.
65
65
66
66
If you have a specific feature request not on the roadmap, find a bug, have an audio file or signal that does not play nicely with Chirplab, etc. please [raise an issue](https://github.com/loudifier/chirplab/issues).
Copy file name to clipboardExpand all lines: ROADMAP.md
+24-6Lines changed: 24 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -11,6 +11,8 @@ Features in each subheading are ordered roughly in order of prioritization. This
11
11
- Technically, any audio file format that SoX understands is already supported by manually entering the full filename and extension and/or using the 'All files' filter in the input file picker.
12
12
-[ ] Native file I/O without using SoX as an intermediary
13
13
- SoX is used as a robust, fast, lightweight, and readily available universal file conversion utility. This comes with the downside of needing a separate download and potentially introduces security issues to work around SoX's strange stderr output. The SciPy wavfile module works for 16 and 32 bit int and 32 bit floating point WAV files, but does not properly handle common 24 bit WAV files or any other formats, so the current solution is to use SoX to convert input files to a 32 bit floating point WAV (including any resampling) and read the WAV with wavfile (and vice versa for output files).
14
+
- Everything works fine, except SoX converts all files to a 32-bit *integer* format when reading files and there is no appetite from the SoX maintainers to make any updates... Loss of precision with 32 bit floating point is of slight concern, but a bigger issue is the inability to read and write floating point input files that exceed ±1.0FS. https://sourceforge.net/p/sox/mailman/sox-users/thread/20230522070824.6g2tkoksss72ay5t%40fastmail.com/
15
+
-https://github.com/bastibe/python-soundfile seems to be the most common alternative to SciPy wavfile. See if it works for floating point files exceeding full scale. Would still need some sort of resampling solution...
14
16
-[ ] Multi-channel/Multi-file/Multi-capture support
15
17
- Analyzing additional signals is trivial on top of implementing the actual signal analysis in any given measurement, but managing the UI and how the user *expects* multi-channel analysis to work gets very complex very quickly. How multiple measurement inputs are selected, how outputs are displayed with or without measurement noise floor(s), storing measurement outputs and adding new measurement traces, and handling a geometrically expanding set of UI interactions can derail the development of other features and measurements.
16
18
@@ -57,12 +59,17 @@ Features in each subheading are ordered roughly in order of prioritization. This
57
59
- Any way to clearly communicate measurement noise floor in spectrogram? Maybe something like how cameras show clipping with zerba overlay?
58
60
-[x] Impulse Response
59
61
-[x] Parameters
60
-
- IR length, pre-post trimming
61
-
- Windowing fade in/out
62
-
- Wrapped with time aligned to t0 or shifted/rolled to the right
63
-
- Normalized or raw - may need to specify floating point if outputting to WAV (verify SoX/wavfile behavior with floating point values greater than 1.0)
62
+
- [x] IR length, pre-post trimming
63
+
- [x] Windowing fade in/out
64
+
- [x] Wrapped with time aligned to t0 or shifted/rolled to the right
65
+
- [x] Normalized or raw
66
+
- [x] Select channel used as reference
67
+
- [x] Select channel used for timing reference, similar to phase response/group delay selection
68
+
-[x] Output IR as wav file
69
+
-[x] Selectable bit depth
70
+
-[ ]~~Verify SoX/wavfile behavior with floating point values greater than 1.0~~ SoX clips files internally... add warning if clipping occurs
64
71
-[x] Measurement noise floor output off by default when outputting IR waveforms, but is plotted in GUI. Add options to have a second channel or second wav file for exporting noise IR?
65
-
-[ ] Reverberation
72
+
-[ ]~~Reverberation~~
66
73
- Not sure if this really fits with Chirplab. Branch created with stubs based on ImpulseResponse, but not actually adding for now
67
74
-[ ] Several different methods commonly used. Start out using IR as raw input for energy decay curve and see how easy/effectively RT60 can be derived
68
75
-[ ] Output broadband, at 1kHz, or as times vs frequency?
@@ -75,6 +82,12 @@ Features in each subheading are ordered roughly in order of prioritization. This
75
82
- Color-coding the surface plot could help highlight problem resonances. Simple blue to orange gradient vs time? Gradient for time multiplied by amplitude (either absolute amplitude or relative to t0 for that frequency)?
76
83
- Maybe have a toggle to plot color-coded 2D. The 2D plotting is still in the code but skipped
77
84
-[ ] Figure out how to plot measurement noise floor without making the graph too busy
85
+
-[ ] Thiele-Small Parameters
86
+
- Right on the edge of being in scope...
87
+
-[ ] Guide for settting everything up, calibrating to measure impedance
88
+
- Include guidance on using noise floor as a guideline to reduce drive level to stay within linear range as much as posible. Explain some of the limitations of using chirps for impedance measurements, why Klippel uses multitone/noise, warn about drive level and sweep direction influencing apparent F0, other parameters. Can any of the Klippel LSI stuff be done purely with chirps?
89
+
-[ ] Do the math to derive TS params from impedance curve - there are probably existing implementations that can be used for reference
90
+
-[ ] Option to output impedance curve
78
91
79
92
## General features
80
93
-[x] Real units calibration - some sort of 'Pa per FS' and 'Volts per FS' conversion factors so output units can be expressed in real units
@@ -109,12 +122,13 @@ Features in each subheading are ordered roughly in order of prioritization. This
109
122
-[ ] Any accessibility issues will be prioritized. Please raise an issue if you identify UI elements with poor contrast or color contrast, excessive flashing, etc.
110
123
- [x] Graph colors are blue/orange by default, avoid red/green
111
124
- [] Qt elements are pretty good about keyboard controls and I tried to include hotkeys for all standard options, but there are a lot of UI elements, so I may have missed some
112
-
- [] I am not very familiar with screen readers, but I believe Qt should have good support natively
125
+
- [] I am not familiar with screen readers, but I believe Qt should have good support natively
113
126
-[ ] Proper scaling over a wide range of DPI. Mostly works, but graph exports seem small
114
127
-[ ] Speed up plotting, particularly chirp tab updating every time a chirp parameter spinbox is clicked
115
128
- pyqtgraph downsampling and setting pen width to 1 helps a lot. Also try the skip finite check
116
129
- see if there is a good way to pause the graph updating, plot all of the data, then draw at once. Might be able to avoid a triple redraw when updating stimulus, response, and noise together. Seems like the bottleneck is .drawLines(), so it might not be any faster (probably also not much faster to .setData())
117
130
- maybe add a short delay of ~1s before recalculating to allow spamming a spin box and recalculating with whatever value the user lands on
131
+
- look into fastplotlib. Looks promising, surface meshes are on the roadmap
118
132
-[ ] Bundle Windows exe in such a way that GUI launches without console window and CLI/GUI both output to stdout. Current solution still flashes console window when launching GUI. https://pyinstaller.org/en/stable/feature-notes.html#automatic-hiding-and-minimization-of-console-window-under-windows
119
133
-[ ] Undo/redo - a lot of work with many edge cases that need to be handled, but would be really nice to have
120
134
-[ ] Customize pyqtgraph. Right-click menu with reset and dialog to set ranges and scales, click on trace to show point values, etc.
@@ -127,6 +141,8 @@ Features in each subheading are ordered roughly in order of prioritization. This
127
141
-[ ] Additional overrides?
128
142
-[x] Generate stimulus file from project file settings
129
143
-[ ] Measure calibration tone from a file and apply the calibration to a project file
144
+
-[ ] Handle wildcards (and/or some sort of list entry?) for multiple input files in file override
145
+
-[ ] handle list or range for channel override
130
146
131
147
## Other
132
148
-[x] Build automation. Github actions automatically bundle Windows exe on push and add bundle to releases
@@ -137,6 +153,8 @@ Features in each subheading are ordered roughly in order of prioritization. This
137
153
-[ ] Project file format
138
154
-[ ] Calibration guide (including clear explanation of 3dB RMS vs peak compensation)
139
155
-[ ] Explanations of individual measurements. How they work, what the different parameters do, what the outputs mean, etc.
156
+
-[ ] VCAD guide
157
+
-[ ] Collect data and add graphs for HOHD, highpass, residual Rub and Buzz
140
158
-[ ] Testing
141
159
- End-to-end tests of measurement outputs from different input signals, rather than typical TDD-style units tests
142
160
- Ground truth comparisons to other measurement software
Copy file name to clipboardExpand all lines: src/CLProject.py
+4-4Lines changed: 4 additions & 4 deletions
Original file line number
Diff line number
Diff line change
@@ -36,7 +36,7 @@
36
36
37
37
38
38
# when loading project files from older versions of chirplab, the project may be able to be upgraded for compatibility with current version
39
-
CHIRPLAB_VERSION=0.4
39
+
CHIRPLAB_VERSION=0.5
40
40
41
41
42
42
# constants
@@ -63,7 +63,7 @@
63
63
'#4DBEEE', # light blue
64
64
'#A2142F'] # red
65
65
NOISE_COLOR='#808080'
66
-
PLOT_PEN_WIDTH=3# some high density plots force the pen width to 1, which is much faster
66
+
PLOT_PEN_WIDTH=3# some high density plots ignore this and force the pen width to 1, which is much faster
67
67
68
68
69
69
# default project parameters
@@ -96,8 +96,8 @@ def new_project():
96
96
97
97
# calibration parameters
98
98
'FS_per_Pa': 1.0, # acoustic input level in Full Scale units per Pascal. e.g. for a 94dBSPL sensitivity of -37dBFS, FS_per_Pa = 0.0141
99
-
'FS_per_V': 1.0, # electrical input level in Full Scale units per Volt. e.g for a full scale input voltage of +16dBu, FS_per_V = 0.2045
100
-
# for an analog mic with -40dBV sensitivity and interface with +16dBu full scale input voltage (EMM-6 + Scarlett 2i2 at minimum gain), FS_per_V = 0.2045 and FS_per_Pa = 0.002045
99
+
'FS_per_V': 1.0, # electrical input level in Full Scale units per Volt. e.g for a full scale input voltage of +9dBu, FS_per_V = 0.4579
100
+
# for an analog mic with -40dBV sensitivity and interface with +9dBu full scale input voltage (EMM-6 + Scarlett 2i2 at minimum gain), FS_per_V = 0.4579 and FS_per_Pa = 0.004579
101
101
102
102
# noise floor settings (measurements will calculate noise floor regardless of whether the noise floor is plotted or saved)
103
103
'plot_noise': True, # plot the measurement noise floor in the GUI
0 commit comments