E-Campus VOD Closer

온라인 강의 수강완료 후 알림 및 창 닫기

// ==UserScript==
// @name         E-Campus VOD Closer
// @namespace    hjh
// @version      0.1
// @description  온라인 강의 수강완료 후 알림 및 창 닫기
// @author       You
// @match        http*://ecampus.changwon.ac.kr/mod/vod/viewer.php?id=*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=ac.kr
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    function playMelody() {
        // 오디오 컨텍스트 생성
        const AudioContext = window.AudioContext || window.webkitAudioContext;
        const audioCtx = new AudioContext();

        // 각 음계의 주파수 정보
        const frequencies = {
            '도': 261.63,
            '레': 293.66,
            '미': 329.63,
            '파': 349.23,
            '솔': 392.00,
            '라': 440.00,
            '시': 493.88,
        };

        // 도미솔 미디 음계 리스트
        const melody = ['도', '미', '솔'];

        // 오디오 컨텍스트 상수 설정
        const duration = 0.3; // 음 길이 (0.5초)
        const volume = 0.5; // 볼륨 (0.5)

        // 음계를 순회하며 주파수 대역과 음 길이, 볼륨 설정 후 재생
        melody.forEach((note, index) => {
            // 오디오 소스 노드 생성
            const oscillator = audioCtx.createOscillator();
            const gainNode = audioCtx.createGain();

            // 주파수 대역 설정
            oscillator.frequency.setValueAtTime(frequencies[note], audioCtx.currentTime);

            // 음 길이 설정
            const startTime = index * duration;
            const endTime = startTime + duration;
            oscillator.start(startTime);
            oscillator.stop(endTime);

            // 볼륨 설정
            gainNode.gain.setValueAtTime(volume, audioCtx.currentTime);

            // 소스 노드 연결 후 재생
            oscillator.connect(gainNode);
            gainNode.connect(audioCtx.destination);
        });
    }

    setInterval(() => {
        const remainingTime = document.querySelector('.vjs-remaining-time-display').textContent;
        const h1 = document.querySelector('#vod_header > h1');
        var title = h1.textContent;
        document.title = `${remainingTime} ${title}`;
        if (remainingTime === "0:00") {
            playMelody();
            window.close();
        }
    }, 1000);

})();