Switch notification sound to hohoho.mp3 and add download script
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.
This commit is contained in:
74
scripts/download-notification-sound.js
Normal file
74
scripts/download-notification-sound.js
Normal file
@@ -0,0 +1,74 @@
|
||||
/**
|
||||
* 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();
|
||||
|
||||
Reference in New Issue
Block a user