Add recognizer support to Spine integration

This commit is contained in:
Daniel Wolf 2019-01-01 22:47:18 +01:00
parent 3bf7a00d42
commit bfc98a1c81
4 changed files with 33 additions and 3 deletions

View File

@ -141,11 +141,12 @@ class AudioFileModel(
private fun startAnimation() { private fun startAnimation() {
val wrapperTask = Runnable { val wrapperTask = Runnable {
val recognizer = parentModel.parentModel.recognizer.value
val extendedMouthShapes = parentModel.mouthShapes.filter { it.isExtended }.toSet() val extendedMouthShapes = parentModel.mouthShapes.filter { it.isExtended }.toSet()
val reportProgress: (Double?) -> Unit = { val reportProgress: (Double?) -> Unit = {
progress -> runAndWait { this@AudioFileModel.animationProgress = progress } progress -> runAndWait { this@AudioFileModel.animationProgress = progress }
} }
val rhubarbTask = RhubarbTask(audioFilePath, dialog, extendedMouthShapes, reportProgress) val rhubarbTask = RhubarbTask(audioFilePath, recognizer, dialog, extendedMouthShapes, reportProgress)
try { try {
try { try {
val result = rhubarbTask.call() val result = rhubarbTask.call()

View File

@ -2,6 +2,8 @@ package com.rhubarb_lip_sync.rhubarb_for_spine
import javafx.beans.property.SimpleObjectProperty import javafx.beans.property.SimpleObjectProperty
import javafx.beans.property.SimpleStringProperty import javafx.beans.property.SimpleStringProperty
import javafx.collections.FXCollections
import javafx.collections.ObservableList
import tornadofx.FX import tornadofx.FX
import tornadofx.getValue import tornadofx.getValue
import tornadofx.setValue import tornadofx.setValue
@ -40,6 +42,15 @@ class MainModel(private val executor: ExecutorService) {
var animationFileModel by animationFileModelProperty var animationFileModel by animationFileModelProperty
private set private set
val recognizersProperty = SimpleObjectProperty<ObservableList<Recognizer>>(FXCollections.observableArrayList(
Recognizer("pocketSphinx", "PocketSphinx (use for English recordings)"),
Recognizer("phonetic", "Phonetic (use for non-English recordings)")
))
private var recognizers: ObservableList<Recognizer> by recognizersProperty
val recognizerProperty = SimpleObjectProperty<Recognizer>(recognizers[0])
var recognizer: Recognizer by recognizerProperty
val animationPrefixProperty = SimpleStringProperty("say_") val animationPrefixProperty = SimpleStringProperty("say_")
var animationPrefix: String by animationPrefixProperty var animationPrefix: String by animationPrefixProperty
@ -48,3 +59,5 @@ class MainModel(private val executor: ExecutorService) {
private fun getDefaultPathString() = FX.application.parameters.raw.firstOrNull() private fun getDefaultPathString() = FX.application.parameters.raw.firstOrNull()
} }
class Recognizer(val value: String, val description: String)

View File

@ -17,6 +17,7 @@ import javafx.scene.text.Font
import javafx.scene.text.FontWeight import javafx.scene.text.FontWeight
import javafx.scene.text.Text import javafx.scene.text.Text
import javafx.stage.FileChooser import javafx.stage.FileChooser
import javafx.util.StringConverter
import tornadofx.* import tornadofx.*
import java.io.File import java.io.File
import java.util.concurrent.Executors import java.util.concurrent.Executors
@ -83,6 +84,20 @@ class MainView : View() {
} }
} }
} }
field("Dialog recognizer") {
combobox<Recognizer> {
itemsProperty().bind(mainModel.recognizersProperty)
this.converter = object : StringConverter<Recognizer>() {
override fun toString(recognizer: Recognizer?): String {
return recognizer?.description ?: ""
}
override fun fromString(string: String?): Recognizer {
throw NotImplementedError()
}
}
valueProperty().bindBidirectional(mainModel.recognizerProperty)
}
}
field("Animation naming") { field("Animation naming") {
textfield { textfield {
maxWidth = 100.0 maxWidth = 100.0

View File

@ -14,6 +14,7 @@ import java.util.concurrent.Callable
class RhubarbTask( class RhubarbTask(
val audioFilePath: Path, val audioFilePath: Path,
val recognizer: String,
val dialog: String?, val dialog: String?,
val extendedMouthShapes: Set<MouthShape>, val extendedMouthShapes: Set<MouthShape>,
val reportProgress: (Double?) -> Unit val reportProgress: (Double?) -> Unit
@ -89,6 +90,7 @@ class RhubarbTask(
return mutableListOf( return mutableListOf(
rhubarbBinFilePath.toString(), rhubarbBinFilePath.toString(),
"--machineReadable", "--machineReadable",
"--recognizer", recognizer,
"--exportFormat", "json", "--exportFormat", "json",
"--extendedShapes", extendedMouthShapesString "--extendedShapes", extendedMouthShapesString
).apply { ).apply {
@ -100,7 +102,6 @@ class RhubarbTask(
}.apply { }.apply {
add(audioFilePath.toString()) add(audioFilePath.toString())
} }
} }
private val guiBinDirectory: Path by lazy { private val guiBinDirectory: Path by lazy {