Refactor the JNI interface to make it more modular and maintainable (#802)
This commit is contained in:
@@ -1,7 +1,11 @@
|
||||
package com.k2fsa.sherpa.onnx
|
||||
|
||||
import android.content.res.AssetManager
|
||||
import android.media.*
|
||||
import android.media.AudioAttributes
|
||||
import android.media.AudioFormat
|
||||
import android.media.AudioManager
|
||||
import android.media.AudioTrack
|
||||
import android.media.MediaPlayer
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
@@ -212,7 +216,7 @@ class MainActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
if (dictDir != null) {
|
||||
val newDir = copyDataDir( modelDir!!)
|
||||
val newDir = copyDataDir(modelDir!!)
|
||||
modelDir = newDir + "/" + modelDir
|
||||
dictDir = modelDir + "/" + "dict"
|
||||
ruleFsts = "$modelDir/phone.fst,$modelDir/date.fst,$modelDir/number.fst"
|
||||
@@ -220,7 +224,9 @@ class MainActivity : AppCompatActivity() {
|
||||
}
|
||||
|
||||
val config = getOfflineTtsConfig(
|
||||
modelDir = modelDir!!, modelName = modelName!!, lexicon = lexicon ?: "",
|
||||
modelDir = modelDir!!,
|
||||
modelName = modelName!!,
|
||||
lexicon = lexicon ?: "",
|
||||
dataDir = dataDir ?: "",
|
||||
dictDir = dictDir ?: "",
|
||||
ruleFsts = ruleFsts ?: "",
|
||||
@@ -232,11 +238,11 @@ class MainActivity : AppCompatActivity() {
|
||||
|
||||
|
||||
private fun copyDataDir(dataDir: String): String {
|
||||
println("data dir is $dataDir")
|
||||
Log.i(TAG, "data dir is $dataDir")
|
||||
copyAssets(dataDir)
|
||||
|
||||
val newDataDir = application.getExternalFilesDir(null)!!.absolutePath
|
||||
println("newDataDir: $newDataDir")
|
||||
Log.i(TAG, "newDataDir: $newDataDir")
|
||||
return newDataDir
|
||||
}
|
||||
|
||||
@@ -256,7 +262,7 @@ class MainActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
} catch (ex: IOException) {
|
||||
Log.e(TAG, "Failed to copy $path. ${ex.toString()}")
|
||||
Log.e(TAG, "Failed to copy $path. $ex")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -276,7 +282,7 @@ class MainActivity : AppCompatActivity() {
|
||||
ostream.flush()
|
||||
ostream.close()
|
||||
} catch (ex: Exception) {
|
||||
Log.e(TAG, "Failed to copy $filename, ${ex.toString()}")
|
||||
Log.e(TAG, "Failed to copy $filename, $ex")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,10 +49,10 @@ class OfflineTts(
|
||||
private var ptr: Long
|
||||
|
||||
init {
|
||||
if (assetManager != null) {
|
||||
ptr = newFromAsset(assetManager, config)
|
||||
ptr = if (assetManager != null) {
|
||||
newFromAsset(assetManager, config)
|
||||
} else {
|
||||
ptr = newFromFile(config)
|
||||
newFromFile(config)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ class OfflineTts(
|
||||
sid: Int = 0,
|
||||
speed: Float = 1.0f
|
||||
): GeneratedAudio {
|
||||
var objArray = generateImpl(ptr, text = text, sid = sid, speed = speed)
|
||||
val objArray = generateImpl(ptr, text = text, sid = sid, speed = speed)
|
||||
return GeneratedAudio(
|
||||
samples = objArray[0] as FloatArray,
|
||||
sampleRate = objArray[1] as Int
|
||||
@@ -78,7 +78,13 @@ class OfflineTts(
|
||||
speed: Float = 1.0f,
|
||||
callback: (samples: FloatArray) -> Unit
|
||||
): GeneratedAudio {
|
||||
var objArray = generateWithCallbackImpl(ptr, text = text, sid = sid, speed = speed, callback=callback)
|
||||
val objArray = generateWithCallbackImpl(
|
||||
ptr,
|
||||
text = text,
|
||||
sid = sid,
|
||||
speed = speed,
|
||||
callback = callback
|
||||
)
|
||||
return GeneratedAudio(
|
||||
samples = objArray[0] as FloatArray,
|
||||
sampleRate = objArray[1] as Int
|
||||
@@ -87,10 +93,10 @@ class OfflineTts(
|
||||
|
||||
fun allocate(assetManager: AssetManager? = null) {
|
||||
if (ptr == 0L) {
|
||||
if (assetManager != null) {
|
||||
ptr = newFromAsset(assetManager, config)
|
||||
ptr = if (assetManager != null) {
|
||||
newFromAsset(assetManager, config)
|
||||
} else {
|
||||
ptr = newFromFile(config)
|
||||
newFromFile(config)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -103,9 +109,14 @@ class OfflineTts(
|
||||
}
|
||||
|
||||
protected fun finalize() {
|
||||
delete(ptr)
|
||||
if (ptr != 0L) {
|
||||
delete(ptr)
|
||||
ptr = 0
|
||||
}
|
||||
}
|
||||
|
||||
fun release() = finalize()
|
||||
|
||||
private external fun newFromAsset(
|
||||
assetManager: AssetManager,
|
||||
config: OfflineTtsConfig,
|
||||
@@ -123,14 +134,14 @@ class OfflineTts(
|
||||
// - the first entry is an 1-D float array containing audio samples.
|
||||
// Each sample is normalized to the range [-1, 1]
|
||||
// - the second entry is the sample rate
|
||||
external fun generateImpl(
|
||||
private external fun generateImpl(
|
||||
ptr: Long,
|
||||
text: String,
|
||||
sid: Int = 0,
|
||||
speed: Float = 1.0f
|
||||
): Array<Any>
|
||||
|
||||
external fun generateWithCallbackImpl(
|
||||
private external fun generateWithCallbackImpl(
|
||||
ptr: Long,
|
||||
text: String,
|
||||
sid: Int = 0,
|
||||
@@ -156,7 +167,7 @@ fun getOfflineTtsConfig(
|
||||
dictDir: String,
|
||||
ruleFsts: String,
|
||||
ruleFars: String
|
||||
): OfflineTtsConfig? {
|
||||
): OfflineTtsConfig {
|
||||
return OfflineTtsConfig(
|
||||
model = OfflineTtsModelConfig(
|
||||
vits = OfflineTtsVitsModelConfig(
|
||||
|
||||
Reference in New Issue
Block a user