Add recognizer support to Spine integration
This commit is contained in:
parent
3bf7a00d42
commit
bfc98a1c81
|
@ -141,11 +141,12 @@ class AudioFileModel(
|
|||
|
||||
private fun startAnimation() {
|
||||
val wrapperTask = Runnable {
|
||||
val recognizer = parentModel.parentModel.recognizer.value
|
||||
val extendedMouthShapes = parentModel.mouthShapes.filter { it.isExtended }.toSet()
|
||||
val reportProgress: (Double?) -> Unit = {
|
||||
progress -> runAndWait { this@AudioFileModel.animationProgress = progress }
|
||||
}
|
||||
val rhubarbTask = RhubarbTask(audioFilePath, dialog, extendedMouthShapes, reportProgress)
|
||||
val rhubarbTask = RhubarbTask(audioFilePath, recognizer, dialog, extendedMouthShapes, reportProgress)
|
||||
try {
|
||||
try {
|
||||
val result = rhubarbTask.call()
|
||||
|
|
|
@ -2,6 +2,8 @@ package com.rhubarb_lip_sync.rhubarb_for_spine
|
|||
|
||||
import javafx.beans.property.SimpleObjectProperty
|
||||
import javafx.beans.property.SimpleStringProperty
|
||||
import javafx.collections.FXCollections
|
||||
import javafx.collections.ObservableList
|
||||
import tornadofx.FX
|
||||
import tornadofx.getValue
|
||||
import tornadofx.setValue
|
||||
|
@ -40,6 +42,15 @@ class MainModel(private val executor: ExecutorService) {
|
|||
var animationFileModel by animationFileModelProperty
|
||||
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_")
|
||||
var animationPrefix: String by animationPrefixProperty
|
||||
|
||||
|
@ -48,3 +59,5 @@ class MainModel(private val executor: ExecutorService) {
|
|||
|
||||
private fun getDefaultPathString() = FX.application.parameters.raw.firstOrNull()
|
||||
}
|
||||
|
||||
class Recognizer(val value: String, val description: String)
|
||||
|
|
|
@ -17,6 +17,7 @@ import javafx.scene.text.Font
|
|||
import javafx.scene.text.FontWeight
|
||||
import javafx.scene.text.Text
|
||||
import javafx.stage.FileChooser
|
||||
import javafx.util.StringConverter
|
||||
import tornadofx.*
|
||||
import java.io.File
|
||||
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") {
|
||||
textfield {
|
||||
maxWidth = 100.0
|
||||
|
|
|
@ -14,6 +14,7 @@ import java.util.concurrent.Callable
|
|||
|
||||
class RhubarbTask(
|
||||
val audioFilePath: Path,
|
||||
val recognizer: String,
|
||||
val dialog: String?,
|
||||
val extendedMouthShapes: Set<MouthShape>,
|
||||
val reportProgress: (Double?) -> Unit
|
||||
|
@ -89,6 +90,7 @@ class RhubarbTask(
|
|||
return mutableListOf(
|
||||
rhubarbBinFilePath.toString(),
|
||||
"--machineReadable",
|
||||
"--recognizer", recognizer,
|
||||
"--exportFormat", "json",
|
||||
"--extendedShapes", extendedMouthShapesString
|
||||
).apply {
|
||||
|
@ -100,7 +102,6 @@ class RhubarbTask(
|
|||
}.apply {
|
||||
add(audioFilePath.toString())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private val guiBinDirectory: Path by lazy {
|
||||
|
|
Loading…
Reference in New Issue