Index: src/routes/audio.js
===================================================================
--- src/routes/audio.js	(revision 21522aeeeadc321d1358c416b7223a6300a03996)
+++ src/routes/audio.js	(revision 1be21ba2ec5d901a86fc24bad71b4a96d6492b6d)
@@ -28,4 +28,6 @@
 import path from 'path';
 import { fileURLToPath } from 'url';
+import db from '../config/database.js';
+import { recordPlay } from '../services/StatsService.js';
 
 const __dirname = path.dirname(fileURLToPath(import.meta.url));
@@ -90,4 +92,17 @@
   const range = req.headers.range;
 
+  // Statistieken: tel één play bij de initiële player-fetch (niet bij scrub/
+  // range-continuaties; replays binnen 24u komen uit de browsercache → geen
+  // dubbeltelling). Best-effort, mag nooit de stream breken.
+  if (req.get('X-Audio-Player') === '1' && (!range || /^bytes=0-/.test(range))) {
+    try {
+      const tr = db.prepare(`
+        SELECT t.id FROM audio_tracks t JOIN media m ON t.media_id = m.id
+        WHERE m.storage_path = ? OR m.storage_path LIKE ? LIMIT 1
+      `).get(filename, '%' + filename);
+      if (tr) recordPlay(tr.id);
+    } catch {}
+  }
+
   // Common headers
   res.setHeader('Content-Type', mime);
