Purpose
Since 2 ID3 is no longer being maintained. Here I recommand jsmediatags.
from jsmediatags document.
How to use
- import jsmediatags and create a jason array for music urls
var jsmediatags = window.jsmediatags;
var urls = [ur1, url2, ur3, ...];
- get tag of music and translate image cover to base64
function getTags(url) {
return new Promise((resolve, reject) => {
new jsmediatags.Reader(url)
.read({
onSuccess: (tag) => {
const { data, format } = tag.tags.picture;
var base64String = "";
for (let i = 0; i < data.length; i++) {
base64String += String.fromCharCode(data[i]);
}
var base64 = `data:{data.format};base64,{window.btoa(base64String)}`;
resolve(base64);
},
onError: (error) => {
reject(error);
}
});
});
}
- insert into a promises
let promises = urls.map(url => getTags(url))
Promise.all(promises).then(results=>{
// `results` is array of all the base64 values same order as the urls array
// loop over the results and add what is needed to DOM
// then call cover flow
const ap = new APlayer({
container: document.getElementById('aplayer01'),
fixed: true,
loop: 'all',
order: 'random',
listFolded: true,
listMaxHeight: 90,
audio: [
{
name: 'GLORIOUS DAYS',
artist: 'yuiko',
url: "https://***/'yuiko - GLORIOUS DAYS.flac'",
cover: results[0]
},
{
name: '東の空から始まる世界',
artist: 'yuiko',
url: "https://***/'yuiko - 東の空から始まる世界.flac'",
cover: results[1]
},
{
name: 'Relive',
artist: 'nonoc',
url: "https:/***/'nonoc - Relive.mp3'",
cover: results[2]
},
{
name: 'ポケットをふくらませて',
artist: 'rionos',
url: "https://***/'rionos - ポケットをふくらませて.flac'",
cover: results[3]
},
{
name: 'Believe-in-you',
artist: 'nonoc',
url: "https://***/Believe-in-you.mp3",
cover: results[4]
},
{
name: 'オレンジ',
artist: 'seven oops',
url: "https://***/'seven oops - オレンジ.flac'",
cover: results[5]
},
{
name: ' 終わりの世界から',
artist: 'やなぎなぎ',
url: "https://***/'やなぎなぎ - 終わりの世界から.flac'",
cover: results[6]
},
{
name: 'Wings of Courage_空を超えて piano',
artist: '川田まみ',
url: "https://***/川田まみ_Wings_of_Courage_空を超えて_piano_style.mp3",
cover: results[7]
}
]
});
}).catch(err=> console.log('One of the requests failed'))
- complete code
var jsmediatags = window.jsmediatags;
var urls = [ur1,
ur2,
ur3
...];
function getTags(url) {
return new Promise((resolve, reject) => {
new jsmediatags.Reader(url)
.read({
onSuccess: (tag) => {
const { data, format } = tag.tags.picture;
var base64String = "";
for (let i = 0; i < data.length; i++) {
base64String += String.fromCharCode(data[i]);
}
var base64 = `data:{data.format};base64,{window.btoa(base64String)}`;
resolve(base64);
},
onError: (error) => {
reject(error);
}
});
});
}
let promises = urls.map(url => getTags(url))
Promise.all(promises).then(results=>{
const ap = new APlayer({
container: document.getElementById('aplayer01'),
fixed: true,
loop: 'all',
order: 'random',
listFolded: true,
listMaxHeight: 90,
audio: [
{
name: 'GLORIOUS DAYS',
artist: 'yuiko',
url: "https://***/'yuiko - GLORIOUS DAYS.flac'",
cover: results[0]
},
{
name: '東の空から始まる世界',
artist: 'yuiko',
url: "https://***/'yuiko - 東の空から始まる世界.flac'",
cover: results[1]
},
{
name: 'Relive',
artist: 'nonoc',
url: "https:/***/'nonoc - Relive.mp3'",
cover: results[2]
},
{
name: 'ポケットをふくらませて',
artist: 'rionos',
url: "https://***/'rionos - ポケットをふくらませて.flac'",
cover: results[3]
},
{
name: 'Believe-in-you',
artist: 'nonoc',
url: "https://***/Believe-in-you.mp3",
cover: results[4]
},
{
name: 'オレンジ',
artist: 'seven oops',
url: "https://***/'seven oops - オレンジ.flac'",
cover: results[5]
},
{
name: ' 終わりの世界から',
artist: 'やなぎなぎ',
url: "https://***/'やなぎなぎ - 終わりの世界から.flac'",
cover: results[6]
},
{
name: 'Wings of Courage_空を超えて piano',
artist: '川田まみ',
url: "https://***/川田まみ_Wings_of_Courage_空を超えて_piano_style.mp3",
cover: results[7]
}
]
});
// `results` is array of all the base64 values same order as the urls array
// loop over the results and add what is needed to DOM
// then call cover flow
}).catch(err=> console.log('One of the requests failed'))
Comments | NOTHING