diff --git a/public/dings/README.md b/public/dings/README.md index 573a78f9..b36e1fb7 100644 --- a/public/dings/README.md +++ b/public/dings/README.md @@ -12,6 +12,6 @@ with motif one of `mention`, `dm`, `message`, `invite`; paths are relative to th A sender's own clip wins, else the neutral clip, else silence. Without a `manifest.json` the client keeps its stock notification sounds; once one exists, a motif with no clip is silent. -The set here is Aqua's v3 (AquaSynth PR #22, staged at minds.gamecult.org/aqua/dings-voices-70a9795), -Nibu on proposal 1 (static-filter square). Nobody has heard it. The client plays none of it unless the +The set here is Aqua's v4 (AquaSynth merge 21e83ec, staged at minds.gamecult.org/aqua/dings-voices-dd9be66), +Nibu on proposal 3 (8 kHz 5-bit smoothed sine) for all four events. Nobody has heard it. The client plays none of it unless the client config sets `"dings": { "enabled": true }` (default off, as in `config.json`). diff --git a/public/dings/senders/aqua/dm.ogg b/public/dings/senders/aqua/dm.ogg index 0a2b98da..5a235546 100644 Binary files a/public/dings/senders/aqua/dm.ogg and b/public/dings/senders/aqua/dm.ogg differ diff --git a/public/dings/senders/aqua/invite.ogg b/public/dings/senders/aqua/invite.ogg index 4f70d214..f349e735 100644 Binary files a/public/dings/senders/aqua/invite.ogg and b/public/dings/senders/aqua/invite.ogg differ diff --git a/public/dings/senders/aqua/mention.ogg b/public/dings/senders/aqua/mention.ogg index 1f9c3ffa..67d36911 100644 Binary files a/public/dings/senders/aqua/mention.ogg and b/public/dings/senders/aqua/mention.ogg differ diff --git a/public/dings/senders/aqua/message.ogg b/public/dings/senders/aqua/message.ogg index ce68c47a..3704f55a 100644 Binary files a/public/dings/senders/aqua/message.ogg and b/public/dings/senders/aqua/message.ogg differ diff --git a/public/dings/senders/eureka/dm.ogg b/public/dings/senders/eureka/dm.ogg index a64c22f6..57024fbe 100644 Binary files a/public/dings/senders/eureka/dm.ogg and b/public/dings/senders/eureka/dm.ogg differ diff --git a/public/dings/senders/eureka/invite.ogg b/public/dings/senders/eureka/invite.ogg index 708dd38d..d6a6e328 100644 Binary files a/public/dings/senders/eureka/invite.ogg and b/public/dings/senders/eureka/invite.ogg differ diff --git a/public/dings/senders/eureka/mention.ogg b/public/dings/senders/eureka/mention.ogg index 0025d742..c4085fae 100644 Binary files a/public/dings/senders/eureka/mention.ogg and b/public/dings/senders/eureka/mention.ogg differ diff --git a/public/dings/senders/eureka/message.ogg b/public/dings/senders/eureka/message.ogg index beb2a203..6cd340ce 100644 Binary files a/public/dings/senders/eureka/message.ogg and b/public/dings/senders/eureka/message.ogg differ diff --git a/public/dings/senders/heimdall/dm.ogg b/public/dings/senders/heimdall/dm.ogg index f4844c02..145e8853 100644 Binary files a/public/dings/senders/heimdall/dm.ogg and b/public/dings/senders/heimdall/dm.ogg differ diff --git a/public/dings/senders/heimdall/invite.ogg b/public/dings/senders/heimdall/invite.ogg index 6e27e760..98403c21 100644 Binary files a/public/dings/senders/heimdall/invite.ogg and b/public/dings/senders/heimdall/invite.ogg differ diff --git a/public/dings/senders/heimdall/mention.ogg b/public/dings/senders/heimdall/mention.ogg index e0064147..5a39a98c 100644 Binary files a/public/dings/senders/heimdall/mention.ogg and b/public/dings/senders/heimdall/mention.ogg differ diff --git a/public/dings/senders/heimdall/message.ogg b/public/dings/senders/heimdall/message.ogg index a2bddd92..068e7198 100644 Binary files a/public/dings/senders/heimdall/message.ogg and b/public/dings/senders/heimdall/message.ogg differ diff --git a/public/dings/senders/kiko/dm.ogg b/public/dings/senders/kiko/dm.ogg index 8b76726e..7c35b072 100644 Binary files a/public/dings/senders/kiko/dm.ogg and b/public/dings/senders/kiko/dm.ogg differ diff --git a/public/dings/senders/kiko/invite.ogg b/public/dings/senders/kiko/invite.ogg index 45d02d52..f8eff1a1 100644 Binary files a/public/dings/senders/kiko/invite.ogg and b/public/dings/senders/kiko/invite.ogg differ diff --git a/public/dings/senders/kiko/mention.ogg b/public/dings/senders/kiko/mention.ogg index 388dbbab..12cccf29 100644 Binary files a/public/dings/senders/kiko/mention.ogg and b/public/dings/senders/kiko/mention.ogg differ diff --git a/public/dings/senders/kiko/message.ogg b/public/dings/senders/kiko/message.ogg index 8eae8e4e..e0f6e885 100644 Binary files a/public/dings/senders/kiko/message.ogg and b/public/dings/senders/kiko/message.ogg differ diff --git a/public/dings/senders/libby/dm.ogg b/public/dings/senders/libby/dm.ogg index 8b580a4b..1316c196 100644 Binary files a/public/dings/senders/libby/dm.ogg and b/public/dings/senders/libby/dm.ogg differ diff --git a/public/dings/senders/libby/invite.ogg b/public/dings/senders/libby/invite.ogg index f88e6d28..4b92a0b7 100644 Binary files a/public/dings/senders/libby/invite.ogg and b/public/dings/senders/libby/invite.ogg differ diff --git a/public/dings/senders/libby/mention.ogg b/public/dings/senders/libby/mention.ogg index 5f62aa67..f335c2c9 100644 Binary files a/public/dings/senders/libby/mention.ogg and b/public/dings/senders/libby/mention.ogg differ diff --git a/public/dings/senders/libby/message.ogg b/public/dings/senders/libby/message.ogg index d923f60b..432f8623 100644 Binary files a/public/dings/senders/libby/message.ogg and b/public/dings/senders/libby/message.ogg differ diff --git a/public/dings/senders/nibu/dm.ogg b/public/dings/senders/nibu/dm.ogg index ede0ec45..2965cf53 100644 Binary files a/public/dings/senders/nibu/dm.ogg and b/public/dings/senders/nibu/dm.ogg differ diff --git a/public/dings/senders/nibu/invite.ogg b/public/dings/senders/nibu/invite.ogg index 1cd6492a..57e54c47 100644 Binary files a/public/dings/senders/nibu/invite.ogg and b/public/dings/senders/nibu/invite.ogg differ diff --git a/public/dings/senders/nibu/mention.ogg b/public/dings/senders/nibu/mention.ogg index 6a065e39..5f6d2dfc 100644 Binary files a/public/dings/senders/nibu/mention.ogg and b/public/dings/senders/nibu/mention.ogg differ diff --git a/public/dings/senders/nibu/message.ogg b/public/dings/senders/nibu/message.ogg index c3241582..a9294354 100644 Binary files a/public/dings/senders/nibu/message.ogg and b/public/dings/senders/nibu/message.ogg differ diff --git a/public/dings/senders/void/dm.ogg b/public/dings/senders/void/dm.ogg index e169ae98..d09a7a94 100644 Binary files a/public/dings/senders/void/dm.ogg and b/public/dings/senders/void/dm.ogg differ diff --git a/public/dings/senders/void/invite.ogg b/public/dings/senders/void/invite.ogg index 0b344456..ed46cbb9 100644 Binary files a/public/dings/senders/void/invite.ogg and b/public/dings/senders/void/invite.ogg differ diff --git a/public/dings/senders/void/mention.ogg b/public/dings/senders/void/mention.ogg index 80ec43e3..b6295e00 100644 Binary files a/public/dings/senders/void/mention.ogg and b/public/dings/senders/void/mention.ogg differ diff --git a/public/dings/senders/void/message.ogg b/public/dings/senders/void/message.ogg index 5c8fd5c8..da1f0a16 100644 Binary files a/public/dings/senders/void/message.ogg and b/public/dings/senders/void/message.ogg differ diff --git a/public/dings/senders/weksa/dm.ogg b/public/dings/senders/weksa/dm.ogg index 3eb3fa88..37b5f990 100644 Binary files a/public/dings/senders/weksa/dm.ogg and b/public/dings/senders/weksa/dm.ogg differ diff --git a/public/dings/senders/weksa/invite.ogg b/public/dings/senders/weksa/invite.ogg index b9dd5643..1c401418 100644 Binary files a/public/dings/senders/weksa/invite.ogg and b/public/dings/senders/weksa/invite.ogg differ diff --git a/public/dings/senders/weksa/mention.ogg b/public/dings/senders/weksa/mention.ogg index 148a6aca..98fa0f75 100644 Binary files a/public/dings/senders/weksa/mention.ogg and b/public/dings/senders/weksa/mention.ogg differ diff --git a/public/dings/senders/weksa/message.ogg b/public/dings/senders/weksa/message.ogg index 2e678ea6..f552996b 100644 Binary files a/public/dings/senders/weksa/message.ogg and b/public/dings/senders/weksa/message.ogg differ diff --git a/src/app/features/dings/manifest.test.ts b/src/app/features/dings/manifest.test.ts index 7017669a..0001e685 100644 --- a/src/app/features/dings/manifest.test.ts +++ b/src/app/features/dings/manifest.test.ts @@ -4,11 +4,46 @@ import { join } from 'node:path'; import { describe, expect, it } from 'vitest'; import { DingManifest, Motif, dingsEnabled, parseManifest, pickDing } from './dings'; -// The staged v3 set (Aqua, AquaSynth PR #22). Nobody has heard it; these tests check the manifest +// The staged v4 set (Aqua, AquaSynth merge 21e83ec, page minds.gamecult.org/aqua/dings-voices-dd9be66). Nobody has heard it; these tests check the manifest // against this code, not the sound. const DINGS = join(__dirname, '../../../../public/dings'); const raw = JSON.parse(readFileSync(join(DINGS, 'manifest.json'), 'utf8')); const manifest = parseManifest(raw) as DingManifest; +// sha256 prefixes of the 32 clips as staged by Aqua; Nibu's four are proposals/nibu3 (same samples, own Ogg serial). +const V4_SHA: Record = { + 'aqua/mention': 'cedb63552008', + 'aqua/dm': '5b996d01c770', + 'aqua/message': '8be19ccd505a', + 'aqua/invite': '462e63687f0b', + 'eureka/mention': '7afe0bcc90d0', + 'eureka/dm': '3909d70b0d45', + 'eureka/message': '0b466cd4b437', + 'eureka/invite': '837e1bbbdacf', + 'heimdall/mention': '36051569eb2c', + 'heimdall/dm': '26ebc4158d51', + 'heimdall/message': 'c383d6ce3da0', + 'heimdall/invite': 'fd47e9a97bb2', + 'kiko/mention': 'e73d2d586f4e', + 'kiko/dm': 'b3e39946ab70', + 'kiko/message': '6730b9df5bfa', + 'kiko/invite': '1a3c1d118b9e', + 'libby/mention': 'eb9f3ac60b02', + 'libby/dm': '77dfd01cc3ca', + 'libby/message': '257b84a114a2', + 'libby/invite': '8ef7e91100b8', + 'nibu/mention': '56484d731df3', + 'nibu/dm': '573f5db4de4b', + 'nibu/message': '30f6a5c9ce54', + 'nibu/invite': 'bb36c0975f35', + 'void/mention': 'dee69f4af562', + 'void/dm': '92e3ebbc0b29', + 'void/message': 'fadc5556b681', + 'void/invite': 'd602121389d8', + 'weksa/mention': 'db46a36ab3c5', + 'weksa/dm': 'efe993382a46', + 'weksa/message': '00e323635949', + 'weksa/invite': '9bf03a36758b', +}; const MOTIFS: Motif[] = ['mention', 'dm', 'message', 'invite']; const VOICES = ['aqua', 'eureka', 'heimdall', 'kiko', 'libby', 'nibu', 'void', 'weksa']; @@ -37,7 +72,7 @@ describe('dings switch', () => { }); }); -describe('v3 manifest against the parser', () => { +describe('v4 manifest against the parser', () => { it('survives parseManifest whole: no path or motif is dropped', () => { expect(manifest.neutral).toEqual(raw.neutral); expect(Object.keys(manifest.senders).sort()).toEqual(VOICES); @@ -72,17 +107,11 @@ describe('v3 manifest against the parser', () => { }); }); - it("Nibu's four files are AquaSynth's proposals/nibu3 (sha256 prefix)", () => { - const want: Record = { - mention: '3833f504903f', - dm: 'ad4839400f2c', - message: '6ec6fc893b94', - invite: 'aefb6ff79c42', - }; - MOTIFS.forEach((m) => { - const hash = createHash('sha256').update(readFileSync(join(DINGS, `senders/nibu/${m}.ogg`))); - expect(hash.digest('hex').slice(0, 12)).toBe(want[m]); - }); + it("every voice file is Aqua's v4 render (sha256 prefix)", () => { + const hash = (file: string) => + createHash('sha256').update(readFileSync(join(DINGS, file))).digest('hex').slice(0, 12); + expect(Object.keys(V4_SHA).length).toBe(VOICES.length * MOTIFS.length); + Object.entries(V4_SHA).forEach(([k, want]) => expect(hash(`senders/${k}.ogg`)).toBe(want)); }); it('keeps the clip lengths the design assumes: message under 400 ms, nothing over 600 ms', () => {