Replaced all references to notification.mp3 with hohoho.mp3 in notification-related components and context. Added hohoho.mp3 to the public directory. Introduced a script (download-notification-sound.js) for downloading notification sounds from YouTube using @distube/ytdl-core, which was added as a devDependency. Also added yt-dlp.exe for alternative audio downloading.
75 lines
2.3 KiB
JavaScript
75 lines
2.3 KiB
JavaScript
/**
|
|
* Script to download notification sound from YouTube
|
|
* Uses @distube/ytdl-core to download audio
|
|
*/
|
|
|
|
const ytdl = require('@distube/ytdl-core');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const YOUTUBE_URL = 'https://www.youtube.com/watch?v=utmKQWAuYH4';
|
|
const OUTPUT_PATH = path.join(__dirname, '..', 'public', 'notification.mp3');
|
|
|
|
console.log('Downloading notification sound from YouTube...');
|
|
console.log(`URL: ${YOUTUBE_URL}`);
|
|
console.log(`Output: ${OUTPUT_PATH}`);
|
|
|
|
async function downloadAudio() {
|
|
try {
|
|
// Validate URL
|
|
if (!ytdl.validateURL(YOUTUBE_URL)) {
|
|
throw new Error('Invalid YouTube URL');
|
|
}
|
|
|
|
// Get video info
|
|
console.log('\nFetching video information...');
|
|
const info = await ytdl.getInfo(YOUTUBE_URL);
|
|
console.log(`Title: ${info.videoDetails.title}`);
|
|
|
|
// Get audio format
|
|
const audioFormats = ytdl.filterFormats(info.formats, 'audioonly');
|
|
if (audioFormats.length === 0) {
|
|
throw new Error('No audio formats available');
|
|
}
|
|
|
|
// Select best quality audio
|
|
const format = audioFormats[0];
|
|
console.log(`\nDownloading audio format: ${format.audioCodec || 'unknown'}`);
|
|
|
|
// Create write stream
|
|
const outputStream = fs.createWriteStream(OUTPUT_PATH);
|
|
|
|
// Download audio
|
|
const audioStream = ytdl.downloadFromInfo(info, { format });
|
|
|
|
audioStream.pipe(outputStream);
|
|
|
|
audioStream.on('progress', (chunkLength, downloaded, total) => {
|
|
const percent = (downloaded / total * 100).toFixed(2);
|
|
process.stdout.write(`\rDownloaded: ${percent}%`);
|
|
});
|
|
|
|
await new Promise((resolve, reject) => {
|
|
outputStream.on('finish', () => {
|
|
console.log('\n\n✅ Successfully downloaded notification sound!');
|
|
resolve();
|
|
});
|
|
outputStream.on('error', reject);
|
|
audioStream.on('error', reject);
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('\n❌ Error downloading audio:', error.message);
|
|
console.error('\nAlternative options:');
|
|
console.log('1. Install yt-dlp: pip install yt-dlp');
|
|
console.log('2. Download executable: https://github.com/yt-dlp/yt-dlp/releases');
|
|
console.log('3. Use online converter');
|
|
console.log('\nThen run:');
|
|
console.log(`yt-dlp -x --audio-format mp3 --audio-quality 0 -o "public/notification.mp3" "${YOUTUBE_URL}"`);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
downloadAudio();
|
|
|