如何从Android Studio中的Android应用程序请求IVONA Speech Cloud

时间:2015-03-23 22:47:40

标签: java android android-studio text-to-speech http-get

我正在尝试使用 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请求


更新#1

@BenJakuben建议我可以将Maven依赖项转换为Gradle。其实我以前没有运气就试过这个。这可以通过两种方式完成;第一个是@BenJakuben所描述的。第二种方式是:

  1. 在Android Studio中选择文件菜单标签
  2. 选择项目结构
  3. 选择依赖关系标签
  4. 点击底部的 + (添加)按钮,然后选择 1图书馆相关性
  5. 输入 IVONA 并点击搜索图标并选择第一个选项: com.ivona:ivona-speechcloud-sdk-java:0.3.0
  6. 点击确定按钮
  7. 同步过程报告以下内容:

    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


    更新#2

    在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
    

    我做错了什么?

2 个答案:

答案 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代码中唯一的直接依赖。