- 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
242 lines
9.6 KiB
Markdown
242 lines
9.6 KiB
Markdown
# 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, 28–36 % 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 (30–130 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.
|