Skip to content

Commit

Permalink
fix(#169, #170): default voices and voice prioritization
Browse files Browse the repository at this point in the history
  • Loading branch information
marisademeglio committed May 31, 2024
1 parent f80a7aa commit a0cb27b
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 19 deletions.
80 changes: 67 additions & 13 deletions src/renderer/components/TtsVoicesConfig/newConfig.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,18 @@ export function TtsVoicesConfigPane2({
setPreferredVoices(tmpVoices)
onChangePreferredVoices(tmpVoices)
}
let addToDefaultVoices = (voice: TtsVoice) => {
let tmpVoices = [...defaultVoices, voice]
setDefaultVoices(tmpVoices)
onChangeDefaultVoices(tmpVoices)
}
let removeFromDefaultVoices = (voice: TtsVoice) => {
let tmpVoices = [...defaultVoices]
let idx = tmpVoices.findIndex((v) => v.id == voice.id)
tmpVoices.splice(idx, 1)
setDefaultVoices(tmpVoices)
onChangeDefaultVoices(tmpVoices)
}

// return the first part of the language code (e.g. 'en' for 'en-US')
// or return the whole thing if there is no dash
Expand All @@ -64,38 +76,47 @@ export function TtsVoicesConfigPane2({
}

let selectLanguage = (e) => {
console.log('select language ', e.target.value)
setLang(e.target.value)
setEngine('All')
setLangcode('All')
setGender('All')
setVoiceId('None')
}
let selectEngine = (e) => {
console.log('select engine ', e.target.value)
setEngine(e.target.value)
setLangcode('All')
setGender('All')
setVoiceId('None')
}
let selectRegion = (e) => {
console.log('select region ', e.target.value)
let selectLangcode = (e) => {
setLangcode(e.target.value)
setGender('All')
setVoiceId('None')
}
let selectGender = (e) => {
console.log('select gender ', e.target.value)
setGender(e.target.value)
setVoiceId('None')
}
let selectVoice = (e) => {
console.log('select voice id', e.target.value)
setVoiceId(e.target.value)
}
let selectPreferredVoicesLanguage = (e) => {
setPreferredVoicesLanguage(e.target.value)
}
let selectDefault = (e, v) => {
if (e.target.value == 'Yes') {
addToDefaultVoices(v)
} else {
removeFromDefaultVoices(v)
}
}
let selectPriority = (e, v) => {
if (e.target.value == 'High') {
v.priority = 2
} else {
v.priority = 1
}
}

return (
<>
Expand Down Expand Up @@ -159,10 +180,10 @@ export function TtsVoicesConfigPane2({
</select>
</div>
<div>
<label htmlFor="select-region">Region</label>
<label htmlFor="select-dialect">Dialect</label>
<select
id="select-region"
onChange={(e) => selectRegion(e)}
id="select-dialect"
onChange={(e) => selectLangcode(e)}
defaultValue={langcode}
>
<option value="All">All</option>
Expand Down Expand Up @@ -353,7 +374,7 @@ export function TtsVoicesConfigPane2({
tabIndex={0}
>
<table
aria-colcount={6}
aria-colcount={7}
aria-rowcount={
userPreferredVoices.filter((v) => {
if (preferredVoicesLanguage == 'All') {
Expand All @@ -372,8 +393,9 @@ export function TtsVoicesConfigPane2({
<th>Name</th>
<th>Engine</th>
<th>Language</th>
<th>Gender</th>
<th>Is default</th>
<th>Gender/Age</th>
<th>Default</th>
<th>Priority</th>
<th>Actions</th>
</tr>
</thead>
Expand All @@ -396,11 +418,43 @@ export function TtsVoicesConfigPane2({
<td>{languageNames.of(v.lang)}</td>
<td>{v.gender}</td>
<td>
<select defaultValue="No">
<select
defaultValue={
defaultVoices.find(
(vx) => vx.id == v.id
)
? 'Yes'
: 'No'
}
onChange={(e) =>
selectDefault(e, v)
}
>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select>
</td>
<td>
<select
defaultValue={
v.hasOwnProperty(
'priority'
) && v.priority > 1
? 'High'
: 'Normal'
}
onChange={(e) =>
selectPriority(e, v)
}
>
<option value="High">
High
</option>
<option value="Normal">
Normal
</option>
</select>
</td>
<td>
<button
onClick={(e) =>
Expand Down
37 changes: 31 additions & 6 deletions src/shared/parser/pipelineXmlConverter/ttsConfigToXml.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,39 @@
import { TtsConfig } from 'shared/types/ttsConfig'
import { TtsConfig, TtsVoice } from 'shared/types/ttsConfig'

// TODO sort out priority
// return the first part of the language code (e.g. 'en' for 'en-US')
// or return the whole thing if there is no dash
let getLang = (str) => {
let trimmed = str.trim()
let idxOfDash = trimmed.indexOf('-')
return str.slice(0, idxOfDash == -1 ? undefined : idxOfDash)
}
function ttsConfigToXml(ttsConfig: TtsConfig): string {
// we already know the voice is "preferred"
// just find out if it's a default
let isDefault = (voice: TtsVoice) =>
ttsConfig.defaultVoices.find((v) => v.id == voice.id)
let xmlString = `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<config>
${ttsConfig.preferredVoices
.map(
(v) =>
`<voice engine="${v.engine}" name="${v.name}" lang="${v.lang}" gender="${v.gender}" priority="1"/>`
)
.map((v) => {
return `<voice engine="${v.engine}" name="${v.name}" lang="${
v.lang
}" gender="${v.gender}" priority="${
v.hasOwnProperty('priority') ? v.priority : 1
}"/>
${
isDefault(v)
? `<voice engine="${v.engine}" name="${
v.name
}" lang="${getLang(v.lang)}" gender="${
v.gender
}" priority="${
v.hasOwnProperty('priority') ? v.priority + 2 : 3
}"/>`
: ''
}
`
})
.join('')}
</config>`
return xmlString
Expand Down

0 comments on commit a0cb27b

Please sign in to comment.