-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
107 lines (81 loc) · 2.13 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
let noteSequence;
const model = initModel();
// event listener for upload button
fileInput.addEventListener("change", (e) => {
updateWorkingState(btnUpload);
requestAnimationFrame(() =>
requestAnimationFrame(() => {
transcribeFromFile(e.target.files[0]);
fileInput.value = null;
})
);
return false;
});
// function to convert to midi
async function transcribeFromFile(blob) {
hideResult();
model.transcribeFromAudioFile(blob).then((ns) => {
noteSequence = ns;
resetUIState();
showResult();
});
}
function updateWorkingState(active, inactive) {
transcribingMessage.hidden = false;
active.classList.add("working");
}
function resetUIState() {
btnUpload.classList.remove("working");
btnUpload.removeAttribute("disabled");
}
function hideResult() {
saveBtn.hidden = true;
container.hidden = true;
done.hidden = true;
}
// renders when conversion is complete
function showResult() {
document.getElementById('done').innerText = "Done Transcribing!!!";
container.hidden = false;
saveBtn.hidden = false;
done.hidden = false;
transcribingMessage.hidden = true;
}
// Download midi file on save button press
function saveMidi(event) {
event.stopImmediatePropagation();
document.getElementById('done').innerText = "Saved!!";
saveAs(
new File(
[mm.sequenceProtoToMidi(noteSequence)],
"transcription.mid"
)
);
}
// initialize majenta js model
function initModel() {
const model = new mm.OnsetsAndFrames(
"https://storage.googleapis.com/magentadata/js/checkpoints/transcription/onsets_frames_uni"
);
model.initialize().then(() => {
resetUIState();
modelLoading.hidden = true;
modelReady.hidden = false;
});
// Things are slow on Safari.
if (window.webkitOfflineAudioContext) {
safariWarning.hidden = false;
}
// Things are very broken on ios12.
if (navigator.userAgent.indexOf("iPhone OS 12_0") >= 0) {
iosError.hidden = false;
buttons.hidden = true;
}
return model;
}
function removetext() {
document.getElementById("footer").remove();
}
function transcribeText() {
document.getElementById('done').hidden=true;
}