Compare commits

..

84 commits

Author SHA1 Message Date
Armin
1abf801e8e Update README 2026-07-09 16:09:19 +02:00
Armin
0e37ad6b32 document known limitations in README 2026-07-09 16:05:06 +02:00
Armin
bdc47e3284 fix Firefox drag-drop by falling back to getAsEntry for directory paths 2026-07-09 12:34:33 +02:00
Armin
26a45a73ef Use full file path name in tag editor filename field 2026-07-09 12:29:20 +02:00
Armin
59b771cd2d move filename field to bottom of tag editor, make full width 2026-07-09 12:27:35 +02:00
Armin
dece79f6d7 Add filename to tag information 2026-07-09 12:22:42 +02:00
Armin
ab6e462146 fix README (remove pywebview mention) 2026-07-09 10:12:38 +02:00
Armin
4c46593bc5 omit hours (HH) when 00 and minutes pad only when >=10 in time displays 2026-07-09 00:58:41 +02:00
Armin
484ec2abb5 fix some player UI layout issues 2026-07-09 00:49:19 +02:00
Armin
dd38dbd0f7 show progress bar before waveform loads
- Draw progress bar track background unconditionally when no waveform
  exists, so the waveform area never appears blank
- Call drawWaveform() from onLoadedmetadata() so the bar fill appears
  as soon as metadata is available
2026-07-09 00:27:48 +02:00
Armin
92f2c6dab4 add progress bar fallback when waveform data is unavailable 2026-07-09 00:23:29 +02:00
Armin
94ee52aace clamp VU meter peak indicator to last valid LED index to prevent cut-off 33rd position 2026-07-08 20:24:30 +02:00
Armin
965674c777 fix player height to 174px to prevent layout shift on page load vs clear 2026-07-08 20:09:13 +02:00
Armin
b8fe6005a2 remove hasT toggling, fix clear handler drawSpectrum call 2026-07-08 20:06:06 +02:00
Armin
eb4d8002e5 always show visualizers, fix bogus vuDraw call, eliminate layout re-adjustment on clear 2026-07-08 20:05:55 +02:00
Armin
0f14d8da94 fix stop button guard to work after clear 2026-07-08 19:46:57 +02:00
Armin
b66de074ef remove emptyState JS refs, fix pause/stop guard to work after clear 2026-07-08 19:46:45 +02:00
Armin
7f68be1243 remove empty-state, set min-height on canvas-area to prevent UI jump, fix pause/stop after clear 2026-07-08 19:46:39 +02:00
Armin
dae39818f9 wire volume gain node in audio graph and volume slider 2026-07-08 19:42:06 +02:00
Armin
a225805f27 move volume control to a gain node after analysers so peak/VU meters always show full signal level 2026-07-08 19:41:53 +02:00
Armin
5b97e1627e keep currently playing track alive when clearing playlist 2026-07-08 19:32:32 +02:00
Armin
8984f5a864 clear playlist without stopping audio or hiding visualizers 2026-07-08 19:32:24 +02:00
Armin
cba38cf500 keep visualizers active after clearing playlist while audio is still playing 2026-07-08 19:31:52 +02:00
Armin
6479e49d18 fix spec peak hold to fall down smoothly instead of snapping to zero 2026-07-08 19:18:41 +02:00
Armin
4a203dbaf8 increase cover art display size to ~130% 2026-07-08 19:18:37 +02:00
Armin
2efb224297 Tweak peaks falloff default time values 2026-07-08 19:11:47 +02:00
Armin
c678b947df Remove broken peak fade-out feature from spectrum analyzer 2026-07-08 19:08:49 +02:00
Armin
dd657c6ab3 Add configurable spectrum analyzer peak hold, fade, and snap behavior 2026-07-08 19:05:12 +02:00
Armin
45bf10105b Refactor VU meter peak hold to use direct variable access 2026-07-08 19:05:06 +02:00
Armin
0fc4a746bf Make analyzer bar and VU meter gaps dynamic 2026-07-08 19:02:01 +02:00
Armin
6ee9b976bd Fix analyzer bar gaps to exactly 6px 2026-07-08 18:28:01 +02:00
Armin
34c0a4ccf4 Add configurable peak hold grace time for VU meter 2026-07-08 18:26:26 +02:00
Armin
a7f62a7bd8 Increase VU meter LED gap from 1px to 2px 2026-07-08 18:23:23 +02:00
Armin
56faa28f6b Make VU meter canvas DPR-aware for sharp edges on Retina displays 2026-07-08 18:22:33 +02:00
Armin
af866881ff Fix blurry VU meter LEDs by using integer segment width 2026-07-08 18:20:29 +02:00
Armin
9d1318145a Move Clear button from playlist toolbar to bottom add-bar 2026-07-08 18:15:48 +02:00
Armin
c55f5bc5c1 Replace underscores with spaces in filename-derived track names 2026-07-08 17:58:17 +02:00
Armin
81a8cc1329 Add cover column header to playlist header row 2026-07-08 17:56:39 +02:00
Armin
5bcfd0499a Display cover art in player area; add Clear button and reduce analyzer gap 2026-07-08 17:56:33 +02:00
Armin
75986cf0ef Add cover art thumbnail column to playlist 2026-07-08 17:56:01 +02:00
Armin
aacb427d1b Parse embedded cover art from ID3v2 APIC frames and FLAC picture blocks 2026-07-08 17:52:35 +02:00
Armin
a46be8ed0a mix linear/logarithmic frequency mapping (see "blend") 2026-07-08 17:28:44 +02:00
Armin
ae3943aab0 fix: blend linear/log frequency mapping with blend=0.4 2026-07-08 17:27:31 +02:00
Armin
31aff8672d fix: use logarithmic frequency mapping for analyzer bars 2026-07-08 17:25:38 +02:00
Armin
9d82535024 Increase analyzer/VU meter bands (32) 2026-07-08 17:21:30 +02:00
Armin
9863ca7911 fix: pause button toggles between pause and resume 2026-07-08 17:17:29 +02:00
Armin
61cdc6fd53 fix: play button resumes paused track instead of switching to selected track 2026-07-08 17:17:22 +02:00
Armin
b748056e81 fix: allow waveform to shrink when horizontal space is limited 2026-07-08 17:11:35 +02:00
Armin
c8a11d9390 fix: correct waveform click-to-seek position calculation 2026-07-08 17:10:33 +02:00
Armin
a970277869 style: center player-right content, remove right-aligned overrides 2026-07-08 17:09:24 +02:00
Armin
8bd2985fd5 fix: reserve space for audio-info to prevent layout shift on playback 2026-07-08 17:09:08 +02:00
Armin
4932e8079b fix: make waveform fit container width without scrollbar 2026-07-08 17:05:36 +02:00
Armin
42861dba9d feat: separate play/pause into individual buttons, add stop button 2026-07-08 17:04:43 +02:00
Armin
c07220e809 feat: replace progress bar with scrollable waveform display 2026-07-08 17:04:01 +02:00
Armin
b4cae8eac2 feat: scan playtime duration when adding tracks 2026-07-08 16:57:22 +02:00
Armin
eb0fc9835e style: brighten artist and filename columns in playlist 2026-07-08 16:57:12 +02:00
Armin
2f980acc3d style: make selected track title non-bold, make status bar titles bold 2026-07-08 16:57:05 +02:00
Armin
0c0398a6ae fix: clicking selected file in multi-select clears others 2026-07-08 16:46:53 +02:00
Armin
76fa21d405 Cmd+A / Ctrl+A selects all tracks in playlist 2026-07-08 16:44:17 +02:00
Armin
7ff0d0ac95 fix: check pendingNextIndex in play/pause button handler after track deletion 2026-07-08 16:39:44 +02:00
Armin
8327964f38 fix: advance to next track when deleted current track finishes playing 2026-07-08 16:34:10 +02:00
Armin
154f003787 fix: don't stop playback when deleting the current track from playlist 2026-07-08 16:34:07 +02:00
Armin
357e07ad32 feat: add pendingNextIndex for deferred track transition 2026-07-08 16:33:58 +02:00
Armin
857b277db5 style: use default cursor for playlist items instead of pointer 2026-07-08 16:33:45 +02:00
Armin
65446a85b7 style: dark background for select dropdown options 2026-07-08 16:33:31 +02:00
Armin
c944e1eb4a fix: stop audio playback when currently playing track is deleted 2026-07-08 16:26:58 +02:00
Armin
ba7d3d0310 fix: swap audio element immediately during crossfade so pause controls the correct track 2026-07-08 16:04:10 +02:00
Armin
fddbdf9a1c fix: allow deleting the currently playing track without interrupting playback 2026-07-08 16:03:50 +02:00
Armin
5789e4ec9e update screenshot 2026-07-08 14:28:00 +02:00
Armin
b10c88401e make brand tag (bottom right) a link to the repo 2026-07-08 11:17:34 +02:00
Armin
c18eaac989 Parse additional ID3v2 and Vorbis metadata fields
- Parse Comment (COMM), Composer (TCOM), and Encoded By (TENC)
  from ID3v2 tags
- Parse COMMENT, COMPOSER, URL, and ENCODEDBY/ENCODER
  from Vorbis comments (FLAC)
2026-07-08 04:12:02 +02:00
Armin
1a933585d2 Add tag editor with 10 fields in 2-column layout and footer status display
- Add tag editor overlay/modal with Name, Artist, Album, Genre, Year,
  Track No., Comment, Composer, URL, and Encoded By fields in 2-column grid
- Add Info button to open tag editor
- Add footer status display with success/error messaging
- Extend track model with comment, composer, urlTag, encodedBy fields
- Rename Track field to Track No.
2026-07-08 04:11:59 +02:00
Armin
e85de87728 fix playlist multi-line comment display; make it possible to
double-click (re-start) the current track
2026-07-08 01:56:34 +02:00
Armin
6cb74abded fix FLAC tag detection 2026-07-08 00:50:53 +02:00
Armin
730c16bec4 add license 2026-07-07 23:32:27 +02:00
Armin
4cd4649c0a remove blank linez ;-) 2026-07-07 14:20:13 +02:00
Armin
98adc59450 mention noizapp repo in README 2026-07-07 13:14:31 +02:00
Armin
543f412fa8 remove noiz.py section from README 2026-07-07 13:12:46 +02:00
Armin
298ecf27f4 update screenshot 2026-07-07 13:11:18 +02:00
Armin
e15c26ba9e remove noiz.py - we have https://codeberg.org/armin/noizapp (yes, Electron, I know...) for that now instead. 2026-07-07 02:57:10 +02:00
Armin
f11181232e remove obsolete Makefile 2026-07-07 02:01:31 +02:00
Armin
55b92ab42f revert noiz.py state (first pywebview experiment with working zoom) 2026-07-07 02:00:19 +02:00
Armin
358b840f2c tweak dropdown menu colors, point noiz.py to index.html 2026-07-07 00:59:29 +02:00
Armin
a2bc0c5e78 Merge pull request 'test' (#1) from test into main
Reviewed-on: https://codeberg.org/armin/noiz/pulls/1
2026-07-07 00:38:57 +02:00
5 changed files with 659 additions and 236 deletions

10
LICENSE Normal file
View file

@ -0,0 +1,10 @@
The MIT License (MIT)
Copyright © 2026 armin@codeberg
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View file

@ -24,10 +24,16 @@ There is a live demo available at [bsd.pm/noiz](https://bsd.pm/noiz/).
Open `index.html` in any modern browser. Click **+Folder**, **+Files**, or drag audio files onto the window.
## Native App (noiz.py)
## Known Limitations
`noiz.py` is a fully fledged local native application wrapper that runs `noiz://` in its own desktop window using [pywebview](https://pywebview.flowrl.com/). It launches the noiz:// app as a standalone application with native window via Python's webview, rather than running inside a browser tab. noiz.py is (as of now) 8 lines long.
- **File path display** - When adding individual files via **+Files** or drag-and-drop, browsers do not expose the full filesystem path for security reasons. Only the filename is shown in the tag editor. Using **+Folder** (which reads directory structure) provides the relative path within the selected folder.
- **Playback interruption on +Folder** - Opening the native directory picker suspends the browser's `AudioContext`, causing playback to stop. This is a browser-level security restriction (user gesture required for audio resume). Simply press play again after adding files.
## noizapp
There is a simple PoC Electron available to make noiz a stand-alone desktop "app":
https://codeberg.org/armin/noizapp
## License
noiz is released under the MIT license; see LICENSE file.
```bash
pip install pywebview && python noiz.py
```

File diff suppressed because it is too large Load diff

5
noiz
View file

@ -1,5 +0,0 @@
#!/usr/bin/env python3
import webview
webview.create_window( "noiz://", "./index.html", zoomable=True)
webview.start()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 KiB

After

Width:  |  Height:  |  Size: 254 KiB

Before After
Before After