143 lines
4.4 KiB
JavaScript
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()'); |