Files
kde-sound-theme-deepspace/README.md
T
Matteo Benedetto a51ce1e816 feat: Tema sonoro DeepSpace per KDE Plasma
- index.theme con Directories=stereo, OutputProfile=stereo,
  Inherits=freedesktop ed Example=theme-demo
- 61 cue sintetizzati da zero (Ogg Vorbis 48 kHz stereo) piu' il montaggio
  di anteprima theme-demo.oga
- tools/gen_sounds.py: motore di sintesi riproducibile (voci FM, pluck
  Karplus-Strong, rumore a banda variabile, sub-impact, pad additivi,
  riverbero a convoluzione, modello di degrado)
- tools/verify_theme.py: verifica della spec, igiene audio (clipping, DC,
  click ai bordi) e copertura dei nomi suono richiesti dai notifyrc di KDE
- preview/index.html: player nel browser per ogni cue del tema
- Makefile, install.sh, LICENSES (audio CC-BY-SA-4.0, codice BSD-2-Clause)
2026-09-20 16:12:47 +02:00

9.1 KiB
Raw Blame History

DeepSpace — sound theme for KDE Plasma

Operational telemetry for the long haul

A complete, freedesktop Sound Theme specification 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
├── 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):

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:

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:

kwriteconfig6 --file kdeglobals --group Sounds --key Theme DeepSpace

To go back to the Plasma default:

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:

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, the same licence the KDE sound themes use.
  • Code and documentation (tools/, Makefile, install.sh, preview/, README.md) — BSD-2-Clause.

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.