2015-03-23 1 views
2

Я пытаюсь реализовать одну из лучших услуг преобразования текста в речь (TTS) там, в приложении для Android, над которым я работаю в Android Студия.Как запросить облако речи IVONA от Android-приложения в Android Studio

ТТС сервис, который я хотел бы реализовать в Android является IVONA Speech Cloud, который бесплатно и дает доступ к 53 голосам (в настоящее время).

Я знаю, что есть SDK для Android, но проблема в том, что она стоит 1500 € для получения лицензии в целях развития (наконец-то я говорил с человеком продаж от IVONA), который я не собираюсь платить ,

Кроме того, я знаю, что могу просто загрузить движок IVONA TTS с ограниченным количеством голосов и реализовать их в своем приложении Android, которое я сделал некоторое время назад. Это также бесплатно, но я бы предпочел получить доступ ко всем 53 голосам, а не только 13 (в настоящее время). Кроме того, если пользователю понравятся все доступные голоса, этот человек должен будет загрузить их все, что может занимать много места для некоторых пользователей.

Положите это очень просто; я считаю, что это может быть самый лучший и простой способ иметь приложение, которое отправляет запросы TTS и принимает речевую речь (как в отношении речевых файлов, так и речевых URL) из веб-службы, такой как IVONA Speech Cloud. Тогда пользователю не нужно было устанавливать речевой движок IVONA TTS, включая несколько голосов.

На данный момент существует Java SDK с открытым исходным кодом, который реализует облако речи IVONA. Для меня не проблема запускать это, например. Затмение. Проблема в том, что я не могу сделать эту работу с моим Android-приложением.

  • Поэтому я хотел бы спросить вас, если это возможно реализовать, что Java SDK в Android приложение (в Android Studio)? Если да, то как?

  • Если не указано выше, как бы реализована реализация в Android Studio с использованием HTTP GET for API requests? Вы также можете вернуться в ссылку, см. Ссылку API.

Моя репутация точки (на данный момент) только позволяют мне размещать 2 ссылки!

Я был бы очень благодарен, если кто-то мог бы описать для меня (с кодом) как реализовать IVONA Speech Cloud в Android Studio от Java SDK или HTTP GET API запросы.


Update # 1

@BenJakuben предполагает, что я могу преобразовать зависимость Maven в Gradle. На самом деле я пробовал это раньше, не повезло. Это можно сделать двумя способами; первый из них описан как @BenJakuben.Второй способ сделать это путем:

  1. Выбор файла вкладку меню в Android Studio
  2. Выбор структуры Project
  3. Выбор зависимостями вкладку
  4. нажав на + (добавить) внизу и выбор 1 Зависимость от библиотеки
  5. Typing в IVONA и нажать на значок поиска и выбора первого варианта: com.ivona: Ivona-speechcloud-СДК-Java: 0.3.0
  6. Нажатие на кнопку OK

процесс синхронизации сообщает следующее:

Gradle build finished with 4 warnings(s) in 2 sec

4 предупреждений являются F ollows:

Warning:Dependency commons-logging:commons-logging:1.1.1 is ignored for debug as it may be conflicting with the internal version provided by Android.

Warning:Dependency org.apache.httpcomponents:httpclient:4.2 is ignored for debug as it may be conflicting with the internal version provided by Android.

Warning:Dependency commons-logging:commons-logging:1.1.1 is ignored for release as it may be conflicting with the internal version provided by Android.

Warning:Dependency org.apache.httpcomponents:httpclient:4.2 is ignored for release as it may be conflicting with the internal version provided by Android.

Затем я попытался скопировать SampleIvonaSpeechCloudGetCreateSpeechURL.java, а также IvonaCredentials.properties Файл с моей Accesskey и SecretKey я получил за БЕСПЛАТНО при регистрации на IVONA речи Облако. Эти 2 файла находятся в том же пакете, что и 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) на информационное сообщение (с возвращаемой URL из IVONA Speech Cloud) в журнале, что я могу читать, когда приложение выполняется:

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.

Error:Execution failed for task ':app:preDexDebug'. com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home/bin/java'' finished with non-zero exit value 3


Update # 2

В файле Gradle я добавил следующие строки c оды, которые забирали 4 предупреждения в адрес Update # 1:

configurations { 
    all*.exclude group: 'org.apache.httpcomponents' 
    all*.exclude group: 'org.apache.commons' 
    all*.exclude group: 'commons-logging', module: 'commons-logging' 
} 

Когда я хочу запустить мое приложение я все еще получаю сообщение erros. Вот она, включая всю информацию:

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) 

Error:Execution failed for task ':app:preDexDebug'. com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home/bin/java'' finished with non-zero exit value 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

любой прогресс помощник? – ChaturaM

+0

Нет, к сожалению. – poltexious

+0

Это работает? – user1163234

ответ

0

Я ничего не знаю об этом, но есть простой способ конвертировать зависимость Maven в Gradle, что может помочь вам получить Ivona в проекте Android Studio.

Я нашел эту зависимость Maven в их dev guide:

<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, чтобы посмотреть, как на самом деле использовать его.

+0

Я обновил свой вопрос с ** обновлением заголовка # 1 **. Не стесняйтесь взглянуть на то, что я пытаюсь сделать, и на результат. – poltexious

+0

Пожалуйста, взгляните на ** Обновить # 2 ** заголовок. – poltexious

+0

@poltexious, это то, что я сделал и, надеюсь, помогает другим: 'compile ('com.ivona: ivona-speechcloud-sdk-java: 1.0.0') { исключить группу: 'commons-logging', module: 'commons -logging ' исключить группу:' org.apache.httpcomponents ', module:' httpclient ' } ' – Vijay

0

Я не и Android dev, похоже, что Ivona Java SDK зависит от AWS SDK для Java (в отличие от Android AWS SDK). Библиотека конфликтует с протоколированием и http-клиентом из AWS SDK для Java.

Я бы сделал следующее: добавьте в проект Android исходный код Ivona SDK. То есть, не как зависимость. Скопируйте его и скопируйте в папку src /, resources в свой проект. Добавьте ссылку на Android AWS S3 (https://github.com/aws/aws-sdk-android) в свой файл градиента.

Найдите несколько пунктов в коде Ivona SDK, где они называют код AWS и адаптируют его к эквиваленту Android AWS SDK.

Это должно быть так, потому что снова AWS SDK является единственной прямой зависимостью в коде Ivona.