您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Réglages pour les sons de Musescore
当前为
- // ==UserScript==
- // @name MuseScore Dynamic Balance
- // @namespace MuseScoreEnhancements
- // @version 2.5
- // @description Réglages pour les sons de Musescore
- // @author Yglsan
- // @match *://*/*
- // @grant GM_addStyle
- // @grant GM_registerMenuCommand
- // @license GNU GPL 3.0
- // ==/UserScript==
- (function() {
- 'use strict';
- const CONFIG = {
- mainGauche: {
- attenuation: 0.7, // Réduction de volume (0-1)
- rangeNotes: [48, 72], // Plage MIDI pour la main gauche (C3 à C5)
- fadeFinNote: 0.15 // Derniers 15% de la note en fondu
- },
- mainDroite: {
- boost: 1.1, // Légère amplification
- fadeFinNote: 0.05 // Derniers 5% en fondu
- },
- effetResonance: {
- attenuation: 0.85, // Réduction des harmoniques basses
- frequenceCoupe: 250 // Hz
- }
- };
- let isActive = false;
- let originalNoteData = new WeakMap();
- class NoteProcessor {
- static process(note) {
- if (!originalNoteData.has(note)) {
- originalNoteData.set(note, {
- velocity: note.velocity,
- tuning: note.tuning,
- timbre: note.timbre
- });
- }
- const isMainGauche = this.estMainGauche(note);
- this.appliquerBalance(note, isMainGauche);
- this.appliquerFondu(note, isMainGauche);
- }
- static estMainGauche(note) {
- return note.pitch >= CONFIG.mainGauche.rangeNotes[0] &&
- note.pitch <= CONFIG.mainGauche.rangeNotes[1];
- }
- static appliquerBalance(note, isMainGauche) {
- const original = originalNoteData.get(note);
- if (isMainGauche) {
- // Atténuation progressive basée sur la vélocité originale
- let attenuation = CONFIG.mainGauche.attenuation;
- if (original.velocity < 64) attenuation += 0.15;
- note.velocity = Math.min(127,
- Math.round(original.velocity * attenuation));
- // Réduction des basses fréquences
- note.timbre = original.timbre * CONFIG.effetResonance.attenuation;
- note.tuning = original.tuning - 20; // Léger detune
- } else {
- note.velocity = Math.min(127,
- Math.round(original.velocity * CONFIG.mainDroite.boost));
- }
- }
- static appliquerFondu(note, isMainGauche) {
- const fadePercent = isMainGauche ?
- CONFIG.mainGauche.fadeFinNote :
- CONFIG.mainDroite.fadeFinNote;
- note.playbackRate = this.calculerCourbeFondu(
- note.duration,
- fadePercent
- );
- }
- static calculerCourbeFondu(duration, fadePercent) {
- const fadeTime = duration * fadePercent;
- return [
- { time: 0, value: 1.0 },
- { time: duration - fadeTime, value: 1.0 },
- { time: duration, value: 0.3 }
- ];
- }
- }
- function toggleEnhancements() {
- isActive = !isActive;
- const score = MuseScore.getCurrentScore();
- score.notes.forEach(note => {
- if (isActive) {
- NoteProcessor.process(note);
- } else {
- const original = originalNoteData.get(note);
- if (original) {
- Object.assign(note, original);
- }
- }
- });
- score.updatePlayback();
- updateUI();
- }
- function createControlPanel() {
- const panel = document.createElement('div');
- panel.id = 'ms-balance-panel';
- panel.style.cssText = `
- position: fixed;
- top: 20px;
- right: 20px;
- background: #2c3e50;
- color: white;
- padding: 15px;
- border-radius: 8px;
- z-index: 10000;
- font-family: 'Arial', sans-serif;
- `;
- panel.innerHTML = `
- <h3 style="margin:0 0 10px 0;">Balance Dynamique</h3>
- <div class="slider-container">
- <label>Atténuation main gauche:
- <input type="range" min="0.3" max="1.0" step="0.05"
- value="${CONFIG.mainGauche.attenuation}" id="attenuation">
- </label>
- <span id="attenuation-value">${CONFIG.mainGauche.attenuation}</span>
- </div>
- <div class="slider-container">
- <label>Fondu main gauche:
- <input type="range" min="0.05" max="0.3" step="0.01"
- value="${CONFIG.mainGauche.fadeFinNote}" id="fade">
- </label>
- <span id="fade-value">${CONFIG.mainGauche.fadeFinNote}</span>
- </div>
- <button id="ms-balance-toggle" style="${getButtonStyle(isActive)}">
- ${isActive ? 'Désactiver' : 'Activer'}
- </button>
- `;
- panel.querySelector('#attenuation').addEventListener('input', e => {
- CONFIG.mainGauche.attenuation = parseFloat(e.target.value);
- panel.querySelector('#attenuation-value').textContent = e.target.value;
- if (isActive) toggleEnhancements();
- });
- panel.querySelector('#fade').addEventListener('input', e => {
- CONFIG.mainGauche.fadeFinNote = parseFloat(e.target.value);
- panel.querySelector('#fade-value').textContent = e.target.value;
- if (isActive) toggleEnhancements();
- });
- panel.querySelector('#ms-balance-toggle').addEventListener('click', toggleEnhancements);
- document.body.appendChild(panel);
- }
- function initialize() {
- if (typeof MuseScore === 'undefined') {
- setTimeout(initialize, 500);
- return;
- }
- createControlPanel();
- GM_registerMenuCommand('Toggle Balance', toggleEnhancements);
- }
- GM_addStyle(`
- #ms-balance-panel .slider-container {
- margin: 10px 0;
- }
- #ms-balance-panel input[type="range"] {
- width: 180px;
- margin-top: 5px;
- }
- `);
- window.addEventListener('load', initialize);
- })();