Files
Matteo Benedetto 01b34bec6f docs: aggiungi avatar del tema e referenzialo nel README
- preview/avatar.png: emblema 512x512 nello stile del tema (immagine
  generata con IA, non coperta dalle licenze di audio e codice)
- README: mostra l'avatar in testa e chiarisce la licenza dell'immagine
- dist/: tarball aggiornato
2026-09-20 16:27:56 +02:00

242 lines
9.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# DeepSpace — sound theme for KDE Plasma
<img src="preview/avatar.png" alt="DeepSpace" width="120" align="right">
*Operational telemetry for the long haul*
A complete, [freedesktop Sound Theme
specification](https://specifications.freedesktop.org/sound-theme-spec/latest/)
compliant sound theme for **KDE Plasma 6** (and any other desktop that honours
the spec). 61 cues, all of them synthesised from scratch — no sample
library, no third-party audio, no attribution burden. The whole theme is
reproducible from the script in `tools/`.
```
kde-sound-theme-deepspace/
├── DeepSpace/
│ ├── index.theme # [Sound Theme] + [stereo] OutputProfile
│ └── stereo/ # 61 × Ogg Vorbis 48 kHz stereo
├── tools/
│ ├── gen_sounds.py # the synthesis engine (reproducible)
│ ├── verify_theme.py # spec + audio + KDE coverage checks
│ ├── make_preview.py # rebuilds preview/index.html
│ └── preview_template.html
├── preview/
│ ├── index.html # player nel browser per ogni cue
│ └── avatar.png # icona del tema (512×512)
├── LICENSES/
├── Makefile
└── install.sh
```
## Character
DeepSpace is the operational voice of a ship underway: inharmonic FM bells (ratio 2.76) over a sub-bass drone rooted on A2, short band-limited noise sweeps for anything that opens, closes or docks, and a hall that is present but never washy. Cues are meant to be read at a glance: rising fifths say *nominal*, a detuned cluster over a sub impact says *attention*.
| Motif | Used for |
|---|---|
| Rising perfect fifth (0 → 7) | nominal, completed, received |
| Falling fourth (7 → 0) | warning, lost, removed |
| Detuned cluster + sub impact | error, failure, suspend |
| Band-limited noise sweep | plug, unplug, dock, trash |
| Metallic bell arpeggio | success, winner, connectivity |
## Requirements
* KDE Plasma 6, or any desktop implementing the freedesktop sound theme spec
* nothing at runtime — the cues are plain Ogg Vorbis files
* `ffmpeg` (libvorbis), `python3`, `numpy`, `scipy` **only** if you want to
regenerate the audio
## Install
User-local (recommended, no root needed):
```sh
git clone https://git.enne2.net/enne2/kde-sound-theme-deepspace.git
cd kde-sound-theme-deepspace
./install.sh # copies DeepSpace/ into ~/.local/share/sounds/
```
System-wide:
```sh
sudo make install-system # copies DeepSpace/ into /usr/share/sounds/
```
## Select the theme
**System Settings → Colors & Themes → System Sounds → DeepSpace**
Or from the command line:
```sh
kwriteconfig6 --file kdeglobals --group Sounds --key Theme DeepSpace
```
To go back to the Plasma default:
```sh
kwriteconfig6 --file kdeglobals --group Sounds --key Theme ocean
```
The theme declares `Inherits=freedesktop`, so any event it does not provide
(e.g. multi-channel test signals) falls back to the stock desktop theme instead
of going silent.
## What is inside
`DeepSpace/index.theme` declares the theme, `Directories=stereo`,
`OutputProfile=stereo` and `Example=theme-demo`. The `Example` key is what the
Plasma *System Sounds* KCM uses for its preview button, so `theme-demo.oga` is a
montage of the theme's signatures rather than an arbitrary cue.
`Name[it]` and `Comment[it]` are also provided, so Plasma in an Italian locale
lists the theme as **Spazio Profondo**. That is a display name only: the theme id — the
folder name in `~/.local/share/sounds/` and the value written to
`kdeglobals` — is always `DeepSpace`, exactly like KDE's own Ocean theme shows up
as *Oceano* in Italian.
| sound name | duration | size |
|---|---:|---:|
| `alarm-clock-elapsed` | 2.66 s | 37.7 KiB |
| `audio-test-signal` | 1.10 s | 20.5 KiB |
| `audio-volume-change` | 0.13 s | 6.7 KiB |
| `battery-caution` | 1.18 s | 19.9 KiB |
| `battery-full` | 1.05 s | 18.4 KiB |
| `battery-low` | 1.18 s | 18.2 KiB |
| `bell-terminal` | 0.15 s | 7.0 KiB |
| `bell-window-system-attention` | 0.94 s | 15.6 KiB |
| `bell-window-system` | 0.88 s | 15.0 KiB |
| `bell` | 1.26 s | 19.8 KiB |
| `button-pressed-modifier` | 0.12 s | 7.1 KiB |
| `button-pressed` | 0.11 s | 6.7 KiB |
| `camera-shutter` | 0.26 s | 9.7 KiB |
| `complete-media-burn` | 2.26 s | 37.9 KiB |
| `complete-media-error` | 1.72 s | 36.1 KiB |
| `complete` | 0.83 s | 15.2 KiB |
| `completion-fail` | 1.38 s | 19.9 KiB |
| `completion-partial` | 1.12 s | 18.3 KiB |
| `completion-rotation` | 1.68 s | 24.6 KiB |
| `completion-success` | 2.14 s | 36.6 KiB |
| `desktop-login` | 2.90 s | 39.6 KiB |
| `desktop-logout` | 2.20 s | 28.0 KiB |
| `device-added` | 0.64 s | 15.2 KiB |
| `device-removed` | 0.64 s | 15.1 KiB |
| `dialog-error-critical` | 2.32 s | 45.9 KiB |
| `dialog-error-serious` | 1.80 s | 37.3 KiB |
| `dialog-error-veryserious` | 2.70 s | 35.9 KiB |
| `dialog-error` | 1.48 s | 31.5 KiB |
| `dialog-information` | 1.13 s | 18.2 KiB |
| `dialog-question` | 1.14 s | 19.1 KiB |
| `dialog-special` | 1.86 s | 33.4 KiB |
| `dialog-warning-auth` | 1.00 s | 19.1 KiB |
| `dialog-warning` | 1.27 s | 19.8 KiB |
| `game-over-loser` | 2.60 s | 50.0 KiB |
| `game-over-winner` | 3.02 s | 50.3 KiB |
| `media-insert-request` | 0.87 s | 16.5 KiB |
| `message-attention` | 1.16 s | 23.8 KiB |
| `message-contact-in` | 1.05 s | 17.0 KiB |
| `message-contact-out` | 1.05 s | 16.5 KiB |
| `message-highlight` | 0.86 s | 16.8 KiB |
| `message-new-email` | 1.48 s | 25.0 KiB |
| `message-new-instant` | 0.92 s | 15.6 KiB |
| `message-sent-instant` | 0.45 s | 10.3 KiB |
| `message` | 0.80 s | 14.8 KiB |
| `network-connectivity-established` | 1.66 s | 28.8 KiB |
| `network-connectivity-lost` | 1.26 s | 19.2 KiB |
| `outcome-failure` | 1.32 s | 28.6 KiB |
| `outcome-success` | 1.62 s | 28.4 KiB |
| `phone-incoming-call` | 2.44 s | 39.4 KiB |
| `phone-outgoing-busy` | 1.30 s | 23.6 KiB |
| `phone-outgoing-calling` | 1.16 s | 23.8 KiB |
| `power-plug` | 0.78 s | 15.3 KiB |
| `power-unplug` | 0.88 s | 18.9 KiB |
| `screen-capture` | 0.30 s | 10.4 KiB |
| `service-login` | 1.34 s | 20.7 KiB |
| `service-logout` | 1.24 s | 19.0 KiB |
| `suspend-error` | 1.92 s | 39.5 KiB |
| `theme-demo` | 11.39 s | 168.6 KiB |
| `trash-empty` | 0.95 s | 20.3 KiB |
| `window-attention` | 1.43 s | 21.4 KiB |
| `window-question` | 1.04 s | 18.0 KiB |
## Rebuilding from source
The audio is generated, not sampled, so it is fully reproducible:
```sh
make generate # rewrites DeepSpace/stereo/*.oga from tools/gen_sounds.py
make verify # spec + audio + KDE coverage checks
make preview # rebuild preview/index.html
make dist # build dist/kde-sound-theme-deepspace-1.0.0.tar.gz
```
`make verify` fails loudly on a clipped sample, a DC offset, a click at a file
edge, a wrong sample rate or channel count, a missing `stereo` directory in
`Directories=`, a broken `Example`/`Inherits` reference, and it reports how many
of the sound names actually requested by the installed KDE `*.notifyrc` files
the theme resolves.
## Design notes
### One instrument set, not sixty unrelated beeps
Every cue is assembled from the same small library of motifs — FM bells, sub
impacts, band-limited noise sweeps, additive pads, plucked strings, telemetry
blips — so the theme reads as a single instrument rather than a folder of
noises. The palette below is what turns that library into *this* theme:
| Parameter | DeepSpace |
|---|---|
| Root | A2 — 110.00 Hz |
| Scale | minor pentatonic (0 3 5 7 10) |
| FM voice | ratio 2.76, index 2.4, index decay 130 ms |
| Detune | ±6 cents |
| Space | 2.2 s synthetic hall, 2836 % wet on medium cues, near-dry on clicks |
### A differentiated reverb bus
A single reverb setting is wrong for a desktop theme: frequent cues (chat,
volume, button clicks) would smear into each other during a burst, while rare
dramatic cues would sound dry and small. Cues here are assigned one of five
reverb classes — from near-dry clicks through a small room up to a vast hall
with an extra half-second of tail — by motif, with per-sound overrides. The
result is that a chat notification stays crisp and a login blooms.
### Loudness-aware normalisation
Peak-normalising every file is not enough: a sparse bell and a dense error
cluster end up at wildly different perceived levels. After peak normalisation
each cue gets a bounded gain (±6 dB) that pulls the RMS of its *active* portion
towards 16 dBFS, with the peak ceiling always winning. That keeps the theme
consistent without introducing clipping.
### No clicks
Every cue is high-passed (30130 Hz depending on the class), given a 1.5 ms
raised-cosine fade in and a 35 ms fade out before the reverb is applied, so the
convolution never sees a discontinuity. `make verify` enforces this: it rejects
any file whose first samples are not at zero.
## Licence
* **Audio** (`DeepSpace/stereo/*.oga`, `DeepSpace/index.theme`) —
[CC BY-SA 4.0](LICENSES/CC-BY-SA-4.0.txt), the same licence the KDE sound
themes use.
* **Code and documentation** (`tools/`, `Makefile`, `install.sh`, `preview/`,
`README.md`) — [BSD-2-Clause](LICENSES/BSD-2-Clause.txt).
The sounds are original synthesis; nothing is derived from the KDE Ocean sound
theme or any other recording. You may therefore use this theme commercially and
adapt it freely, subject to CC BY-SA 4.0's attribution and share-alike terms.
## Credits
Created by **enne2** (2026). Designed for Plasma 6.3 on Debian 13.
The avatar illustration in `preview/avatar.png` is an AI-generated image (Google
Gemini via Antigravity). It is included only to identify the theme, and is **not**
covered by either grant below: neither the CC BY-SA 4.0 that applies to the audio
nor the BSD-2-Clause that applies to the code.