feat(aklive2d): auto extract music mapping
This commit is contained in:
@@ -6,4 +6,4 @@ VITE_BACKGROUND_FOLDER="background"
|
|||||||
VITE_AVAILABLE_OPERATORS=["chen","dusk","dusk_everything_is_a_miracle","ling","nearl","nian","nian_unfettered_freedom","phatom_focus","rosmontis","skadi","skadi_sublimation","w","w_wonder","specter","gavial","surtr_colorful_wonderland","lee_trust_your_eyes","texas_the_omertosa","nearl_relight","rosmontis_become_anew","passager_dream_in_a_moment","mizuki_summer_feast","chongyue","ling_it_does_wash_the_strings","pozemka_snowy_plains_in_words","chen_ten_thousand_mountains","specter_born_as_one","muelsyse","kaltsit_remnant"]
|
VITE_AVAILABLE_OPERATORS=["chen","dusk","dusk_everything_is_a_miracle","ling","nearl","nian","nian_unfettered_freedom","phatom_focus","rosmontis","skadi","skadi_sublimation","w","w_wonder","specter","gavial","surtr_colorful_wonderland","lee_trust_your_eyes","texas_the_omertosa","nearl_relight","rosmontis_become_anew","passager_dream_in_a_moment","mizuki_summer_feast","chongyue","ling_it_does_wash_the_strings","pozemka_snowy_plains_in_words","chen_ten_thousand_mountains","specter_born_as_one","muelsyse","kaltsit_remnant"]
|
||||||
VITE_ERROR_FILES={"files":[{"key":"build_char_128_plosis_epoque%233","paddings":{"left":-120,"right":150,"top":10,"bottom":0}},{"key":"build_char_128_plosis","paddings":{"left":-90,"right":100,"top":10,"bottom":0}}],"voice":"CN_034.ogg"}
|
VITE_ERROR_FILES={"files":[{"key":"build_char_128_plosis_epoque%233","paddings":{"left":-120,"right":150,"top":10,"bottom":0}},{"key":"build_char_128_plosis","paddings":{"left":-90,"right":100,"top":10,"bottom":0}}],"voice":"CN_034.ogg"}
|
||||||
VITE_MUSIC_FOLDER=music
|
VITE_MUSIC_FOLDER=music
|
||||||
VITE_MUSIC_MAPPING={"operator_bg.png":{"intro":"m_sys_void_intro.ogg","loop":"m_sys_void_loop.ogg"},"bg_anniversary_1.png":{"intro":"m_dia_nightoflongmen_intro.ogg","loop":"m_dia_nightoflongmen_loop.ogg"},"bg_iberia_1.png":{"intro":"m_sys_act18d3d0_intro.ogg","loop":"m_sys_act18d3d0_loop.ogg"},"bg_kazimierz_1.png":{"intro":"m_dia_street_intro.ogg","loop":"m_dia_street_loop.ogg"},"bg_laterano_1.png":{"intro":"m_sys_act16side_intro.ogg","loop":"m_sys_act16side_loop.ogg"},"bg_main_victoria_1.png":{"intro":"m_avg_ghosthunter_intro.ogg","loop":"m_avg_ghosthunter_loop.ogg"},"bg_rhine_1.png":{"intro":"m_sys_act19side_intro.ogg","loop":"m_sys_act19side_loop.ogg"},"bg_rhodes_day.png":{"intro":"m_sys_void_intro.ogg","loop":"m_sys_void_loop.ogg"},"bg_rhodes_night.png":{"intro":"m_sys_tech_intro.ogg","loop":"m_sys_tech_loop.ogg"},"bg_rogue_1.png":{"intro":null,"loop":"m_avg_rglk1secretevent_loop.ogg"},"bg_rogue_2.png":{"intro":null,"loop":"m_sys_rglk2DLC_loop.ogg"},"bg_siesta_1.png":{"intro":"m_sys_ddd_intro.ogg","loop":"m_sys_ddd_loop.ogg"},"bg_ursus_1.png":{"intro":"m_avg_loneliness_intro.ogg","loop":"m_avg_loneliness_loop.ogg"},"bg_yan_1.png":{"intro":null,"loop":"m_sys_bitw_loop.ogg"}}
|
VITE_MUSIC_MAPPING={"bg_rhodes_day.png":{"intro":"m_sys_void_intro.ogg","loop":"m_sys_void_loop.ogg"},"bg_rhodes_night.png":{"intro":"m_sys_tech_intro.ogg","loop":"m_sys_tech_loop.ogg"},"bg_main_victoria_1.png":{"intro":"m_avg_ghosthunter_intro.ogg","loop":"m_avg_ghosthunter_loop.ogg"},"bg_siesta_1.png":{"intro":"m_sys_ddd_intro.ogg","loop":"m_sys_ddd_loop.ogg"},"bg_kazimierz_1.png":{"intro":"m_dia_street_intro.ogg","loop":"m_dia_street_loop.ogg"},"bg_ursus_1.png":{"intro":"m_avg_loneliness_intro.ogg","loop":"m_avg_loneliness_loop.ogg"},"bg_yan_1.png":{"intro":null,"loop":"m_sys_bitw_loop.ogg"},"bg_iberia_1.png":{"intro":"m_sys_act18d3d0_intro.ogg","loop":"m_sys_act18d3d0_loop.ogg"},"bg_anniversary_1.png":{"intro":"m_dia_nightoflongmen_intro.ogg","loop":"m_dia_nightoflongmen_loop.ogg"},"bg_rogue_1.png":{"intro":null,"loop":"m_avg_rglk1secretevent_loop.ogg"},"bg_rogue_2.png":{"intro":null,"loop":"m_sys_rglk2DLC_loop.ogg"},"bg_laterano_1.png":{"intro":"m_sys_act16side_intro.ogg","loop":"m_sys_act16side_loop.ogg"},"bg_rhine_1.png":{"intro":"m_sys_act19side_intro.ogg","loop":"m_sys_act19side_loop.ogg"},"operator_bg.png":{"intro":"m_sys_void_intro.ogg","loop":"m_sys_void_loop.ogg"}}
|
||||||
@@ -1 +1 @@
|
|||||||
1.2.18
|
1.2.19
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
/* eslint-disable no-undef */
|
/* eslint-disable no-undef */
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import { read } from './yaml.js';
|
import { writeSync, readSync } from "./file.js"
|
||||||
import Downloader from "./downloader.js"
|
import Downloader from "./downloader.js"
|
||||||
|
|
||||||
export default class Music {
|
export default class Music {
|
||||||
@@ -8,23 +8,79 @@ export default class Music {
|
|||||||
#sharedPath = path.join(__projectRoot, __config.folder.operator, __config.folder.share)
|
#sharedPath = path.join(__projectRoot, __config.folder.operator, __config.folder.share)
|
||||||
|
|
||||||
async process() {
|
async process() {
|
||||||
await this.#download()
|
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() {
|
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 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`))
|
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() {
|
copy() {
|
||||||
const musicFolder = path.join(__projectRoot, __config.folder.operator, __config.folder.share, __config.folder.music);
|
const musicFolder = path.join(__projectRoot, __config.folder.operator, __config.folder.share, __config.folder.music);
|
||||||
const musicMapping = read(path.join(musicFolder, 'mapping.yaml'));
|
const musicTable = JSON.parse(readSync(path.join(this.#sharedPath, `music_table.json`)))
|
||||||
const musicToCopy = Object.values(musicMapping).map(entry => Object.values(entry)).flat(1).filter(entry => entry !== null).map(entry => {
|
const musicMapping = {}
|
||||||
return {
|
const musicToCopy = []
|
||||||
filename: entry,
|
|
||||||
source: musicFolder,
|
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 {
|
return {
|
||||||
musicToCopy,
|
musicToCopy,
|
||||||
|
|||||||
Reference in New Issue
Block a user