Index: src/routes/admin-audio.js
===================================================================
--- src/routes/admin-audio.js	(revision 3e86f1cca344a75facd291ef34a6bf56445bf532)
+++ src/routes/admin-audio.js	(revision 91d948cfb84fbb09cae0bdb3f457713e463e8456)
@@ -37,6 +37,11 @@
 const ALLOWED_AUDIO_EXT = new Set(['.mp3', '.m4a', '.mp4', '.aac', '.oga', '.ogg', '.opus', '.flac', '.wav', '.webm']);
 const ALLOWED_COVER_EXT = new Set(['.jpg', '.jpeg', '.png', '.webp', '.gif']);
-const MAX_AUDIO_BYTES = 50 * 1024 * 1024;  // 50 MB
-const MAX_COVER_BYTES = 5 * 1024 * 1024;   // 5 MB
+const MAX_AUDIO_BYTES = 50 * 1024 * 1024;   // 50 MB — gecomprimeerde formaten (mp3/m4a/ogg/…)
+const MAX_WAV_BYTES   = 100 * 1024 * 1024;  // 100 MB — WAV is ongecomprimeerd, dus ruimer
+const MAX_COVER_BYTES = 5 * 1024 * 1024;    // 5 MB
+
+// Per-bestand bovengrens op basis van extensie. multer's globale limiet is de
+// hoogste (WAV); de echte controle per type gebeurt in de upload-handler.
+const audioByteLimitFor = (ext) => (ext.toLowerCase() === '.wav' ? MAX_WAV_BYTES : MAX_AUDIO_BYTES);
 
 // Multer routes audio + cover into separate dirs based on field name.
@@ -53,5 +58,5 @@
 const upload = multer({
   storage,
-  limits: { fileSize: MAX_AUDIO_BYTES }, // upper bound — per-field check below
+  limits: { fileSize: MAX_WAV_BYTES }, // hoogste bovengrens (WAV) — per-type check in de handler
   fileFilter: (req, file, cb) => {
     const ext = path.extname(file.originalname).toLowerCase();
@@ -93,4 +98,5 @@
     success: req.query.success || null,
     maxBytesMb: Math.round(MAX_AUDIO_BYTES / 1024 / 1024),
+    maxWavMb: Math.round(MAX_WAV_BYTES / 1024 / 1024),
   });
 });
@@ -119,4 +125,14 @@
       if (coverFile) try { fs.unlinkSync(coverFile.path); } catch {}
       return fail(400, 'missing audio file');
+    }
+
+    // Per-type audio size check. multer's globale limiet was de WAV-bovengrens
+    // (100MB); gecomprimeerde formaten blijven op 50MB.
+    const audioExt = path.extname(audioFile.originalname).toLowerCase();
+    const audioLimit = audioByteLimitFor(audioExt);
+    if (audioFile.size > audioLimit) {
+      try { fs.unlinkSync(audioFile.path); } catch {}
+      if (coverFile) try { fs.unlinkSync(coverFile.path); } catch {}
+      return fail(400, `audio te groot (max ${Math.round(audioLimit / 1024 / 1024)}MB voor ${audioExt || 'dit type'})`);
     }
 
