|
|
|
|
|
|
|
|
|
|
| |
| import { |
| WORKLET_URL_ABSOLUTE |
| } from "./spessasynth_lib/synthetizer/worklet_url.js"; |
| import { |
| Sequencer |
| } from "./spessasynth_lib/sequencer/sequencer.js"; |
| import { |
| Synthetizer |
| } from "./spessasynth_lib/synthetizer/synthetizer.js"; |
|
|
| |
| fetch( |
| "./spessasynth_lib/soundfonts/GeneralUserGS.sf3" |
| ).then(async (response) => { |
| |
| let soundFontBuffer = await response.arrayBuffer(); |
| document.getElementById("message").innerText = "O PLAY MIDI FOI CARREGADO!"; |
|
|
| |
| const context = new AudioContext(); |
| await context.audioWorklet.addModule( |
| new URL( |
| "./spessasynth_lib/" + |
| WORKLET_URL_ABSOLUTE, |
| import.meta.url |
| ) |
| ); |
|
|
| |
| const gainNode = context.createGain(); |
| gainNode.connect(context.destination); |
|
|
| const synth = new Synthetizer(gainNode, soundFontBuffer); |
| let seq; |
|
|
| |
| document |
| .getElementById("midi_input") |
| .addEventListener("change", async (event) => { |
| if (!event.target.files[0]) { |
| return; |
| } |
| await context.resume(); |
|
|
| const parsedSongs = []; |
| for (let file of event.target.files) { |
| const buffer = await file.arrayBuffer(); |
| parsedSongs.push({ |
| binary: buffer, |
| altName: file.name |
| }); |
| } |
|
|
| if (seq === undefined) { |
| seq = new Sequencer(parsedSongs, synth); |
| seq.play(); |
| } else { |
| seq.loadNewSongList(parsedSongs); |
| } |
|
|
| seq.loop = false; |
|
|
| |
| let slider = document.getElementById("progress"); |
| setInterval(() => { |
| slider.value = (seq.currentTime / seq.duration) * 1000; |
| }, 100); |
|
|
| seq.addOnSongChangeEvent((e) => { |
| document.getElementById("message").innerHTML = |
| "Tocando agora: " + e.midiName + "<img type='button 'title='CAPA' src='./d-framework/icon/144/favicon.png' class='img-thumbnail rounded-circle border-2 p-0 bg-hover border-warning ms-2' width='40' height='40' />"; |
| }, "example-time-change"); |
|
|
| slider.onchange = () => { |
| seq.currentTime = (slider.value / 1000) * seq.duration; |
| }; |
|
|
| document.getElementById("previous").onclick = () => { |
| seq.previousSong(); |
| }; |
|
|
| document.getElementById("pause").onclick = () => { |
| if (seq.paused) { |
| document.getElementById("pause").innerHTML = "<i class='bi bi-pause'></i>"; |
| seq.play(); |
| } else { |
| document.getElementById("pause").innerHTML = "<i class='bi bi-play'></i>"; |
| seq.pause(); |
| } |
| }; |
|
|
| document.getElementById("next").onclick = () => { |
| seq.nextSong(); |
| }; |
| }); |
|
|
| |
| const volumeControl = document.getElementById("volume"); |
| volumeControl.addEventListener("input", () => { |
| gainNode.gain.value = parseFloat(volumeControl.value); |
| }); |
| }); |
|
|