【发布时间】:2018-12-15 21:09:16
【问题描述】:
是否可以将出色的MidiConvert 与base64 编码的midi 数据一起使用?
我的数据如下所示:
data:audio/midi;base64,TVRoZAAAAAYAAQAOAeBNVHJrAAAALwD/Awl...
我想在浏览器中执行此操作。
【问题讨论】:
标签: javascript parsing base64 midi
是否可以将出色的MidiConvert 与base64 编码的midi 数据一起使用?
我的数据如下所示:
data:audio/midi;base64,TVRoZAAAAAYAAQAOAeBNVHJrAAAALwD/Awl...
我想在浏览器中执行此操作。
【问题讨论】:
标签: javascript parsing base64 midi
我能够使用以下方法使其工作,将 base64 编码的数据转换为Blob,以便可以使用FileReader 读取它,使其可以与MidiConvert.parse 一起使用:
dataURItoBlob = dataURI => {
const byteString = atob(dataURI.split(',')[1]);
const mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
let ab = new ArrayBuffer(byteString.length);
let ia = new Uint8Array(ab);
for (let i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ab], {type: mimeString});
};
parseMidiFromDataURI = dataURI => {
const reader = new FileReader();
reader.onload = e => {
const partsData = MidiConvert.parse(e.target.result);
console.log(JSON.stringify(partsData, undefined, 2));
};
reader.readAsArrayBuffer(dataURItoBlob(dataURI));
};
parseMidiFromDataURI("data:audio/midi;base64,TVRoZAAAAAYAAAABAeBNVHJrAAAA5wD/WAQEAhgIAP9RAwehIADAAADAAGWQXH8AwABlgFx/AMAAZZBZfwDAAGWAWX8AwABlkFZ/AMAAZYBWfwDAAGWQQ38AkEF/AJBCfwCQQH8AkD9/AMlPAJlPfwDAAACQU38AwABlgEN/AMAAZYBCfwDAAGWAP38AwABlgFN/AMAAZZBDfwDJTwCZT38AwAAAkFB/AMAAZYBBfwDAAGWJT38AwABliQB/AMAAZcAAZYBAfwDAAGWAUH8AwABlkE1/AMAAZYBDfwDAAGXAAGWATX8AwABlwABlwABlwABlwABlkDh/AP8vAA==");
输出:
{
"header": {
"PPQ": 480,
"timeSignature": [
4,
4
],
"bpm": 120,
"name": ""
},
"startTime": 0.10520833333333333,
"duration": 2.8406249999999984,
...
【讨论】: