Upload 3 files
Browse files- README.md +4 -5
- RunJets.cs +8 -9
- info.json +13 -4
README.md
CHANGED
@@ -3,16 +3,15 @@ license: cc-by-4.0
|
|
3 |
library_name: unity-sentis
|
4 |
---
|
5 |
|
6 |
-
# Jets Text-to-Speech Model validated for
|
7 |
-
*Version 1.3.0 Sentis files are not compatible with version 1.4.0 and above and will need to be recreated
|
8 |
|
9 |
This is a text to speech model called [Jets](https://huggingface.co/imdanboy/jets). It takes in a text string which you convert to phonemes using a dictionary and then outputs a wav to play the voice.
|
10 |
|
11 |
## How to Use
|
12 |
-
* Create a new scene in Unity
|
13 |
-
* Install `com.unity.sentis` version `1.
|
14 |
* Put the c# script on the Main Camera
|
15 |
-
* Put the `sentis` file and the `phoneme_dict.txt` file in the `Assets/StreamingAssets` folder
|
16 |
* Add an AudioSource component on the Main Camera
|
17 |
* Set the `inputText` string for what you want it to say
|
18 |
* Press play
|
|
|
3 |
library_name: unity-sentis
|
4 |
---
|
5 |
|
6 |
+
# Jets Text-to-Speech Model validated for Sentis 2.1.2 in Unity 6
|
|
|
7 |
|
8 |
This is a text to speech model called [Jets](https://huggingface.co/imdanboy/jets). It takes in a text string which you convert to phonemes using a dictionary and then outputs a wav to play the voice.
|
9 |
|
10 |
## How to Use
|
11 |
+
* Create a new scene in Unity 6
|
12 |
+
* Install `com.unity.sentis` version `2.1.2` package
|
13 |
* Put the c# script on the Main Camera
|
14 |
+
* Put the `jets-text-to-speech.sentis` file and the `phoneme_dict.txt` file in the `Assets/StreamingAssets` folder
|
15 |
* Add an AudioSource component on the Main Camera
|
16 |
* Set the `inputText` string for what you want it to say
|
17 |
* Press play
|
RunJets.cs
CHANGED
@@ -38,7 +38,7 @@ public class RunJets : MonoBehaviour
|
|
38 |
|
39 |
Dictionary<string, string> dict = new ();
|
40 |
|
41 |
-
|
42 |
|
43 |
AudioClip clip;
|
44 |
|
@@ -51,8 +51,8 @@ public class RunJets : MonoBehaviour
|
|
51 |
|
52 |
void LoadModel()
|
53 |
{
|
54 |
-
var model = ModelLoader.Load(Path.Join(Application.streamingAssetsPath
|
55 |
-
|
56 |
}
|
57 |
|
58 |
void TextToSpeech()
|
@@ -167,12 +167,11 @@ public class RunJets : MonoBehaviour
|
|
167 |
{
|
168 |
int[] tokens = GetTokens(ptext);
|
169 |
|
170 |
-
using var input = new
|
171 |
-
|
172 |
|
173 |
-
var
|
174 |
-
|
175 |
-
var samples = output.ToReadOnlyArray();
|
176 |
|
177 |
Debug.Log($"Audio size = {samples.Length / samplerate} seconds");
|
178 |
|
@@ -205,6 +204,6 @@ public class RunJets : MonoBehaviour
|
|
205 |
|
206 |
private void OnDestroy()
|
207 |
{
|
208 |
-
|
209 |
}
|
210 |
}
|
|
|
38 |
|
39 |
Dictionary<string, string> dict = new ();
|
40 |
|
41 |
+
Worker worker;
|
42 |
|
43 |
AudioClip clip;
|
44 |
|
|
|
51 |
|
52 |
void LoadModel()
|
53 |
{
|
54 |
+
var model = ModelLoader.Load(Path.Join(Application.streamingAssetsPath, "jets-text-to-speech.sentis"));
|
55 |
+
worker = new Worker(model, BackendType.GPUCompute);
|
56 |
}
|
57 |
|
58 |
void TextToSpeech()
|
|
|
167 |
{
|
168 |
int[] tokens = GetTokens(ptext);
|
169 |
|
170 |
+
using var input = new Tensor<int>(new TensorShape(tokens.Length), tokens);
|
171 |
+
worker.Schedule(input);
|
172 |
|
173 |
+
using var samplesTensor = (worker.PeekOutput("wav") as Tensor<float>).ReadbackAndClone();
|
174 |
+
var samples = samplesTensor.AsReadOnlySpan();
|
|
|
175 |
|
176 |
Debug.Log($"Audio size = {samples.Length / samplerate} seconds");
|
177 |
|
|
|
204 |
|
205 |
private void OnDestroy()
|
206 |
{
|
207 |
+
worker?.Dispose();
|
208 |
}
|
209 |
}
|
info.json
CHANGED
@@ -1,6 +1,15 @@
|
|
1 |
{
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
}
|
|
|
1 |
{
|
2 |
+
"code": [
|
3 |
+
"RunJets.cs"
|
4 |
+
],
|
5 |
+
"models": [
|
6 |
+
"jets-text-to-speech.onnx",
|
7 |
+
"jets-text-to-speech.sentis"
|
8 |
+
],
|
9 |
+
"data": [
|
10 |
+
"phoneme_dict.txt"
|
11 |
+
],
|
12 |
+
"version": [
|
13 |
+
"2.1.2"
|
14 |
+
]
|
15 |
}
|