// Радио плеер через Windows Media Player COM объект const { spawn } = require('child_process'); const fs = require('fs'); const path = require('path'); class WMPRadioPlayer { constructor() { this.radioProcess = null; this.isPlaying = false; this.volume = 70; this.currentUrl = null; } play(url) { this.stop(); // Добавляем протокол если его нет if (!url.startsWith('http://') && !url.startsWith('https://')) { url = 'http://' + url; } console.log('[RADIO] 📻 Запуск радио через WMP:', url); this.currentUrl = url; // VBScript для управления Windows Media Player const vbscript = ` Set WMP = CreateObject("WMPlayer.OCX") WMP.settings.autoStart = True WMP.settings.volume = ${this.volume} WMP.URL = "${url}" ' Ждем пока не начнет играть Do While WMP.playState <> 3 WScript.Sleep 100 Loop WScript.Echo "Playing" ' Держим скрипт активным Do While True WScript.Sleep 1000 If WMP.playState <> 3 Then WScript.Echo "Stopped" WScript.Quit End If Loop`; // Сохраняем скрипт const scriptPath = path.join(__dirname, 'temp_radio.vbs'); fs.writeFileSync(scriptPath, vbscript); // Запускаем через cscript (консольный режим) this.radioProcess = spawn('cscript', ['//NoLogo', scriptPath]); this.radioProcess.stdout.on('data', (data) => { const output = data.toString().trim(); console.log('[RADIO] Статус:', output); if (output === 'Playing') { this.isPlaying = true; } else if (output === 'Stopped') { this.isPlaying = false; } }); this.radioProcess.stderr.on('data', (data) => { console.error('[RADIO] Ошибка:', data.toString()); }); this.radioProcess.on('exit', (code) => { console.log('[RADIO] Процесс завершен с кодом:', code); this.isPlaying = false; // Удаляем временный файл try { fs.unlinkSync(scriptPath); } catch (e) {} }); this.radioProcess.on('error', (err) => { console.error('[RADIO] Ошибка запуска:', err.message); this.isPlaying = false; }); } stop() { if (this.radioProcess) { console.log('[RADIO] ⏹️ Остановка радио'); this.radioProcess.kill(); this.radioProcess = null; // Также убиваем все WMP процессы spawn('taskkill', ['/F', '/IM', 'wmplayer.exe'], { stdio: 'ignore' }); } this.isPlaying = false; this.currentUrl = null; } setVolume(volume) { this.volume = Math.max(0, Math.min(100, volume)); console.log('[RADIO] 🔊 Установка громкости:', this.volume); // Для изменения громкости нужно перезапустить if (this.isPlaying && this.currentUrl) { const url = this.currentUrl; this.stop(); setTimeout(() => this.play(url), 500); } } } module.exports = WMPRadioPlayer;