Files
aklive2d/libs/music.js
2023-06-24 10:39:19 -04:00

91 lines
3.0 KiB
JavaScript

/* eslint-disable no-undef */
import path from 'path';
import { writeSync, readSync } from "./file.js"
import Downloader from "./downloader.js"
export default class Music {
#downloader = new Downloader()
#sharedPath = path.join(__projectRoot, __config.folder.operator, __config.folder.share)
async process() {
const { metaTable, audioDataTable } = await this.#download()
const musicTable = audioDataTable.musics
const musicBank = audioDataTable.bgmBanks
const musicBankAlias = audioDataTable.bankAlias
const musicData = metaTable.homeBackgroundData.homeBgDataList.reduce((acc, cur) => {
acc.push({
id: cur.bgId,
musicId: cur.bgMusicId
})
return acc
}, [])
const list = []
for (const item of musicData) {
let bankName = musicTable.find((el) => item.musicId === el.id).bank
if (typeof musicBankAlias[bankName] !== 'undefined') {
bankName = musicBankAlias[bankName]
}
const obj = musicBank.find((el) => bankName === el.name)
list.push({
id: item.id,
intro: obj.intro,
loop: obj.loop,
})
}
list.push({
id: "operator_bg",
intro: "m_sys_void_intro",
loop: "m_sys_void_loop",
})
writeSync(JSON.stringify(list, null, 2), path.join(this.#sharedPath, `music_table.json`))
}
async #download() {
const metaTable = await this.#downloader.github(`https://api.github.com/repos/Kengxxiao/ArknightsGameData/commits?path=zh_CN/gamedata/excel/display_meta_table.json`, `https://raw.githubusercontent.com/Kengxxiao/ArknightsGameData/master/zh_CN/gamedata/excel/display_meta_table.json`, path.join(this.#sharedPath, `display_meta_table.json`))
const audioDataTable = await this.#downloader.github(`https://api.github.com/repos/Kengxxiao/ArknightsGameData/commits?path=zh_CN/gamedata/excel/audio_data.json`, `https://raw.githubusercontent.com/Kengxxiao/ArknightsGameData/master/zh_CN/gamedata/excel/audio_data.json`, path.join(this.#sharedPath, `audio_data.json`))
return {
metaTable,
audioDataTable,
}
}
copy() {
const musicFolder = path.join(__projectRoot, __config.folder.operator, __config.folder.share, __config.folder.music);
const musicTable = JSON.parse(readSync(path.join(this.#sharedPath, `music_table.json`)))
const musicMapping = {}
const musicToCopy = []
for (const item of musicTable) {
const key = `${item.id}.png`
musicMapping[key] = {}
if (item.intro) {
const filename = `${item.intro.split('/').pop()}.ogg`
musicMapping[key].intro = filename
musicToCopy.push({
filename,
source: musicFolder,
})
} else {
musicMapping[key].intro = null
}
if (item.loop) {
const filename = `${item.loop.split('/').pop()}.ogg`
musicMapping[key].loop = filename
musicToCopy.push({
filename,
source: musicFolder,
})
} else {
musicMapping[key].loop = null
}
}
return {
musicToCopy,
musicMapping,
}
}
}