Skip to content

Commit

Permalink
v0.1 Android
Browse files Browse the repository at this point in the history
  • Loading branch information
laves authored Feb 16, 2024
1 parent 460cf0f commit 766d11e
Show file tree
Hide file tree
Showing 105 changed files with 4,135 additions and 11 deletions.
133 changes: 133 additions & 0 deletions .github/workflows/android-appcenter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
name: Android AppCenter Tests

on:
workflow_dispatch:
push:
branches: [ main ]
paths:
- '.github/workflows/android-appcenter.yml'
- 'binding/android/OrcaTestApp/**'
- 'resources/.test/**'
pull_request:
branches: [ main, 'v[0-9]+.[0-9]+' ]
paths:
- '.github/workflows/android-appcenter.yml'
- 'binding/android/OrcaTestApp/**'
- 'resources/.test/**'

defaults:
run:
working-directory: binding/android/OrcaTestApp

jobs:
build:
name: Run Android Tests on AppCenter
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3

- name: Set up Node.js LTS
uses: actions/setup-node@v3
with:
node-version: lts/*

- name: Install AppCenter CLI
run: npm install -g appcenter-cli

- name: set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'

- name: Copy test_resources
run: ./copy_test_resources.sh

- name: Inject AccessKey
run: echo pvTestingAccessKey="${{secrets.PV_VALID_ACCESS_KEY}}" >> local.properties

- name: Inject Android keystore variables
run: |
echo storePassword="${{secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD}}" >> local.properties
echo keyPassword="${{secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD}}" >> local.properties
echo keyAlias=picovoice >> local.properties
echo storeFile=../picovoice.jks >> local.properties
- name: Setup Android keystore file
run: echo "${{secrets.ANDROID_RELEASE_KEYSTORE_FILE_B64}}" | base64 -d > picovoice.jks

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Build app
run: ./gradlew assembleDebug

- name: Build androidTest
run: ./gradlew assembleAndroidTest

- name: Run tests on AppCenter
run: appcenter test run espresso
--token ${{secrets.APPCENTERAPITOKEN}}
--app "Picovoice/Orca-Android"
--devices "Picovoice/android-min-max"
--app-path orca-test-app/build/outputs/apk/debug/orca-test-app-debug.apk
--test-series "orca-android"
--locale "en_US"
--build-dir orca-test-app/build/outputs/apk/androidTest/debug

build-integ:
name: Run Android Integration Tests on AppCenter
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3

- name: Set up Node.js LTS
uses: actions/setup-node@v3
with:
node-version: lts/*

- name: Install AppCenter CLI
run: npm install -g appcenter-cli

- name: set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'

- name: Copy test_resources
run: ./copy_test_resources.sh

- name: Inject AccessKey
run: echo pvTestingAccessKey="${{secrets.PV_VALID_ACCESS_KEY}}" >> local.properties

- name: Inject Android keystore variables
run: |
echo storePassword="${{secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD}}" >> local.properties
echo keyPassword="${{secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD}}" >> local.properties
echo keyAlias=picovoice >> local.properties
echo storeFile=../picovoice.jks >> local.properties
- name: Setup Android keystore file
run: echo "${{secrets.ANDROID_RELEASE_KEYSTORE_FILE_B64}}" | base64 -d > picovoice.jks

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Build app
run: ./gradlew assembleRelease

- name: Build androidTest
run: ./gradlew assembleReleaseAndroidTest -DtestBuildType=integ

- name: Run tests on AppCenter
run: appcenter test run espresso
--token ${{secrets.APPCENTERAPITOKEN}}
--app "Picovoice/Orca-Android"
--devices "Picovoice/android-min-max"
--app-path orca-test-app/build/outputs/apk/release/orca-test-app-release.apk
--test-series "orca-android"
--locale "en_US"
--build-dir orca-test-app/build/outputs/apk/androidTest/release
35 changes: 35 additions & 0 deletions .github/workflows/android-demos.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Android Demos

on:
workflow_dispatch:
push:
branches: [ main ]
paths:
- '.github/workflows/android-demos.yml'
- 'demo/android/**'
- '!demo/android/OrcaDemo/README.md'
pull_request:
branches: [ main, 'v[0-9]+.[0-9]+' ]
paths:
- '.github/workflows/android-demos.yml'
- 'demo/android/**'
- '!demo/android/OrcaDemo/README.md'

jobs:
build-orca-demo:
runs-on: ubuntu-latest
defaults:
run:
working-directory: demo/android/OrcaDemo

steps:
- uses: actions/checkout@v3

- name: set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'

- name: Build
run: ./gradlew assembleDebug
95 changes: 95 additions & 0 deletions .github/workflows/android-perf.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
name: Android Performance

on:
workflow_dispatch:
push:
branches: [ main ]
paths:
- 'lib/android/**'
- 'lib/common/**'
- '.github/workflows/android-perf.yml'
pull_request:
branches: [ main, 'v[0-9]+.[0-9]+' ]
paths:
- 'lib/android/**'
- 'lib/common/**'
- '.github/workflows/android-perf.yml'

defaults:
run:
working-directory: binding/android/OrcaTestApp

jobs:
build:
name: Run Android Speed Tests on AppCenter
runs-on: ubuntu-latest

strategy:
matrix:
device: [single-android, 32bit-android]
include:
- device: single-android
procPerformanceThresholdSec: 3.0
- device: 32bit-android
procPerformanceThresholdSec: 19.0

steps:
- uses: actions/checkout@v3

- name: Set up Node.js LTS
uses: actions/setup-node@v3
with:
node-version: lts/*

- name: Install AppCenter CLI
run: npm install -g appcenter-cli

- name: set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'

- name: Copy test_resources
run: ./copy_test_resources.sh

- name: Inject AccessKey
run: echo pvTestingAccessKey="${{secrets.PV_VALID_ACCESS_KEY}}" >> local.properties

- name: Inject Number of Iterations
run: echo numTestIterations="30" >> local.properties

- name: Inject Android keystore variables
run: |
echo storePassword="${{secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD}}" >> local.properties
echo keyPassword="${{secrets.ANDROID_RELEASE_KEYSTORE_PASSWORD}}" >> local.properties
echo keyAlias=picovoice >> local.properties
echo storeFile=../picovoice.jks >> local.properties
- name: Setup Android keystore file
run: echo "${{secrets.ANDROID_RELEASE_KEYSTORE_FILE_B64}}" | base64 -d > picovoice.jks

- name: Inject Init Performance Threshold
run: echo initPerformanceThresholdSec="${{ matrix.initPerformanceThresholdSec }}" >> local.properties

- name: Inject Proc Performance Threshold
run: echo procPerformanceThresholdSec="${{ matrix.procPerformanceThresholdSec }}" >> local.properties

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Build app
run: ./gradlew assembleDebug

- name: Build androidTest
run: ./gradlew assembleAndroidTest -DtestBuildType=perf

- name: Run tests on AppCenter
run: appcenter test run espresso
--token ${{secrets.APPCENTERAPITOKEN}}
--app "Picovoice/Orca-Android"
--devices "Picovoice/${{ matrix.device }}"
--app-path orca-test-app/build/outputs/apk/debug/orca-test-app-debug.apk
--test-series "orca-android"
--locale "en_US"
--build-dir orca-test-app/build/outputs/apk/androidTest/debug
50 changes: 49 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,11 @@ Orca may undergo changes as we continually enhance and refine the engine to prov
- [Demos](#demos)
- [Python](#python-demos)
- [C](#c-demos)
- [Android](#android-demo)
- [SDKs](#sdks)
- [Python](#python)
- [C](#c)
- [Android](#android)
- [AccessKey](#accesskey)
- [Releases](#releases)
- [FAQ](#faq)
Expand Down Expand Up @@ -68,7 +70,7 @@ in [lib/common](./lib/common).
To synthesize speech with a specific voice, provide the associated model file as an argument to the orca init function.
The following are the voices currently available:

| Model name | Sample rate (Hz) |
| Model name | Sample rate (Hz) |
|:---------------------------------------------------------:|:----------------:|
| [orca_params_female.pv](lib/common/orca_params_female.pv) | 22050 |
| [orca_params_male.pv](lib/common/orca_params_male.pv) | 22050 |
Expand Down Expand Up @@ -128,6 +130,12 @@ Run the demo:
./demo/c/build/orca_demo -l ${LIBRARY_PATH} -m ${MODEL_PATH} -a ${ACCESS_KEY} -t ${TEXT} -o ${OUTPUT_PATH}
```

### Android Demo

Using Android Studio, open [demo/android/OrcaDemo](./demo/android/OrcaDemo) as an Android project and then run the application.

Replace `"${YOUR_ACCESS_KEY_HERE}"` in the file [MainActivity.java](./demo/android/OrcaDemo/orca-demo-app/src/main/java/ai/picovoice/orcademo/MainActivity.java) with your `AccessKey`.

## SDKs

### Python
Expand Down Expand Up @@ -207,6 +215,46 @@ pv_orca_synthesize_params_delete(synthesize_params);
pv_orca_delete(handle);
```
### Android
To include the Orca package in your Android project, ensure you have included `mavenCentral()` in your top-level `build.gradle` file and then add the following to your app's `build.gradle`:
```groovy
dependencies {
implementation 'ai.picovoice:orca-android:${LATEST_VERSION}'
}
```

Create an instance of the engine and generate speech:

```java
import ai.picovoice.orca.*;

final String accessKey = "${ACCESS_KEY}"; // AccessKey obtained from Picovoice Console (https://console.picovoice.ai/)
final String modelPath = "${MODEL_FILE_PATH}";
try {
Orca orca = new Orca.Builder()
.setAccessKey(accessKey)
.setModelPath(modelPath)
.build(appContext);

short[] pcm = orca.synthesize(
"${TEXT}",
new OrcaSynthesizeParams.Builder().build());

} catch (OrcaException ex) { }
```

Replace `${ACCESS_KEY}` with yours obtained from Picovoice Console, `${MODEL_FILE_PATH}` with an Orca [voice model file](./lib/common) and `${TEXT}` with the text to be synthesized including potential [custom pronunciations](#custom-pronunciations).

Finally, when done make sure to explicitly release the resources:

```java
orca.delete()
```

For more details, see the [Android SDK](./binding/android/README.md).

## Releases

### v0.1.0 - January 24th, 2024
Expand Down
15 changes: 15 additions & 0 deletions binding/android/Orca/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
publish-mavencentral.gradle
25 changes: 25 additions & 0 deletions binding/android/Orca/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
ext {
defaultTargetSdkVersion = 31
}

buildscript {
repositories {
google()
maven { url "https://plugins.gradle.org/m2/" }
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.4.2"
}
}

allprojects {
repositories {
google()
mavenCentral()
}
}

tasks.register('clean', Delete) {
delete rootProject.buildDir
}
Loading

0 comments on commit 766d11e

Please sign in to comment.