fix: properly handle CN_043 voice in EN and KR
This commit is contained in:
@@ -95,7 +95,7 @@ export default class Voice {
|
|||||||
this.#default.language.voice = this.#voice.languages[0]
|
this.#default.language.voice = this.#voice.languages[0]
|
||||||
this.#config.language = this.#default.language.voice
|
this.#config.language = this.#default.language.voice
|
||||||
this.#voice.locations = this.#getVoiceLocations()
|
this.#voice.locations = this.#getVoiceLocations()
|
||||||
this.#voice.list = Object.keys(this.#getVoices())
|
this.#voice.list = this.#charwordTable.availability[this.#config.language]
|
||||||
}
|
}
|
||||||
|
|
||||||
success() {
|
success() {
|
||||||
@@ -206,7 +206,7 @@ export default class Voice {
|
|||||||
const content = subtitle.text
|
const content = subtitle.text
|
||||||
const cvInfo =
|
const cvInfo =
|
||||||
this.#charwordTable.voiceLangs[this.subtitleLanguage][
|
this.#charwordTable.voiceLangs[this.subtitleLanguage][
|
||||||
this.#config.language
|
this.#config.language
|
||||||
]
|
]
|
||||||
document.getElementById('voice-title').innerText = title
|
document.getElementById('voice-title').innerText = title
|
||||||
document.getElementById('voice-subtitle').innerText = content
|
document.getElementById('voice-subtitle').innerText = content
|
||||||
@@ -251,15 +251,7 @@ export default class Voice {
|
|||||||
|
|
||||||
#nextVoice() {
|
#nextVoice() {
|
||||||
const getVoiceId = () => {
|
const getVoiceId = () => {
|
||||||
let list = this.#voice.list
|
const id = this.#voice.list[Math.floor(Math.random() * this.#voice.list.length)]
|
||||||
if (
|
|
||||||
this.#config.language === 'EN' ||
|
|
||||||
this.#config.language === 'KR'
|
|
||||||
) {
|
|
||||||
// filter out CN_043 as this voice is not available in en and kr
|
|
||||||
list = list.filter((item) => item !== 'CN_043')
|
|
||||||
}
|
|
||||||
const id = list[Math.floor(Math.random() * list.length)]
|
|
||||||
return id === this.#voice.id.last ? getVoiceId() : id
|
return id === this.#voice.id.last ? getVoiceId() : id
|
||||||
}
|
}
|
||||||
this.#playVoice(getVoiceId())
|
this.#playVoice(getVoiceId())
|
||||||
@@ -360,8 +352,10 @@ export default class Voice {
|
|||||||
set language(lang) {
|
set language(lang) {
|
||||||
if (this.#voice.languages.includes(lang)) {
|
if (this.#voice.languages.includes(lang)) {
|
||||||
this.#config.language = lang
|
this.#config.language = lang
|
||||||
|
this.#voice.list = this.#charwordTable.availability[lang]
|
||||||
} else {
|
} else {
|
||||||
this.#config.language = this.#default.language.voice
|
this.#config.language = this.#default.language.voice
|
||||||
|
this.#voice.list = this.#charwordTable.availability[this.#config.language]
|
||||||
}
|
}
|
||||||
const availableSubtitleLang = this.#getSubtitleLanguages()
|
const availableSubtitleLang = this.#getSubtitleLanguages()
|
||||||
if (!availableSubtitleLang.includes(this.#config.subtitle.language)) {
|
if (!availableSubtitleLang.includes(this.#config.subtitle.language)) {
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ export const build = async (namesToBuild: string[]) => {
|
|||||||
const voiceJson = {} as OperatorCharwordTable
|
const voiceJson = {} as OperatorCharwordTable
|
||||||
voiceJson.voiceLangs = {}
|
voiceJson.voiceLangs = {}
|
||||||
voiceJson.subtitleLangs = {}
|
voiceJson.subtitleLangs = {}
|
||||||
|
voiceJson.availability = {}
|
||||||
const subtitleInfo = Object.keys(charwordTableLookup.info) as Region[]
|
const subtitleInfo = Object.keys(charwordTableLookup.info) as Region[]
|
||||||
const voiceList = {} as {
|
const voiceList = {} as {
|
||||||
[key: string]: string[]
|
[key: string]: string[]
|
||||||
@@ -119,65 +120,69 @@ export const build = async (namesToBuild: string[]) => {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
let voiceLangs = [] as string[]
|
|
||||||
try {
|
try {
|
||||||
voiceLangs = getLangs(name, voiceJson).voiceLangs
|
const voiceLangs = getLangs(name, voiceJson).voiceLangs
|
||||||
|
|
||||||
|
// check whether voice files has been added
|
||||||
|
const customVoiceName = voiceLangs.filter(
|
||||||
|
(i) => !config.dir_name.voice.sub.map((e) => e.lang).includes(i)
|
||||||
|
)[0]
|
||||||
|
const voiceLangMapping = config.dir_name.voice.sub
|
||||||
|
.filter((e) => {
|
||||||
|
return (
|
||||||
|
voiceLangs.includes(e.lang) ||
|
||||||
|
(e.lang === 'CUSTOM' &&
|
||||||
|
typeof customVoiceName !== 'undefined')
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.map((e) => {
|
||||||
|
return {
|
||||||
|
name: e.name,
|
||||||
|
lang: e.lang === 'CUSTOM' ? customVoiceName : e.lang,
|
||||||
|
lookup_region: e.lookup_region.replace('_', '-'),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
for (const voiceSubFolderMapping of voiceLangMapping) {
|
||||||
|
const voiceSubFolder = path.join(
|
||||||
|
OPERATOR_SOURCE_FOLDER,
|
||||||
|
name,
|
||||||
|
config.dir_name.voice.main,
|
||||||
|
voiceSubFolderMapping.name
|
||||||
|
)
|
||||||
|
const voiceFileList = file.readdirSync(voiceSubFolder)
|
||||||
|
voiceJson.availability[voiceSubFolderMapping.lang] =
|
||||||
|
voiceFileList.map((item) => item.replace('.ogg', ''))
|
||||||
|
voiceJson.availability[voiceSubFolderMapping.lang].sort()
|
||||||
|
voiceList[voiceSubFolderMapping.lookup_region].forEach(
|
||||||
|
(item) => {
|
||||||
|
// an exception for detecting file existence
|
||||||
|
if (
|
||||||
|
item.endsWith('043') &&
|
||||||
|
voiceFileList.includes(`${item}.ogg`) &&
|
||||||
|
(voiceSubFolderMapping.name === 'kr' ||
|
||||||
|
voiceSubFolderMapping.name === 'en')
|
||||||
|
) {
|
||||||
|
console.log(
|
||||||
|
`Voice folder ${voiceSubFolderMapping.name} for ${name} has ${item}.ogg`
|
||||||
|
)
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
!voiceFileList.includes(`${item}.ogg`) &&
|
||||||
|
// make an exception
|
||||||
|
!item.endsWith('043')
|
||||||
|
) {
|
||||||
|
err.push(
|
||||||
|
`Voice folder ${voiceSubFolderMapping.name} for ${name} is missing ${item}.ogg`
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
file.writeSync(JSON.stringify(voiceJson), getDistDir(name))
|
file.writeSync(JSON.stringify(voiceJson), getDistDir(name))
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(`charword_table is not available`, e)
|
console.log(`charword_table is not available`, e)
|
||||||
}
|
}
|
||||||
|
|
||||||
// check whether voice files has been added
|
|
||||||
const customVoiceName = voiceLangs.filter(
|
|
||||||
(i) => !config.dir_name.voice.sub.map((e) => e.lang).includes(i)
|
|
||||||
)[0]
|
|
||||||
const voiceLangMapping = config.dir_name.voice.sub
|
|
||||||
.filter((e) => {
|
|
||||||
return (
|
|
||||||
voiceLangs.includes(e.lang) ||
|
|
||||||
(e.lang === 'CUSTOM' &&
|
|
||||||
typeof customVoiceName !== 'undefined')
|
|
||||||
)
|
|
||||||
})
|
|
||||||
.map((e) => {
|
|
||||||
return {
|
|
||||||
name: e.name,
|
|
||||||
lang: e.lang === 'CUSTOM' ? customVoiceName : e.lang,
|
|
||||||
lookup_region: e.lookup_region.replace('_', '-'),
|
|
||||||
}
|
|
||||||
})
|
|
||||||
for (const voiceSubFolderMapping of voiceLangMapping) {
|
|
||||||
const voiceSubFolder = path.join(
|
|
||||||
OPERATOR_SOURCE_FOLDER,
|
|
||||||
name,
|
|
||||||
config.dir_name.voice.main,
|
|
||||||
voiceSubFolderMapping.name
|
|
||||||
)
|
|
||||||
const voiceFileList = file.readdirSync(voiceSubFolder)
|
|
||||||
voiceList[voiceSubFolderMapping.lookup_region].map((item) => {
|
|
||||||
// an exception for detecting file existence
|
|
||||||
if (
|
|
||||||
item.endsWith('043') &&
|
|
||||||
voiceFileList.includes(`${item}.ogg`) &&
|
|
||||||
(voiceSubFolderMapping.name === 'kr' ||
|
|
||||||
voiceSubFolderMapping.name === 'en')
|
|
||||||
) {
|
|
||||||
console.log(
|
|
||||||
`Voice folder ${voiceSubFolderMapping.name} for ${name} has ${item}.ogg`
|
|
||||||
)
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
!voiceFileList.includes(`${item}.ogg`) &&
|
|
||||||
// make an exception
|
|
||||||
!item.endsWith('043')
|
|
||||||
) {
|
|
||||||
err.push(
|
|
||||||
`Voice folder ${voiceSubFolderMapping.name} for ${name} is missing ${item}.ogg`
|
|
||||||
)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -90,6 +90,9 @@ export type CharwordTableJson = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type OperatorCharwordTable = {
|
export type OperatorCharwordTable = {
|
||||||
|
availability: {
|
||||||
|
[languageCode: string]: string[]
|
||||||
|
}
|
||||||
voiceLangs: {
|
voiceLangs: {
|
||||||
[languageCode: string]: {
|
[languageCode: string]: {
|
||||||
[voiceLangType: string]: string[]
|
[voiceLangType: string]: string[]
|
||||||
|
|||||||
Reference in New Issue
Block a user