Skip to content

Commit 23fe344

Browse files
authored
Merge pull request #18 from umjammer/0.0.15
0.0.15
2 parents 7e8d666 + 95fa9d5 commit 23fe344

14 files changed

+81
-23
lines changed

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ Text to Speech and Speech to Text (JSAPI2) engines for Java
4545
* [download](https://voicevox.hiroshiba.jp/) the application
4646
* run the application before using this library
4747

48+
### DoCoMo AI Agent API
49+
50+
* https://agentcraft.sebastien.ai/
51+
4852
## Usage
4953

5054
### user
@@ -83,5 +87,8 @@ Text to Speech and Speech to Text (JSAPI2) engines for Java
8387
* [LMROID](https://lmroidsoftware.wixsite.com/nhoshio)
8488
* [SHAREVOX](https://www.sharevox.app)
8589
* [http://itvoice.starfree.jp/](http://itvoice.starfree.jp/)
86-
* AVSpeechSynthesizer needs block
90+
* AVSpeechSynthesizer needs [obj-c block](https://github.com/umjammer/rococoa/discussions/23)
8791
* ~~rcp client/server (wip)~~ -> [vavi-speech-rpc](https://github.com/umjammer/vavi-speech-rpc)
92+
93+
---
94+
<sub>images by <a href="https://commons.nicovideo.jp/works/nc327182">霊夢</a>, <a href="https://commons.nicovideo.jp/works/nc327184">魔理沙</a>, <a href="https://seiga.nicovideo.jp/seiga/im10865385">ずんだもん</a></sub>

pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
<groupId>vavi</groupId>
1010
<artifactId>vavi-speech2</artifactId>
11-
<version>0.0.14</version>
11+
<version>0.0.15</version>
1212

1313
<name>vavi-speech2</name>
1414
<description/>
@@ -216,13 +216,13 @@
216216
<dependency>
217217
<groupId>com.github.umjammer.rococoa</groupId> <!-- org.rococoa / com.github.umjammer.rococoa -->
218218
<artifactId>rococoa-core</artifactId>
219-
<version>0.8.7</version>
219+
<version>0.8.11</version>
220220
</dependency>
221221

222222
<dependency>
223223
<groupId>com.github.umjammer</groupId> <!-- vavi / com.github.umjammer -->
224224
<artifactId>vavi-speech</artifactId>
225-
<version>0.1.10</version>
225+
<version>0.1.11</version>
226226
<exclusions>
227227
<exclusion>
228228
<groupId>javax.speech</groupId>

src/main/java/vavi/speech/BaseEnginFactory.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.lang.System.Logger;
1010
import java.lang.System.Logger.Level;
1111
import java.util.ArrayList;
12+
import java.util.Collections;
1213
import java.util.List;
1314
import java.util.Locale;
1415
import javax.speech.EngineList;
@@ -124,7 +125,14 @@ protected EngineList createEngineListForSynthesizer(EngineMode require) {
124125
logger.log(Level.TRACE, getClass().getSimpleName() + " --------");
125126

126127
// get all voices available
127-
List<WrappedVoice<V>> voices = geAlltVoices();
128+
List<WrappedVoice<V>> voices = null;
129+
try {
130+
voices = geAlltVoices();
131+
} catch (Throwable t) {
132+
logger.log(Level.WARNING, t.getMessage(), t);
133+
}
134+
if (voices == null)
135+
voices = Collections.emptyList();
128136
logger.log(Level.TRACE, "voices: " + voices.size());
129137

130138
// We want to get all combinations of domains and locales

src/main/java/vavi/speech/aquestalk10/jsapi2/AquesTalk10SynthesizerMode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public AquesTalk10SynthesizerMode(String engineName,
5454
Boolean supportsLetterToSound,
5555
Boolean supportsMarkup,
5656
Voice[] voices) {
57-
super(engineName, modeName, running, supportsLetterToSound, false, voices);
57+
super(engineName, modeName, running, supportsLetterToSound, supportsMarkup, voices);
5858
}
5959

6060
@Override

src/main/java/vavi/speech/aquestalk10/jsapi2/AquesTalk10Voice.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,19 @@
66

77
package vavi.speech.aquestalk10.jsapi2;
88

9+
import java.util.Collections;
910
import java.util.LinkedList;
1011
import java.util.List;
1112
import java.util.Locale;
1213
import java.util.Map;
14+
import java.util.logging.Level;
1315
import javax.speech.SpeechLocale;
1416
import javax.speech.synthesis.Voice;
1517

1618
import vavi.speech.WrappedVoice;
1719
import vavi.speech.aquestalk10.jna.AquesTalk10.AQTK_VOICE;
1820
import vavi.speech.aquestalk10.jna.AquesTalk10Wrapper;
21+
import vavi.util.Debug;
1922

2023

2124
/**
@@ -51,12 +54,22 @@ public List<AQTK_VOICE> getAllNativeVoices() {
5154

5255
@Override
5356
public List<WrappedVoice<AQTK_VOICE>> getAllVoices() {
54-
List<WrappedVoice<AQTK_VOICE>> voices = new LinkedList<>();
55-
for (Map.Entry<String, AQTK_VOICE> nativeVoice : AquesTalk10Wrapper.voices.entrySet()) {
56-
WrappedVoice<AQTK_VOICE> voice = new AquesTalk10Voice(nativeVoice);
57-
voices.add(voice);
57+
try {
58+
List<WrappedVoice<AQTK_VOICE>> voices = new LinkedList<>();
59+
for (Map.Entry<String, AQTK_VOICE> nativeVoice : AquesTalk10Wrapper.voices.entrySet()) {
60+
WrappedVoice<AQTK_VOICE> voice = new AquesTalk10Voice(nativeVoice);
61+
voices.add(voice);
62+
}
63+
return voices;
64+
} catch (UnsatisfiedLinkError e) {
65+
if (System.getProperty("os.arch").equals("aarch64")) {
66+
Debug.println(Level.WARNING, "AquesTalk10 doesn't support arm64 architecture.");
67+
} else {
68+
Debug.println(Level.SEVERE, "install AquesTalk10 and locate frameworks at proper directory.");
69+
}
70+
Debug.printStackTrace(Level.FINEST, e);
71+
return Collections.emptyList();
5872
}
59-
return voices;
6073
}
6174

6275
@Override

src/main/java/vavi/speech/googlecloud/jsapi2/GoogleCloudEngineListFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ public EngineList createEngineList(EngineMode require) {
4848
protected List<WrappedVoice<com.google.cloud.texttospeech.v1.Voice>> geAlltVoices() {
4949
try {
5050
return GoogleCloudTextToSpeechVoice.factory.getAllVoices();
51-
} catch (IllegalStateException e) {
52-
logger.log(Level.WARNING, e.getMessage());
51+
} catch (Throwable t) {
52+
logger.log(Level.WARNING, t.getMessage() + " env: " + System.getenv("GOOGLE_APPLICATION_CREDENTIALS"), t);
5353
return Collections.emptyList();
5454
}
5555
}

src/main/java/vavi/speech/googlecloud/jsapi2/GoogleCloudTextToSpeechSynthesizerMode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public GoogleCloudTextToSpeechSynthesizerMode(String engineName,
5454
Boolean supportsLetterToSound,
5555
Boolean supportsMarkup,
5656
Voice[] voices) {
57-
super(engineName, modeName, running, supportsLetterToSound, false, voices);
57+
super(engineName, modeName, running, supportsLetterToSound, supportsMarkup, voices);
5858
}
5959

6060
@Override

src/main/java/vavi/speech/googlecloud/jsapi2/GoogleCloudTextToSpeechVoice.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ protected GoogleCloudTextToSpeechVoice(com.google.cloud.texttospeech.v1.Voice na
4747
nativeVoice);
4848
}
4949

50+
/** @throws IllegalStateException credentials are not set */
5051
@Override
5152
public List<com.google.cloud.texttospeech.v1.Voice> getAllNativeVoices() {
5253
try (TextToSpeechClient textToSpeechClient = TextToSpeechClient.create()) {
@@ -62,6 +63,7 @@ public List<com.google.cloud.texttospeech.v1.Voice> getAllNativeVoices() {
6263
}
6364
}
6465

66+
/** @throws IllegalStateException credentials are not set */
6567
@Override
6668
public List<WrappedVoice<com.google.cloud.texttospeech.v1.Voice>> getAllVoices() {
6769
List<WrappedVoice<com.google.cloud.texttospeech.v1.Voice>> voiceList = new LinkedList<>();

src/main/java/vavi/speech/gyutan/jsapi2/GyutanSynthesizerMode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public GyutanSynthesizerMode(String engineName,
5454
Boolean supportsLetterToSound,
5555
Boolean supportsMarkup,
5656
Voice[] voices) {
57-
super(engineName, modeName, running, supportsLetterToSound, false, voices);
57+
super(engineName, modeName, running, supportsLetterToSound, supportsMarkup, voices);
5858
}
5959

6060
@Override

src/main/java/vavi/speech/openjtalk/jsapi2/OpenJTalkSynthesizerMode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public OpenJTalkSynthesizerMode(String engineName,
5454
Boolean supportsLetterToSound,
5555
Boolean supportsMarkup,
5656
Voice[] voices) {
57-
super(engineName, modeName, running, supportsLetterToSound, false, voices);
57+
super(engineName, modeName, running, supportsLetterToSound, supportsMarkup, voices);
5858
}
5959

6060
@Override

src/main/java/vavi/speech/rococoa/jsapi2/RococoaEngineListFactory.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
package vavi.speech.rococoa.jsapi2;
88

9+
import java.lang.System.Logger;
10+
import java.lang.System.Logger.Level;
11+
import java.util.Collections;
912
import java.util.List;
1013
import javax.speech.EngineList;
1114
import javax.speech.EngineMode;
@@ -17,6 +20,8 @@
1720
import vavi.speech.WrappedVoice;
1821
import vavix.rococoa.avfoundation.AVSpeechSynthesisVoice;
1922

23+
import static java.lang.System.getLogger;
24+
2025

2126
/**
2227
* Factory for the Mac Speech engine.
@@ -26,14 +31,25 @@
2631
*/
2732
public class RococoaEngineListFactory extends BaseEnginFactory<AVSpeechSynthesisVoice> implements EngineListFactory {
2833

34+
private static final Logger logger = getLogger(RococoaEngineListFactory.class.getName());
35+
2936
@Override
3037
public EngineList createEngineList(EngineMode require) {
3138
return createEngineListForSynthesizer(require);
3239
}
3340

3441
@Override
3542
protected List<WrappedVoice<AVSpeechSynthesisVoice>> geAlltVoices() {
36-
return RococoaVoice.factory.getAllVoices();
43+
try {
44+
List<WrappedVoice<AVSpeechSynthesisVoice>> voices = RococoaVoice.factory.getAllVoices();
45+
if (voices != null) {
46+
return voices;
47+
}
48+
logger.log(Level.WARNING, "voices are null, something is wrong");
49+
} catch (Throwable t) {
50+
logger.log(Level.WARNING, t.getMessage());
51+
}
52+
return Collections.emptyList();
3753
}
3854

3955
@Override

src/main/java/vavi/speech/rococoa/jsapi2/RococoaSynthesizerMode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public RococoaSynthesizerMode(String engineName,
5454
Boolean supportsLetterToSound,
5555
Boolean supportsMarkup,
5656
Voice[] voices) {
57-
super(engineName, modeName, running, supportsLetterToSound, false, voices);
57+
super(engineName, modeName, running, supportsLetterToSound, supportsMarkup, voices);
5858
}
5959

6060
@Override

src/main/java/vavi/speech/voicevox/VoiceVox.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,19 +141,31 @@ public static class Mora{
141141
}
142142
/** @param speed default: 1, range: 0.50 ~ 2.00 */
143143
public void setSpeed(float speed) {
144-
speedScale = speed;
144+
if (0.5 <= speed && speed <= 2.0)
145+
speedScale = speed;
146+
else
147+
speedScale = 1;
145148
}
146149
/** @param pitch default: 0, range: -0.15 ~ 0.15 */
147150
public void setPitch(float pitch) {
148-
pitchScale = pitch;
151+
if (-0.15 <= pitch && pitch <= 0.15)
152+
pitchScale = pitch;
153+
else
154+
pitchScale = 0;
149155
}
150156
/** @param intonation range: 0 ~ 2 */
151157
public void setIntonation(float intonation) {
152-
intonationScale = intonation;
158+
if (0 <= intonation && intonation <= 2)
159+
intonationScale = intonation;
160+
else
161+
intonationScale = 1;
153162
}
154163
/** @param volume default: 1, range: 0.50 ~ 2.00 */
155164
public void setVolume(float volume) {
156-
volumeScale = volume;
165+
if (0.5 <= volume && volume <= 2.0)
166+
volumeScale = volume;
167+
else
168+
volumeScale = 1;
157169
}
158170
}
159171

src/main/java/vavi/speech/voicevox/jsapi2/VoiceVoxSynthesizerMode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public VoiceVoxSynthesizerMode(String engineName,
5454
Boolean supportsLetterToSound,
5555
Boolean supportsMarkup,
5656
Voice[] voices) {
57-
super(engineName, modeName, running, supportsLetterToSound, false, voices);
57+
super(engineName, modeName, running, supportsLetterToSound, supportsMarkup, voices);
5858
}
5959

6060
@Override

0 commit comments

Comments
 (0)