Add recognizer support to Spine integration
This commit is contained in:
parent
3bf7a00d42
commit
bfc98a1c81
|
@ -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()
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in New Issue