Files
aklive2d/packages/music/index.js
Haoyu Xu d6e7bc20d3 feat: migrate to turbo (#22)
* feat: migrate top turbo

* ci: ci test

* fix: fix codeql issues

* feat: ci test

* chore: lint

* chore: misc changes

* feat: rename vite helpers

* feat: use fetch to handle assets

* feat: update directory

* feat: fetch charword table

* feat: migrate download game data and detect missing voice files

* feat: symlink relative path

* feat: finish wrangler upload

* feat: migrate wrangler download

* feat: finish

* chore: auto update

* ci: update ci

* ci: update ci

---------

Co-authored-by: Halyul <Halyul@users.noreply.github.com>
2025-02-22 15:11:30 +08:00

118 lines
3.6 KiB
JavaScript

import path from 'path'
import { file } from '@aklive2d/libs'
import { githubDownload } from '@aklive2d/downloader'
import config from '@aklive2d/config'
const AUTO_UPDATE_FOLDER = path.resolve(
import.meta.dirname,
config.dir_name.auto_update
)
export const DATA_DIR = path.resolve(import.meta.dirname, config.dir_name.data)
const MUSIC_TABLE_JSON = path.join(
AUTO_UPDATE_FOLDER,
config.module.music.music_table_json
)
const download = async () => {
const display_meta_table_json = path.resolve(
AUTO_UPDATE_FOLDER,
config.module.music.display_meta_table_json
)
const audio_data_json = path.resolve(
AUTO_UPDATE_FOLDER,
config.module.music.audio_data_json
)
const metaTable = await githubDownload(
`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`,
display_meta_table_json
)
const audioDataTable = await githubDownload(
`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`,
audio_data_json
)
return {
metaTable,
audioDataTable,
}
}
const generateMapping = () => {
const musicFolder = DATA_DIR
const musicTable = JSON.parse(file.readSync(MUSIC_TABLE_JSON))
const musicFileMapping = {}
const musicFiles = []
if (!musicTable) return
for (const item of musicTable) {
const key = `${item.id}.png`
musicFileMapping[key] = {}
if (item.intro) {
const filename = `${item.intro.split('/').pop()}.ogg`
musicFileMapping[key].intro = filename
musicFiles.push({
filename,
source: musicFolder,
})
} else {
musicFileMapping[key].intro = null
}
if (item.loop) {
const filename = `${item.loop.split('/').pop()}.ogg`
musicFileMapping[key].loop = filename
musicFiles.push({
filename,
source: musicFolder,
})
} else {
musicFileMapping[key].loop = null
}
}
return {
musicFiles,
musicFileMapping,
}
}
export const mapping = generateMapping()
export const update = async () => {
const { metaTable, audioDataTable } = await 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',
})
file.writeSync(JSON.stringify(list, null), MUSIC_TABLE_JSON)
}