我正在尝试使用 Android应用中的 Android应用实现最佳的文字转语音(TTS)服务之一。我正在 Android Studio 中进行操作。
我想在Android中实施的TTS服务是IVONA Speech Cloud,免费,并且可以访问53种语音(目前)
我知道有一个适用于Android的SDK ,但问题是开发许可证的成本为1500欧元(最后我与销售人员谈过IVONA)我不打算付钱。
另外,我知道我可以简单地用有限数量的声音下载IVONA TTS引擎,并在我之前做过的Android应用程序中实现它们。这也是免费的,但我宁愿访问所有53个声音,而不仅仅是13个(当时)。此外,如果用户想要所有可用的声音,那么这个人就必须下载所有可能占用大量空间的用户。
说得很简单;我认为,从IVONA Speech Cloud等网络服务中发送TTS请求和接收语音(无论是语音文件还是语音URL)的应用程序可能是最好也是最简单的方法。然后,用户将不必安装包括多个声音的IVONA TTS语音引擎。
目前,有一个开源Java SDK 可用于实现IVONA Speech Cloud。对我来说这不是一个问题。日食。 问题是我无法使用我的Android应用。
因此,我想问你是否有可能实现这一点 Android应用程序中的Java SDK(在Android Studio中)?如果是,怎么做?
如果不是上述情况,Android Studio中的实现如何使用HTTP GET for API requests?您也可以返回链接,查看 API参考。
我的声望点(目前)只允许我发布2个链接!
如果有人可以为我描述(使用代码)如何在 Java SDK 或 HTTP中在Android Studio中实施IVONA Speech Cloud,我将非常感谢GET API请求。
@BenJakuben建议我可以将Maven依赖项转换为Gradle。其实我以前没有运气就试过这个。这可以通过两种方式完成;第一个是@BenJakuben所描述的。第二种方式是:
同步过程报告以下内容:
Gradle build finished with 4 warnings(s) in 2 sec
4个警告如下:
警告:依赖性commons-logging:commons-logging:1.1.1被忽略 用于调试,因为它可能与提供的内部版本冲突 通过Android。
警告:依赖org.apache.httpcomponents:httpclient:4.2被忽略 用于调试,因为它可能与提供的内部版本冲突 通过Android。
警告:依赖性commons-logging:commons-logging:1.1.1被忽略 发布,因为它可能与内部版本冲突 由Android提供。
警告:依赖org.apache.httpcomponents:httpclient:4.2被忽略 发布,因为它可能与内部版本冲突 由Android提供。
之后我尝试使用 accessKey 和 secretKey <复制 SampleIvonaSpeechCloudGetCreateSpeechURL.java 以及 IvonaCredentials.properties 文件/ em>我在注册IVONA Speech Cloud时收到免费。这两个文件与 MainActivity 位于同一个包中。
SampleIvonaSpeechCloudGetCreateSpeechURL.java 如下所示:
package IvonaSpeechCloudVoiceList;
import com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider;
import com.ivona.services.tts.IvonaSpeechCloudClient;
import com.ivona.services.tts.model.ListVoicesRequest;
import com.ivona.services.tts.model.Voice;
/**
* Class that generates singed URL for IVONA SpeechCloud ListVoices operation. This URL can be safely passed to
* client application to final invocation.
*/
public class SampleIvonaSpeechCloudGetVoiceListURL {
static IvonaSpeechCloudClient speechCloud;
private static void init() {
speechCloud = new IvonaSpeechCloudClient(
new ClasspathPropertiesFileCredentialsProvider("resources/IvonaCredentials.properties"));
speechCloud.setEndpoint("https://tts.eu-west-1.ivonacloud.com");
}
public static void main(String[] args) throws Exception {
init();
ListVoicesRequest allVoicesRequest = new ListVoicesRequest();
System.out.println("Request for all voices URL: " + speechCloud.getListVoicesUrl(allVoicesRequest));
ListVoicesRequest enUsVoicesRequest = new ListVoicesRequest();
Voice voice = new Voice();
voice.setLanguage("en-US");
enUsVoicesRequest.setVoice(voice);
System.out.println("Request for en-US voices URL: " + speechCloud.getListVoicesUrl(enUsVoicesRequest));
}
}
现在,由于有一些纯Java语法,我将其更改为以下内容:
1)来自:
public static void main(String[] args) throws Exception {
1)到没有输入参数的构造函数:
public SampleIvonaSpeechCloudGetCreateSpeechURL() throws Exception {
2)来自:
System.out.println("Request for en-US voices URL: " + speechCloud.getListVoicesUrl(enUsVoicesRequest));
2)到我执行应用时可以阅读的日志中的信息消息(带有来自IVONA Speech Cloud的返回的URL):
Log.i("TAG","Requested URL: " + speechCloud.getCreateSpeechUrl(createSpeechRequest));
现在,在我的 MainActivity 中,我只是从 SampleIvonaSpeechCloudGetCreateSpeechURL.java 类声明并实例化一个对象:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
SampleIvonaSpeechCloudGetCreateSpeechURL sampleSpeechURL = new SampleIvonaSpeechCloudGetCreateSpeechURL();
} catch (Exception e) {
e.printStackTrace();
}
}
当我尝试运行应用程序(在我的Android手机上)时,我会收到:
Gradle build finished with 1 error(s) and 4 warning(s) in 1 min 25 sec.
错误:任务&#39;:app:preDexDebug&#39;执行失败。 com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:Process&#39; command&#39; /Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home/箱/ JAVA&#39;&#39;完成非零退出值3
在Gradle文件中,我添加了以下代码行,这些代码删除了更新#1 中解决的4个警告:
configurations {
all*.exclude group: 'org.apache.httpcomponents'
all*.exclude group: 'org.apache.commons'
all*.exclude group: 'commons-logging', module: 'commons-logging'
}
当我想运行我的应用程序时,我仍然会收到错误消息。这里包含了所有信息:
Information:Gradle tasks [:app:assembleDebug]
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:compileDebugNdk UP-TO-DATE
:app:checkDebugManifest
:app:prepareDebugDependencies
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources UP-TO-DATE
:app:compileDebugJava
:app:preDexDebug
UNEXPECTED TOP-LEVEL ERROR:
java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.BitSet.initWords(BitSet.java:164)
at java.util.BitSet.<init>(BitSet.java:159)
at com.android.dx.ssa.SsaBasicBlock.<init>(SsaBasicBlock.java:127)
at com.android.dx.ssa.SsaMethod.makeExitBlock(SsaMethod.java:200)
at com.android.dx.ssa.SsaConverter.convertToSsaMethod(SsaConverter.java:58)
at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:98)
at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:72)
at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:297)
at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:137)
at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:93)
at com.android.dx.command.dexer.Main.processClass(Main.java:729)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
at com.android.dx.command.dexer.Main.access$300(Main.java:83)
at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
at com.android.dx.command.dexer.Main.processOne(Main.java:632)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:280)
at com.android.dx.command.dexer.Main.run(Main.java:246)
at com.android.dx.command.dexer.Main.main(Main.java:215)
at com.android.dx.command.Main.main(Main.java:106)
错误:任务&#39;:app:preDexDebug&#39;执行失败。 com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:进程&#39;命令 &#39; /Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home/bin/java'&#39; 完成非零退出值3
Information:BUILD FAILED
Information:Total time: 1 mins 16.967 secs
Information:1 error
Information:0 warnings
Information:See complete output in console
答案 0 :(得分:0)
我对此一无所知,但有一种简单的方法可以将Maven依赖项转换为Gradle,这可以帮助您在Android Studio项目中获得Ivona。
我在dev guide中找到了这个Maven依赖项:
<dependency>
<groupId>com.ivona</groupId>
<artifactId>ivona-speechcloud-sdk-java</artifactId>
<version>0.3.0</version>
</dependency>
转换为Gradle依赖关系的公式是:
compile '{groupId}:{artifactId}:{version}'
这为Ivona提供了这个:
compile 'com.ivona:ivona-speechcloud-sdk-java:0.3.0'
这是我dependencies
部分在build.gradle
中的样子:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.ivona:ivona-speechcloud-sdk-java:0.3.0'
}
如果可行,请查看他们的sample code on GitHub以了解如何实际使用它。
答案 1 :(得分:0)
我不是Android开发者,看起来Ivona Java SDK依赖于AWS SDK for Java(而不是Android AWS SDK)。该库与日志记录冲突,http客户端来自AWS SDK for Java。
我会按照以下步骤操作:将一个Android项目添加到Ivona SDK的源代码中。也就是说,不是依赖。克隆它并将src /,resources文件夹复制到项目中。 将Android AWS S3(https://github.com/aws/aws-sdk-android)依赖项添加到您的gradle文件中。
在Ivona SDK代码中找到几点,他们称之为AWS代码并将其调整为相当于Android AWS SDK。
应该是这样,因为AWS SDK是Ivona代码中唯一的直接依赖。