training-academy/audio-validator.js

143 lines
4.4 KiB
JavaScript

/**
* Audio File Validator
* This script tests which audio files can actually be loaded by the browser
*/
async function validateAudioFiles() {
console.log('🎵 Starting audio file validation...');
const audioStructure = {
tasks: {
teasing: [
'enjoying-a-giant-cock.mp3',
'horny-japanese-babe-japanese-sex.mp3',
'long-and-hard-moan.mp3',
'playing-her-pussy-with-a-dildo-japanese-sex.mp3',
'u.mp3'
],
intense: [
'bree-olson-screaming-orgasm-sound.mp3',
'carmela-bing-screaming-orgasm-sound.mp3',
'moaning-ringtone.mp3',
'multiple-orgasms-with-creamy-pussy.mp3'
],
instructions: [
'addict-to-my-tits-854x480p.mp3',
'deeper.mp3',
'you-love-to-goon.mp3'
]
},
punishments: {
denial: [
'addicted-to-my-tits-tit-worship-mesmerize-joi-mov.mp3',
'dumb-gooner-bitch-4-big-tits.mp3',
'you-will-be-left-thoughtless.mp3'
],
mocking: [
'precise-denial.mp3',
'punishment-episode-cockring-causes-cumshots-cumshots-gameplay-only.mp3',
'quick-jerk-to-tits-in-pink-bra-1080p-ellie-idol.mp3',
'stroke-your-goon-bud.mp3'
]
},
rewards: {
completion: ['u.mp3']
}
};
const results = {
working: [],
failed: [],
total: 0
};
for (const [category, subcategories] of Object.entries(audioStructure)) {
for (const [subcategory, files] of Object.entries(subcategories)) {
for (const file of files) {
const audioPath = `audio/${category}/${subcategory}/${file}`;
results.total++;
try {
const canLoad = await testAudioFile(audioPath);
if (canLoad) {
results.working.push(audioPath);
console.log(`${audioPath} - OK`);
} else {
results.failed.push(audioPath);
console.log(`${audioPath} - FAILED`);
}
} catch (error) {
results.failed.push(audioPath);
console.log(`${audioPath} - ERROR: ${error.message}`);
}
// Small delay to prevent browser overload
await new Promise(resolve => setTimeout(resolve, 100));
}
}
}
console.log('\n🎵 Audio Validation Results:');
console.log(`✅ Working files: ${results.working.length}/${results.total}`);
console.log(`❌ Failed files: ${results.failed.length}/${results.total}`);
if (results.failed.length > 0) {
console.log('\n❌ Failed files:');
results.failed.forEach(file => console.log(` - ${file}`));
}
if (results.working.length > 0) {
console.log('\n✅ Working files:');
results.working.forEach(file => console.log(` - ${file}`));
}
return results;
}
async function testAudioFile(audioPath) {
return new Promise((resolve) => {
const audio = new Audio(audioPath);
let resolved = false;
const cleanup = () => {
if (!resolved) {
resolved = true;
audio.pause();
audio.src = '';
}
};
audio.addEventListener('canplay', () => {
if (!resolved) {
cleanup();
resolve(true);
}
});
audio.addEventListener('error', () => {
if (!resolved) {
cleanup();
resolve(false);
}
});
// Timeout after 5 seconds
setTimeout(() => {
if (!resolved) {
cleanup();
resolve(false);
}
}, 5000);
// Start loading
audio.load();
});
}
// Make functions available globally
window.audioValidator = {
validateAudioFiles,
testAudioFile
};
console.log('🎵 Audio validator loaded. Run: window.audioValidator.validateAudioFiles()');