.clef-indicator font-size: 18px; font-weight: bold; margin-bottom: 10px; text-align: center; color: #ffd700; </style> </head> <body> <div class="container"> <div class="player"> <div class="controls"> <input type="file" id="midiFileInput" accept=".mid,.midi"> <button id="playBtn">▶ Play</button> <button id="pauseBtn">⏸ Pause</button> <button id="stopBtn">⏹ Stop</button> </div> <div class="clef-indicator" id="clefIndicator">Clef: --</div> <div class="staff-container"> <canvas id="staffCanvas" width="900" height="300"></canvas> </div> <div class="lyrics" id="lyricsDisplay">🎵 Load a MIDI file to start 🎵</div> <div class="info"> 🎹 Supports karaoke MIDI files with lyrics | Clef auto-detected | Scrolling notes </div> </div> </div>
.container background: rgba(255,255,255,0.1); backdrop-filter: blur(10px); border-radius: 30px; padding: 25px; box-shadow: 0 20px 40px rgba(0,0,0,0.3); border: 1px solid rgba(255,255,255,0.2);
play() !this.notes.length) return; if (this.audioContext.state === 'suspended') this.audioContext.resume(); if (!this.isPlaying) this.startTime = performance.now() - (this.currentPauseTime * 1000); this.isPlaying = true; this.playMIDINotes(); this.drawStaff(); // Update lyrics in real-time const lyricInterval = setInterval(() => if (!this.isPlaying) clearInterval(lyricInterval); this.updateLyrics(); , 100);
.lyrics background: rgba(0,0,0,0.7); color: #ffd700; padding: 15px; border-radius: 15px; text-align: center; font-size: 20px; font-weight: bold; margin-top: 15px; font-family: monospace;
.player background: #0f0f1a; border-radius: 20px; padding: 20px; box-shadow: inset 0 1px 3px rgba(255,255,255,0.1), 0 10px 20px rgba(0,0,0,0.5);
Midi Clef Karaoke Player 〈TESTED | 2024〉
.clef-indicator font-size: 18px; font-weight: bold; margin-bottom: 10px; text-align: center; color: #ffd700; </style> </head> <body> <div class="container"> <div class="player"> <div class="controls"> <input type="file" id="midiFileInput" accept=".mid,.midi"> <button id="playBtn">▶ Play</button> <button id="pauseBtn">⏸ Pause</button> <button id="stopBtn">⏹ Stop</button> </div> <div class="clef-indicator" id="clefIndicator">Clef: --</div> <div class="staff-container"> <canvas id="staffCanvas" width="900" height="300"></canvas> </div> <div class="lyrics" id="lyricsDisplay">🎵 Load a MIDI file to start 🎵</div> <div class="info"> 🎹 Supports karaoke MIDI files with lyrics | Clef auto-detected | Scrolling notes </div> </div> </div>
.container background: rgba(255,255,255,0.1); backdrop-filter: blur(10px); border-radius: 30px; padding: 25px; box-shadow: 0 20px 40px rgba(0,0,0,0.3); border: 1px solid rgba(255,255,255,0.2); midi clef karaoke player
play() !this.notes.length) return; if (this.audioContext.state === 'suspended') this.audioContext.resume(); if (!this.isPlaying) this.startTime = performance.now() - (this.currentPauseTime * 1000); this.isPlaying = true; this.playMIDINotes(); this.drawStaff(); // Update lyrics in real-time const lyricInterval = setInterval(() => if (!this.isPlaying) clearInterval(lyricInterval); this.updateLyrics(); , 100); .clef-indicator font-size: 18px
.lyrics background: rgba(0,0,0,0.7); color: #ffd700; padding: 15px; border-radius: 15px; text-align: center; font-size: 20px; font-weight: bold; margin-top: 15px; font-family: monospace; input type="file" id="midiFileInput" accept=".mid
.player background: #0f0f1a; border-radius: 20px; padding: 20px; box-shadow: inset 0 1px 3px rgba(255,255,255,0.1), 0 10px 20px rgba(0,0,0,0.5);
HumminGuru say the provided solution doesn’t contain alcohol, so no worries there. However, alcohol isn’t your biggest problem. It is generally not recommended to use ultrasonic cleaners with shellac records, because they are more brittle than vinyl, and if they happen to have microscopic fissures, the ultrasonic process can extend them and can cause the record to crack.
HumminGuru advise against washing shellac records in their ultrasonic cleaners precisely for this reason.