| androidTestImplementation 'org.hamcrest:hamcrest-all:1.3' | androidTestImplementation 'org.hamcrest:hamcrest-all:1.3' | ||||
| } | } | ||||
| android { | |||||
| compileSdk 33 | |||||
| ndkVersion "25.1.8937393" | |||||
| namespace "com.reecedunn.espeak" | |||||
| defaultConfig { | |||||
| minSdk 19 | |||||
| targetSdk 33 | |||||
| versionCode 22 | |||||
| versionName "1.52-dev" | |||||
| externalNativeBuild { | |||||
| cmake { | |||||
| arguments "-DUSE_ASYNC:BOOL=OFF", "-DUSE_MBROLA:BOOL=OFF" | |||||
| targets "ttsespeak", "espeak-data" | |||||
| } | |||||
| } | |||||
| } | |||||
| externalNativeBuild { | |||||
| cmake { | |||||
| path "jni/CMakeLists.txt" | |||||
| version "3.22.1" | |||||
| } | |||||
| } | |||||
| sourceSets { | |||||
| main { | |||||
| manifest.srcFile 'AndroidManifest.xml' | |||||
| java.srcDirs = ['src'] | |||||
| res.srcDirs = ['res'] | |||||
| } | |||||
| androidTest.setRoot('eSpeakTests') | |||||
| androidTest { | |||||
| java.srcDirs = ['eSpeakTests/src'] | |||||
| } | |||||
| } | |||||
| lint { | |||||
| abortOnError false | |||||
| } | |||||
| } | |||||
| tasks.register('checkData') { | tasks.register('checkData') { | ||||
| doFirst { | doFirst { | ||||
| assert file("../espeak-ng-data/en_dict").exists() | assert file("../espeak-ng-data/en_dict").exists() | ||||
| } | } | ||||
| tasks.register('createDataArchive', Zip) { | tasks.register('createDataArchive', Zip) { | ||||
| dependsOn tasks.checkData | |||||
| preserveFileTimestamps = false | preserveFileTimestamps = false | ||||
| reproducibleFileOrder = true | reproducibleFileOrder = true | ||||
| archiveFileName = "espeakdata.zip" | archiveFileName = "espeakdata.zip" | ||||
| destinationDirectory = file("res/raw") | destinationDirectory = file("res/raw") | ||||
| from("../espeak-ng-data/") { | from("build/generated/espeak-ng-data/") { | ||||
| into "espeak-ng-data" | into "espeak-ng-data" | ||||
| } | } | ||||
| } | } | ||||
| rename { return 'espeakdata_version' } | rename { return 'espeakdata_version' } | ||||
| into file("./res/raw") | into file("./res/raw") | ||||
| } | } | ||||
| preBuild.dependsOn createDataVersion | |||||
| android { | |||||
| compileSdk 33 | |||||
| ndkVersion "25.1.8937393" | |||||
| namespace "com.reecedunn.espeak" | |||||
| defaultConfig { | |||||
| minSdk 19 | |||||
| targetSdk 30 | |||||
| versionCode 22 | |||||
| versionName "1.52-dev" | |||||
| } | |||||
| externalNativeBuild { | |||||
| ndkBuild { | |||||
| path "jni/Android.mk" | |||||
| } | |||||
| } | |||||
| sourceSets { | |||||
| main { | |||||
| manifest.srcFile 'AndroidManifest.xml' | |||||
| java.srcDirs = ['src'] | |||||
| res.srcDirs = ['res'] | |||||
| } | |||||
| androidTest.setRoot('eSpeakTests') | |||||
| androidTest { | |||||
| java.srcDirs = ['eSpeakTests/src'] | |||||
| } | |||||
| } | |||||
| lint { | project.afterEvaluate { | ||||
| abortOnError false | tasks.checkData.dependsOn(externalNativeBuildDebug) | ||||
| } | tasks.createDataArchive.dependsOn(externalNativeBuildDebug) | ||||
| javaPreCompileDebug.dependsOn(tasks.createDataVersion) | |||||
| javaPreCompileRelease.dependsOn(tasks.createDataVersion) | |||||
| } | } |
| LOCAL_PATH:= $(call my-dir) | |||||
| include $(CLEAR_VARS) | |||||
| #LOCAL_CFLAGS = -std=c11 # speechplayer is c++ code | |||||
| # ucd-tools wide-character compatibility support: | |||||
| UCDTOOLS_SRC_PATH := ../../src/ucd-tools/src | |||||
| UCDTOOLS_SRC_FILES := \ | |||||
| $(subst $(LOCAL_PATH)/$(UCDTOOLS_SRC_PATH),$(UCDTOOLS_SRC_PATH),$(wildcard $(LOCAL_PATH)/$(UCDTOOLS_SRC_PATH)/*.c*)) | |||||
| LOCAL_SRC_FILES += $(UCDTOOLS_SRC_FILES) | |||||
| SPEECHPLAYER_SRC_FILES := \ | |||||
| ../../src/speechPlayer/src/frame.cpp \ | |||||
| ../../src/speechPlayer/src/speechPlayer.cpp \ | |||||
| ../../src/speechPlayer/src/speechWaveGenerator.cpp | |||||
| LOCAL_SRC_FILES += $(SPEECHPLAYER_SRC_FILES) | |||||
| ESPEAK_SOURCES := \ | |||||
| src/libespeak-ng/common.c \ | |||||
| src/libespeak-ng/compiledata.c \ | |||||
| src/libespeak-ng/compiledict.c \ | |||||
| src/libespeak-ng/compilembrola.c \ | |||||
| src/libespeak-ng/dictionary.c \ | |||||
| src/libespeak-ng/encoding.c \ | |||||
| src/libespeak-ng/error.c \ | |||||
| src/libespeak-ng/espeak_api.c \ | |||||
| src/libespeak-ng/ieee80.c \ | |||||
| src/libespeak-ng/intonation.c \ | |||||
| src/libespeak-ng/klatt.c \ | |||||
| src/libespeak-ng/langopts.c \ | |||||
| src/libespeak-ng/mnemonics.c \ | |||||
| src/libespeak-ng/numbers.c \ | |||||
| src/libespeak-ng/phoneme.c \ | |||||
| src/libespeak-ng/phonemelist.c \ | |||||
| src/libespeak-ng/readclause.c \ | |||||
| src/libespeak-ng/setlengths.c \ | |||||
| src/libespeak-ng/soundicon.c \ | |||||
| src/libespeak-ng/spect.c \ | |||||
| src/libespeak-ng/speech.c \ | |||||
| src/libespeak-ng/sPlayer.c \ | |||||
| src/libespeak-ng/ssml.c \ | |||||
| src/libespeak-ng/synthdata.c \ | |||||
| src/libespeak-ng/synthesize.c \ | |||||
| src/libespeak-ng/synth_mbrola.c \ | |||||
| src/libespeak-ng/translate.c \ | |||||
| src/libespeak-ng/translateword.c \ | |||||
| src/libespeak-ng/tr_languages.c \ | |||||
| src/libespeak-ng/voices.c \ | |||||
| src/libespeak-ng/wavegen.c | |||||
| ESPEAK_SRC_PATH := ../../src | |||||
| ESPEAK_SRC_FILES := \ | |||||
| $(subst src/,$(ESPEAK_SRC_PATH)/,$(ESPEAK_SOURCES)) | |||||
| LOCAL_CFLAGS += -DINCLUDE_KLATT -DINCLUDE_SPEECHPLAYER -DINCLUDE_SONIC -DHAVE_ENDIAN_H | |||||
| LOCAL_SRC_FILES += \ | |||||
| $(filter-out $(BLACKLIST_SRC_FILES),$(ESPEAK_SRC_FILES)) | |||||
| # JNI | |||||
| LOCAL_SRC_FILES += \ | |||||
| $(subst $(LOCAL_PATH)/jni,jni,$(wildcard $(LOCAL_PATH)/jni/*.c)) | |||||
| # Common | |||||
| LOCAL_C_INCLUDES += \ | |||||
| $(LOCAL_PATH)/include \ | |||||
| $(LOCAL_PATH)/$(UCDTOOLS_SRC_PATH)/include \ | |||||
| $(LOCAL_PATH)/../../src/speechPlayer/include \ | |||||
| $(LOCAL_PATH)/$(ESPEAK_SRC_PATH)/include \ | |||||
| $(LOCAL_PATH)/$(ESPEAK_SRC_PATH)/include/compat | |||||
| LOCAL_LDLIBS := \ | |||||
| -llog | |||||
| LOCAL_MODULE := libttsespeak | |||||
| LOCAL_MODULE_TAGS := optional | |||||
| LOCAL_PRELINK_MODULE := false | |||||
| include $(BUILD_SHARED_LIBRARY) |
| cmake_minimum_required(VERSION 3.8) | |||||
| project(espeak-android) | |||||
| add_subdirectory(../../ espeakng) | |||||
| add_custom_target( | |||||
| espeak-data | |||||
| COMMAND ${CMAKE_COMMAND} -B${CMAKE_CURRENT_BINARY_DIR}/../espeak-data ${CMAKE_CURRENT_SOURCE_DIR}/../../ | |||||
| COMMAND ${CMAKE_COMMAND} --build ${CMAKE_CURRENT_BINARY_DIR}/../espeak-data --target data | |||||
| COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/../espeak-data/espeak-ng-data ${CMAKE_SOURCE_DIR}/../build/generated/espeak-ng-data | |||||
| ) | |||||
| message(STATUS "Data: ${CMAKE_CURRENT_SOURCE_DIR}") | |||||
| find_library(A_LOG log) | |||||
| add_library(ttsespeak SHARED | |||||
| jni/eSpeakService.c | |||||
| ) | |||||
| target_include_directories(ttsespeak PRIVATE | |||||
| include | |||||
| ) | |||||
| target_link_libraries(ttsespeak PRIVATE | |||||
| espeak-ng ${A_LOG} | |||||
| ) |
| #include <unistd.h> | #include <unistd.h> | ||||
| #include <stdlib.h> | #include <stdlib.h> | ||||
| #include <stdbool.h> | #include <stdbool.h> | ||||
| #include <string.h> | |||||
| #include <jni.h> | #include <jni.h> | ||||
| #include <espeak/speak_lib.h> | #include <espeak/speak_lib.h> |