您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
chesscom sound
// ==UserScript== // @name Lichess Sound Pack chesscom // @namespace jwapobie // @description chesscom sound // @match https://*.lichess.org/* // @match https://lichess.org/* // @version 1.5 // @grant GM_xmlhttpRequest // @connect images.chesscomfiles.com // @license MIT // ==/UserScript== // this function makes the request and puts it in an decoded audio buffer window.AudioContext = window.AudioContext || window.webkitAudioContext; var context = new AudioContext(); function loadSound(url) { return new Promise(function(resolve, reject) { // This will get around the CORS issue // http://wiki.greasespot.net/GM_xmlhttpRequest var req = GM_xmlhttpRequest({ method: "GET", url: url, responseType: 'arraybuffer', onload: function(response) { try { context.decodeAudioData(response.response, function(buffer) { resolve(buffer) }, function(e) { reject(e); }); } catch(e) { reject(e); } } }); }) } // adjust volume var volNode; if( context.createGain instanceof Function ) { volNode = context.createGain(); } else if( context.createGainNode instanceof Function ) { volNode = context.createGainNode(); } // Connect the volume control the the speaker volNode.connect( context.destination ); // allocate buffers for sounds var customSndList = new Map([ ['move','https://images.chesscomfiles.com/chess-themes/sounds/_MP3_/default//move-self.mp3'], ['capture','https://images.chesscomfiles.com/chess-themes/sounds/_MP3_/default/capture.mp3'], ['check','https://images.chesscomfiles.com/chess-themes/sounds/_MP3_/default/move-check.mp3'], ['victory','https://images.chesscomfiles.com/chess-themes/sounds/_MP3_/default/game-win.mp3'], ['defeat','https://images.chesscomfiles.com/chess-themes/sounds/_MP3_/default/game-end.mp3'], ['draw','https://images.chesscomfiles.com/chess-themes/sounds/_MP3_/default/game-draw.mp3'], ['genericNotify','https://images.chesscomfiles.com/chess-themes/sounds/_MP3_/default/dong.mp3'], ['lowTime','https://images.chesscomfiles.com/chess-themes/sounds/_MP3_/default/lowtime.mp3'], ['castle','https://images.chesscomfiles.com/chess-themes/sounds/_MP3_/default/castle.mp3'], ]) var customSnds = {}; customSndList.forEach(function(element, index) { loadSound(element).then(function(buffer) {customSnds[index] = buffer;}, function(e) {console.log(e);}) }); // use this later in the script function playSound(buffer, volume) { // creates a sound source var source = context.createBufferSource(); // tell the source which sound to play source.buffer = buffer; // connect the source to the context's destination (the speakers) volNode.gain.value = volume; source.connect(volNode); // play the source now // note: on older systems, may have to use deprecated noteOn(time); source.start(0); } site.sound.origPlay = site.sound.play; function Suite(name,volume) { var move ="" if (document.getElementsByClassName('a1t')[0] != undefined){ move = document.getElementsByClassName('a1t')[0].innerText } if (move == "O-O"){ name = "castle"} if (move == "O-O-O"){ name = "castle"} if (customSnds[name]) { if (!volume) volume = site.sound.getVolume(); playSound(customSnds[name], volume / 2); } else { site.sound.origPlay(name, volume); } } function customPlay(name, volume) { setTimeout(Suite,100,name,volume); } site.sound.play = customPlay; console.log("Applied UminekoSoundPack");