"use client"; import { useEffect, useRef, useState } from 'react'; import MidiPlayer from 'midi-player-js'; import Soundfont from 'soundfont-player'; export default function Home() { const audioCtx = useRef(new (window.AudioContext || (window as any).webkitAudioContext)()); const instrument = useRef(null); const player = useRef(null); const [loaded, setLoaded] = useState(false); useEffect(() => { Soundfont.instrument(audioCtx.current, 'acoustic_grand_piano').then(inst => { instrument.current = inst; player.current = new MidiPlayer.Player(event => { if (event.name === 'Note on' && event.velocity > 0) instrument.current.play(event.noteName); if (event.name === 'Note off' || (event.name === 'Note on' && event.velocity === 0)) instrument.current.stop(event.noteName); }); setLoaded(true); }); return () => audioCtx.current.close(); }, []); const loadMidi = (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (file) { const reader = new FileReader(); reader.onload = () => player.current.loadArrayBuffer(reader.result); reader.readAsArrayBuffer(file); } }; return (

MIDI Player Lite

{loaded ? : "Loading..."}
); }