diff --git a/.github/workflows/release-dart-package.yaml b/.github/workflows/release-dart-package.yaml index 9f577ed25..8271954a6 100644 --- a/.github/workflows/release-dart-package.yaml +++ b/.github/workflows/release-dart-package.yaml @@ -14,10 +14,11 @@ concurrency: cancel-in-progress: true jobs: - release_dart: + sherpa_onnx_linux: + # if: false permissions: id-token: write # Required for authentication using OIDC - name: Release dart + name: sherpa_onnx_linux runs-on: ubuntu-latest steps: @@ -31,21 +32,470 @@ jobs: - uses: dart-lang/setup-dart@v1 - - name: Copy pre-build libs + - name: Fix version shell: bash run: | - cd scripts/dart - ./release.sh - cd ../.. + SHERPA_ONNX_VERSION=$(grep "SHERPA_ONNX_VERSION" ./CMakeLists.txt | cut -d " " -f 2 | cut -d '"' -f 2) - mv -v sherpa-onnx/flutter /tmp/to-be-published + src_dir=$PWD/flutter/sherpa_onnx_linux + pushd $src_dir + v="version: $SHERPA_ONNX_VERSION" + echo "v: $v" + sed -i.bak s"/^version: .*/$v/" ./pubspec.yaml + rm *.bak + git status + git diff - cp -v README.md /tmp/to-be-published + - name: Copy extra files + shell: bash + run: | + dst=flutter/sherpa_onnx_linux + + mkdir $dst/example + + cp -v flutter/sherpa_onnx/example/* $dst/example + cp -v LICENSE $dst/ + cp -v CHANGELOG.md $dst/ + + git status + + - name: Build sherpa-onnx + uses: addnab/docker-run-action@v3 + with: + image: quay.io/pypa/manylinux2014_x86_64 + options: | + --volume ${{ github.workspace }}/:/home/runner/work/sherpa-onnx/sherpa-onnx + shell: bash + run: | + uname -a + gcc --version + cmake --version + cat /etc/*release + id + pwd + + cd /home/runner/work/sherpa-onnx/sherpa-onnx + + mkdir build + cd build + + cmake \ + -D SHERPA_ONNX_ENABLE_PORTAUDIO=OFF \ + -D SHERPA_ONNX_ENABLE_TTS=ON \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_SHARED_LIBS=ON \ + -D CMAKE_INSTALL_PREFIX=./install \ + -D SHERPA_ONNX_ENABLE_JNI=OFF \ + -D SHERPA_ONNX_ENABLE_BINARY=OFF \ + .. + + make -j2 + make install + + ls -lh ./install/lib + + - name: Copy pre-built libs + shell: bash + run: | + cp -v build/install/lib/lib*.so* flutter/sherpa_onnx_linux/linux/ + pushd flutter/sherpa_onnx_linux/linux/ + + rm libonnxruntime.so + ln -s libonnxruntime.so.* ./libonnxruntime.so + + popd + + mv -v flutter/sherpa_onnx_linux /tmp/to_be_published + + ls -lh /tmp/to_be_published/linux + + - name: Release + shell: bash + run: | + cd /tmp/to_be_published + flutter pub get + flutter pub publish --dry-run + flutter pub publish --force + + sherpa_onnx_macos: + # if: false + permissions: + id-token: write # Required for authentication using OIDC + name: sherpa_onnx_macos + runs-on: macos-latest + + steps: + - uses: actions/checkout@v4 + + - name: ccache + uses: hendrikmuhs/ccache-action@v1.2 + with: + key: ${{ matrix.os }}-flutter-release-package + + - name: Setup Flutter SDK + uses: flutter-actions/setup-flutter@v3 + with: + channel: stable + version: latest + + - uses: dart-lang/setup-dart@v1 + + - name: Fix version + shell: bash + run: | + SHERPA_ONNX_VERSION=$(grep "SHERPA_ONNX_VERSION" ./CMakeLists.txt | cut -d " " -f 2 | cut -d '"' -f 2) + + src_dir=$PWD/flutter/sherpa_onnx_macos + pushd $src_dir + v="version: $SHERPA_ONNX_VERSION" + echo "v: $v" + sed -i.bak s"/^version: .*/$v/" ./pubspec.yaml + rm *.bak + git status + git diff + + - name: Copy extra files + shell: bash + run: | + dst=flutter/sherpa_onnx_macos + + mkdir $dst/example + + cp -v flutter/sherpa_onnx/example/* $dst/example + cp -v LICENSE $dst/ + cp -v CHANGELOG.md $dst/ + + git status + + - name: Configure CMake + shell: bash + run: | + export CMAKE_CXX_COMPILER_LAUNCHER=ccache + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + cmake --version + + mkdir build + cd build + cmake \ + -D SHERPA_ONNX_ENABLE_PORTAUDIO=OFF \ + -D SHERPA_ONNX_ENABLE_TTS=ON \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_SHARED_LIBS=ON \ + -D CMAKE_INSTALL_PREFIX=./install \ + -D SHERPA_ONNX_ENABLE_JNI=OFF \ + -D SHERPA_ONNX_ENABLE_BINARY=OFF \ + -D CMAKE_OSX_ARCHITECTURES="x86_64;arm64" \ + .. + + - name: Build sherpa-onnx + shell: bash + run: | + export CMAKE_CXX_COMPILER_LAUNCHER=ccache + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + cmake --version + + cd build + make -j2 install + + ls -lh install/lib/libsherpa-onnx-core.dylib + file install/lib/libsherpa-onnx-core.dylib + + - name: Copy pre-built libs + shell: bash + run: | + cp -v build/install/lib/lib*.dylib* flutter/sherpa_onnx_macos/macos/ + + + mv -v flutter/sherpa_onnx_macos /tmp/to_be_published + + ls -lh /tmp/to_be_published/macos + + pushd /tmp/to_be_published/macos + + rm libonnxruntime.dylib + + ls -lh + + popd + + - name: Release + shell: bash + run: | + cd /tmp/to_be_published + du -h -d1 . + flutter pub get + flutter pub publish --dry-run + flutter pub publish --force + + sherpa_onnx_windows: + # if: false + permissions: + id-token: write # Required for authentication using OIDC + name: sherpa_onnx_windows + runs-on: windows-2019 + + steps: + - uses: actions/checkout@v4 + + - name: Fix version + shell: bash + run: | + SHERPA_ONNX_VERSION=$(grep "SHERPA_ONNX_VERSION" ./CMakeLists.txt | cut -d " " -f 2 | cut -d '"' -f 2) + + src_dir=$PWD/flutter/sherpa_onnx_windows + pushd $src_dir + v="version: $SHERPA_ONNX_VERSION" + echo "v: $v" + sed -i.bak s"/^version: .*/$v/" ./pubspec.yaml + rm *.bak + git status + git diff + + - name: Copy extra files + shell: bash + run: | + dst=flutter/sherpa_onnx_windows + + mkdir $dst/example + + cp -v flutter/sherpa_onnx/example/* $dst/example + cp -v LICENSE $dst/ + cp -v CHANGELOG.md $dst/ + + git status + + - name: Configure CMake + shell: bash + run: | + mkdir build + cd build + cmake \ + -D SHERPA_ONNX_ENABLE_PORTAUDIO=OFF \ + -D SHERPA_ONNX_ENABLE_TTS=ON \ + -D CMAKE_BUILD_TYPE=Release \ + -D BUILD_SHARED_LIBS=ON \ + -D CMAKE_INSTALL_PREFIX=./install \ + -D SHERPA_ONNX_ENABLE_JNI=OFF \ + -D SHERPA_ONNX_ENABLE_BINARY=OFF \ + .. + + - name: Build sherpa-onnx + shell: bash + run: | + cd build + cmake --build . --target install --config Release + + ls -lh install/lib/*.dll + + - name: Copy pre-built libs + shell: bash + run: | + cp -v build/install/lib/*.dll flutter/sherpa_onnx_windows/windows/ + mv -v flutter/sherpa_onnx_windows /tmp/to_be_published + + ls -lh /tmp/to_be_published/windows + + - name: Setup Flutter SDK + uses: flutter-actions/setup-flutter@v3 + with: + channel: stable + version: latest + + - uses: dart-lang/setup-dart@v1 - name: Release shell: bash run: | - cd /tmp/to-be-published + cd /tmp/to_be_published + flutter pub get + flutter pub publish --dry-run + flutter pub publish --force + + sherpa_onnx_android: + # if: false + permissions: + id-token: write # Required for authentication using OIDC + name: sherpa_onnx_android + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: ccache + uses: hendrikmuhs/ccache-action@v1.2 + with: + key: ${{ matrix.os }}-flutter-release-package-android + + - name: Fix version + shell: bash + run: | + SHERPA_ONNX_VERSION=$(grep "SHERPA_ONNX_VERSION" ./CMakeLists.txt | cut -d " " -f 2 | cut -d '"' -f 2) + + src_dir=$PWD/flutter/sherpa_onnx_android + pushd $src_dir + v="version: $SHERPA_ONNX_VERSION" + echo "v: $v" + sed -i.bak s"/^version: .*/$v/" ./pubspec.yaml + rm *.bak + git status + git diff + + - name: Copy extra files + shell: bash + run: | + dst=flutter/sherpa_onnx_android + + mkdir $dst/example + + cp -v flutter/sherpa_onnx/example/* $dst/example + cp -v LICENSE $dst/ + cp -v CHANGELOG.md $dst/ + + git status + + - name: Build android-arm64-v8a + shell: bash + run: | + export CMAKE_CXX_COMPILER_LAUNCHER=ccache + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + cmake --version + + export SHERPA_ONNX_ENABLE_C_API=ON + export SHERPA_ONNX_ENABLE_JNI=OFF + export SHERPA_ONNX_ENABLE_BINARY=OFF + + ./build-android-arm64-v8a.sh + + - name: Build android-armv7-eabi + shell: bash + run: | + export CMAKE_CXX_COMPILER_LAUNCHER=ccache + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + cmake --version + + export SHERPA_ONNX_ENABLE_C_API=ON + export SHERPA_ONNX_ENABLE_JNI=OFF + export SHERPA_ONNX_ENABLE_BINARY=OFF + + ./build-android-armv7-eabi.sh + + - name: Build android-x86 + shell: bash + run: | + export CMAKE_CXX_COMPILER_LAUNCHER=ccache + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + cmake --version + + export SHERPA_ONNX_ENABLE_C_API=ON + export SHERPA_ONNX_ENABLE_JNI=OFF + export SHERPA_ONNX_ENABLE_BINARY=OFF + + ./build-android-x86.sh + + - name: Build android-x86-64 + shell: bash + run: | + export CMAKE_CXX_COMPILER_LAUNCHER=ccache + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + cmake --version + + export SHERPA_ONNX_ENABLE_C_API=ON + export SHERPA_ONNX_ENABLE_JNI=OFF + export SHERPA_ONNX_ENABLE_BINARY=OFF + + ./build-android-x86-64.sh + + - name: Copy pre-built libs + shell: bash + run: | + echo "----arm64-v8a----" + cp -v build-android-arm64-v8a/install/lib/lib*.so flutter/sherpa_onnx_android/android/src/main/jniLibs/arm64-v8a/ + + echo "----armv7-eabi----" + cp -v build-android-armv7-eabi/install/lib/lib*.so flutter/sherpa_onnx_android/android/src/main/jniLibs/armeabi-v7a + + echo "----x86----" + cp -v build-android-x86/install/lib/lib*.so flutter/sherpa_onnx_android/android/src/main/jniLibs/x86 + + echo "----x86_64----" + cp -v build-android-x86-64/install/lib/lib*.so flutter/sherpa_onnx_android/android/src/main/jniLibs/x86_64 + + mv -v flutter/sherpa_onnx_android /tmp/to_be_published + + ls -lh /tmp/to_be_published + + - name: Setup Flutter SDK + uses: flutter-actions/setup-flutter@v3 + with: + channel: stable + version: latest + + - uses: dart-lang/setup-dart@v1 + + - name: Release + shell: bash + run: | + cd /tmp/to_be_published + du -h -d1 . + + flutter pub get + flutter pub publish --dry-run + flutter pub publish --force + + sherpa_onnx: + # needs: [sherpa_onnx_linux, sherpa_onnx_macos, sherpa_onnx_windows, sherpa_onnx_android] + # if: false + permissions: + id-token: write # Required for authentication using OIDC + name: sherpa_onnx + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Setup Flutter SDK + uses: flutter-actions/setup-flutter@v3 + with: + channel: stable + version: latest + + - uses: dart-lang/setup-dart@v1 + + - name: Fix version + shell: bash + run: | + SHERPA_ONNX_VERSION=$(grep "SHERPA_ONNX_VERSION" ./CMakeLists.txt | cut -d " " -f 2 | cut -d '"' -f 2) + + src_dir=$PWD/flutter/sherpa_onnx + pushd $src_dir + v="version: $SHERPA_ONNX_VERSION" + echo "v: $v" + sed -i.bak s"/^version: .*/$v/" ./pubspec.yaml + rm *.bak + git status + git diff + + - name: Copy extra files + shell: bash + run: | + dst=flutter/sherpa_onnx + + cp -v LICENSE $dst/ + cp -v CHANGELOG.md $dst/ + cp -v README.md $dst/ + + git status + + mv -v flutter/sherpa_onnx /tmp/to_be_published + + ls -lh /tmp/to_be_published + + - name: Release + shell: bash + run: | + cd /tmp/to_be_published + du -h -d1 . + flutter pub get flutter pub publish --dry-run flutter pub publish --force diff --git a/.github/workflows/test-dart-package.yaml b/.github/workflows/test-dart-package.yaml index 84556ff7d..4721f4a77 100644 --- a/.github/workflows/test-dart-package.yaml +++ b/.github/workflows/test-dart-package.yaml @@ -46,6 +46,51 @@ jobs: dart --version flutter doctor + - name: Display sherpa-onnx package info + shell: bash + run: | + cd dart-api-examples/vad + flutter pub get + + if [[ ${{ matrix.os }} == ubuntu-latest ]]; then + echo "-----" + ls -lh /home/runner/work/_temp/pub-cache/hosted/pub.dev + + echo "-----" + ls -lh /home/runner/work/_temp/pub-cache/hosted/pub.dev/sherpa_onnx* + + echo "-----" + ls -lh /home/runner/work/_temp/pub-cache/hosted/pub.dev/sherpa_onnx*/* + + echo "-----" + ls -lh /home/runner/work/_temp/pub-cache/hosted/pub.dev/sherpa_onnx_linux-* + + # sudo mkdir /home/runner/work/_temp/pub-cache/hosted/pub.dev/sherpa_onnx_linux-1.10.7/lib + # sudo touch /home/runner/work/_temp/pub-cache/hosted/pub.dev/sherpa_onnx_linux-1.10.7/lib/.gitkeep + + echo "-----" + ls -lh /home/runner/work/_temp/pub-cache/hosted/pub.dev/sherpa_onnx_linux-*/linux + elif [[ ${{ matrix.os }} == macos-latest ]]; then + echo "-----" + ls -lh /Users/runner/work/_temp/pub-cache/hosted/pub.dev + + echo "-----" + ls -lh /Users/runner/work/_temp/pub-cache/hosted/pub.dev/sherpa_onnx* + + echo "-----" + ls -lh /Users/runner/work/_temp/pub-cache/hosted/pub.dev/sherpa_onnx*/* + + echo "-----" + ls -lh /Users/runner/work/_temp/pub-cache/hosted/pub.dev/sherpa_onnx_macos-*/ + + echo "-----" + ls -lh /Users/runner/work/_temp/pub-cache/hosted/pub.dev/sherpa_onnx_macos-*/macos + + # sudo mkdir /Users/runner/work/_temp/pub-cache/hosted/pub.dev/sherpa_onnx_macos-1.10.7/lib + # sudo touch /Users/runner/work/_temp/pub-cache/hosted/pub.dev/sherpa_onnx_macos-1.10.7/lib/.gitkeep + fi + + - name: Run tests shell: bash run: | diff --git a/.gitignore b/.gitignore index 2176798be..826af8494 100644 --- a/.gitignore +++ b/.gitignore @@ -108,3 +108,4 @@ sherpa-onnx-nemo-* sherpa-onnx-vits-* sherpa-onnx-telespeech-ctc-* *.fst +.ccache diff --git a/flutter/sherpa_onnx/CHANGELOG.md b/CHANGELOG.md similarity index 62% rename from flutter/sherpa_onnx/CHANGELOG.md rename to CHANGELOG.md index 93b72c105..d58bdad62 100644 --- a/flutter/sherpa_onnx/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ +## 1.10.9 + +* Fix released packages. piper-phonemize was not included in v1.10.8. + +## 1.10.8 + +* Fix released packages. There should be a lib directory. + ## 1.10.7 -* Support Android +* Support Android for Flutter. ## 1.10.2 diff --git a/CMakeLists.txt b/CMakeLists.txt index 328e790a2..66284fd92 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ project(sherpa-onnx) # ./nodejs-addon-examples # ./dart-api-examples/ # ./sherpa-onnx/flutter/CHANGELOG.md -set(SHERPA_ONNX_VERSION "1.10.6") +set(SHERPA_ONNX_VERSION "1.10.9") # Disable warning about # @@ -61,7 +61,7 @@ if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() -if(DEFINED ANDROID_ABI AND NOT SHERPA_ONNX_ENABLE_JNI) +if(DEFINED ANDROID_ABI AND NOT SHERPA_ONNX_ENABLE_JNI AND NOT SHERPA_ONNX_ENABLE_C_API) message(STATUS "Set SHERPA_ONNX_ENABLE_JNI to ON for Android") set(SHERPA_ONNX_ENABLE_JNI ON CACHE BOOL "" FORCE) endif() diff --git a/dart-api-examples/non-streaming-asr/pubspec.yaml b/dart-api-examples/non-streaming-asr/pubspec.yaml index 96b9f90a0..783497636 100644 --- a/dart-api-examples/non-streaming-asr/pubspec.yaml +++ b/dart-api-examples/non-streaming-asr/pubspec.yaml @@ -10,7 +10,7 @@ environment: # Add regular dependencies here. dependencies: - sherpa_onnx: ^1.10.2 + sherpa_onnx: ^1.10.9 path: ^1.9.0 args: ^2.5.0 diff --git a/dart-api-examples/streaming-asr/pubspec.yaml b/dart-api-examples/streaming-asr/pubspec.yaml index 65a1282ea..55073f4f4 100644 --- a/dart-api-examples/streaming-asr/pubspec.yaml +++ b/dart-api-examples/streaming-asr/pubspec.yaml @@ -11,7 +11,7 @@ environment: # Add regular dependencies here. dependencies: - sherpa_onnx: ^1.10.2 + sherpa_onnx: ^1.10.9 path: ^1.9.0 args: ^2.5.0 diff --git a/dart-api-examples/tts/pubspec.yaml b/dart-api-examples/tts/pubspec.yaml index 8732c3d04..174705fbe 100644 --- a/dart-api-examples/tts/pubspec.yaml +++ b/dart-api-examples/tts/pubspec.yaml @@ -8,7 +8,7 @@ environment: # Add regular dependencies here. dependencies: - sherpa_onnx: ^1.10.2 + sherpa_onnx: ^1.10.9 path: ^1.9.0 args: ^2.5.0 diff --git a/dart-api-examples/vad/pubspec.yaml b/dart-api-examples/vad/pubspec.yaml index 4c408dd6c..9a6904bdb 100644 --- a/dart-api-examples/vad/pubspec.yaml +++ b/dart-api-examples/vad/pubspec.yaml @@ -9,7 +9,7 @@ environment: sdk: ^3.4.0 dependencies: - sherpa_onnx: ^1.10.2 + sherpa_onnx: ^1.10.9 path: ^1.9.0 args: ^2.5.0 diff --git a/flutter-examples/streaming_asr/pubspec.yaml b/flutter-examples/streaming_asr/pubspec.yaml index 6ffe37657..c35869217 100644 --- a/flutter-examples/streaming_asr/pubspec.yaml +++ b/flutter-examples/streaming_asr/pubspec.yaml @@ -30,7 +30,7 @@ dependencies: record: ^5.1.0 url_launcher: ^6.2.6 - sherpa_onnx: ^1.10.0 + sherpa_onnx: ^1.10.9 # sherpa_onnx: # path: ../../flutter/sherpa_onnx diff --git a/sherpa-onnx/flutter/notes.md b/flutter/notes2.md similarity index 96% rename from sherpa-onnx/flutter/notes.md rename to flutter/notes2.md index 42d872e58..9ec7dbed4 100644 --- a/sherpa-onnx/flutter/notes.md +++ b/flutter/notes2.md @@ -1,4 +1,4 @@ -# Usage +# Some use commands while learning flutter/dart ## macOS diff --git a/flutter/sherpa_onnx/README.md b/flutter/sherpa_onnx/README.md deleted file mode 100644 index 783f54dc3..000000000 --- a/flutter/sherpa_onnx/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# sherpa_onnx - -Please see diff --git a/flutter/sherpa_onnx/example/example.md b/flutter/sherpa_onnx/example/example.md index 465b0d517..f7e9fed4e 100644 --- a/flutter/sherpa_onnx/example/example.md +++ b/flutter/sherpa_onnx/example/example.md @@ -1,20 +1,16 @@ # sherpa-onnx app example -See also +## Flutter examples -## Streaming speech recognition +| Functions | URL | Supported Platforms| +|---|---|---| +|Streaming speech recognition| [Address](https://github.com/k2-fsa/sherpa-onnx/tree/master/flutter-examples/streaming_asr)| Android, macOS, Windows| -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/streaming-asr - -## Non-streaming speech recognition - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/non-streaming-asr - -## Text to speech (TTS) - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/tts - -## Voice activity detection (VAD) - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/vad +## Pure dart-examples +| Functions | URL | Supported Platforms| +|---|---|---| +|Streaming speech recognition| [Address](https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/streaming-asr)| macOS, Windows, Linux| +|Non-Streaming speech recognition| [Address](https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/non-streaming-asr)| macOS, Windows, Linux| +|Text to speech| [Address](https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/tts)| macOS, Windows, Linux| +|Voice activity detection (VAD)| [Address](https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/vad)| macOS, Windows, Linux| diff --git a/flutter/sherpa_onnx/pubspec.yaml b/flutter/sherpa_onnx/pubspec.yaml index 9abcdcd20..a30ea31e1 100644 --- a/flutter/sherpa_onnx/pubspec.yaml +++ b/flutter/sherpa_onnx/pubspec.yaml @@ -4,7 +4,7 @@ description: > Speech recognition, speech synthesis, and speaker recognition using next-gen Kaldi with onnxruntime without Internet connection. -repository: https://github.com/k2-fsa/sherpa-onnx/tree/master/sherpa-onnx/flutter +repository: https://github.com/k2-fsa/sherpa-onnx/tree/master/flutter issue_tracker: https://github.com/k2-fsa/sherpa-onnx/issues documentation: https://k2-fsa.github.io/sherpa/onnx/ @@ -16,8 +16,8 @@ topics: - audio-tagging - voice-activity-detection -# remember to change the version in ../sherpa_onnx_macos/macos/sherpa_onnx.podspec -version: 1.10.7 +# remember to change the version in ../sherpa_onnx_macos/macos/sherpa_onnx_macos.podspec +version: 1.10.9 homepage: https://github.com/k2-fsa/sherpa-onnx @@ -30,16 +30,16 @@ dependencies: flutter: sdk: flutter - sherpa_onnx_android: + sherpa_onnx_android: ^1.10.9 # path: ../sherpa_onnx_android - sherpa_onnx_macos: + sherpa_onnx_macos: ^1.10.9 # path: ../sherpa_onnx_macos - sherpa_onnx_linux: + sherpa_onnx_linux: ^1.10.9 # path: ../sherpa_onnx_linux # - sherpa_onnx_windows: + sherpa_onnx_windows: ^1.10.9 # path: ../sherpa_onnx_windows flutter: diff --git a/flutter/sherpa_onnx_android/example/.gitignore b/flutter/sherpa_onnx_android/example/.gitignore deleted file mode 100644 index 29a3a5017..000000000 --- a/flutter/sherpa_onnx_android/example/.gitignore +++ /dev/null @@ -1,43 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.pub-cache/ -.pub/ -/build/ - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Android Studio will place build artifacts here -/android/app/debug -/android/app/profile -/android/app/release diff --git a/flutter/sherpa_onnx_android/example/README.md b/flutter/sherpa_onnx_android/example/README.md deleted file mode 100644 index c97c78739..000000000 --- a/flutter/sherpa_onnx_android/example/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Introduction - -Please find examples at - -https://github.com/k2-fsa/sherpa-onnx/tree/master/flutter-examples - -and - -https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples diff --git a/flutter/sherpa_onnx_android/example/example.md b/flutter/sherpa_onnx_android/example/example.md deleted file mode 100644 index 3f8957b2e..000000000 --- a/flutter/sherpa_onnx_android/example/example.md +++ /dev/null @@ -1,18 +0,0 @@ -# sherpa-onnx app example - -## Streaming speech recognition - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/streaming-asr - -## Non-streaming speech recognition - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/non-streaming-asr - -## Text to speech (TTS) - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/tts - -## Voice activity detection (VAD) - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/vad - diff --git a/flutter/sherpa_onnx_android/lib/README.md b/flutter/sherpa_onnx_android/lib/README.md new file mode 100644 index 000000000..301806118 --- /dev/null +++ b/flutter/sherpa_onnx_android/lib/README.md @@ -0,0 +1,3 @@ +# Introduction + +This directory is left empty intentionally. diff --git a/flutter/sherpa_onnx_android/pubspec.yaml b/flutter/sherpa_onnx_android/pubspec.yaml index 42f8ae5c0..2b4a10c03 100644 --- a/flutter/sherpa_onnx_android/pubspec.yaml +++ b/flutter/sherpa_onnx_android/pubspec.yaml @@ -1,7 +1,24 @@ name: sherpa_onnx_android -description: "A new Flutter FFI plugin project." + +description: > + Speech recognition, speech synthesis, and speaker recognition using next-gen Kaldi + with onnxruntime without Internet connection. + version: 0.0.1 -homepage: + +repository: https://github.com/k2-fsa/sherpa-onnx/tree/master/flutter + +issue_tracker: https://github.com/k2-fsa/sherpa-onnx/issues +documentation: https://k2-fsa.github.io/sherpa/onnx/ + +homepage: https://github.com/k2-fsa/sherpa-onnx + +topics: + - speech-recognition + - speech-synthesis + - speaker-identification + - audio-tagging + - voice-activity-detection environment: sdk: '>=3.4.0 <4.0.0' diff --git a/flutter/sherpa_onnx_linux/example/.gitignore b/flutter/sherpa_onnx_linux/example/.gitignore deleted file mode 100644 index 29a3a5017..000000000 --- a/flutter/sherpa_onnx_linux/example/.gitignore +++ /dev/null @@ -1,43 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.pub-cache/ -.pub/ -/build/ - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Android Studio will place build artifacts here -/android/app/debug -/android/app/profile -/android/app/release diff --git a/flutter/sherpa_onnx_linux/example/README.md b/flutter/sherpa_onnx_linux/example/README.md deleted file mode 100644 index c97c78739..000000000 --- a/flutter/sherpa_onnx_linux/example/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Introduction - -Please find examples at - -https://github.com/k2-fsa/sherpa-onnx/tree/master/flutter-examples - -and - -https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples diff --git a/flutter/sherpa_onnx_linux/example/example.md b/flutter/sherpa_onnx_linux/example/example.md deleted file mode 100644 index 3f8957b2e..000000000 --- a/flutter/sherpa_onnx_linux/example/example.md +++ /dev/null @@ -1,18 +0,0 @@ -# sherpa-onnx app example - -## Streaming speech recognition - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/streaming-asr - -## Non-streaming speech recognition - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/non-streaming-asr - -## Text to speech (TTS) - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/tts - -## Voice activity detection (VAD) - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/vad - diff --git a/flutter/sherpa_onnx_linux/lib/README.md b/flutter/sherpa_onnx_linux/lib/README.md new file mode 100644 index 000000000..301806118 --- /dev/null +++ b/flutter/sherpa_onnx_linux/lib/README.md @@ -0,0 +1,3 @@ +# Introduction + +This directory is left empty intentionally. diff --git a/flutter/sherpa_onnx_linux/pubspec.yaml b/flutter/sherpa_onnx_linux/pubspec.yaml index c1575d3d0..40aeb9a33 100644 --- a/flutter/sherpa_onnx_linux/pubspec.yaml +++ b/flutter/sherpa_onnx_linux/pubspec.yaml @@ -1,7 +1,23 @@ name: sherpa_onnx_linux -description: "A new Flutter FFI plugin project." +description: > + Speech recognition, speech synthesis, and speaker recognition using next-gen Kaldi + with onnxruntime without Internet connection. + version: 0.0.1 -homepage: + +repository: https://github.com/k2-fsa/sherpa-onnx/tree/master/flutter + +issue_tracker: https://github.com/k2-fsa/sherpa-onnx/issues +documentation: https://k2-fsa.github.io/sherpa/onnx/ + +homepage: https://github.com/k2-fsa/sherpa-onnx + +topics: + - speech-recognition + - speech-synthesis + - speaker-identification + - audio-tagging + - voice-activity-detection environment: sdk: '>=3.4.0 <4.0.0' diff --git a/flutter/sherpa_onnx_macos/example/README.md b/flutter/sherpa_onnx_macos/example/README.md deleted file mode 100644 index c97c78739..000000000 --- a/flutter/sherpa_onnx_macos/example/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Introduction - -Please find examples at - -https://github.com/k2-fsa/sherpa-onnx/tree/master/flutter-examples - -and - -https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples diff --git a/flutter/sherpa_onnx_macos/example/example.md b/flutter/sherpa_onnx_macos/example/example.md deleted file mode 100644 index 3f8957b2e..000000000 --- a/flutter/sherpa_onnx_macos/example/example.md +++ /dev/null @@ -1,18 +0,0 @@ -# sherpa-onnx app example - -## Streaming speech recognition - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/streaming-asr - -## Non-streaming speech recognition - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/non-streaming-asr - -## Text to speech (TTS) - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/tts - -## Voice activity detection (VAD) - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/vad - diff --git a/flutter/sherpa_onnx_macos/lib/README.md b/flutter/sherpa_onnx_macos/lib/README.md new file mode 100644 index 000000000..301806118 --- /dev/null +++ b/flutter/sherpa_onnx_macos/lib/README.md @@ -0,0 +1,3 @@ +# Introduction + +This directory is left empty intentionally. diff --git a/flutter/sherpa_onnx_macos/macos/sherpa_onnx_macos.podspec b/flutter/sherpa_onnx_macos/macos/sherpa_onnx_macos.podspec index 12d7ac782..4bd1ee1ca 100644 --- a/flutter/sherpa_onnx_macos/macos/sherpa_onnx_macos.podspec +++ b/flutter/sherpa_onnx_macos/macos/sherpa_onnx_macos.podspec @@ -4,7 +4,7 @@ # Pod::Spec.new do |s| s.name = 'sherpa_onnx_macos' - s.version = '1.10.6' + s.version = '1.10.7' s.summary = 'sherpa-onnx Flutter FFI plugin project.' s.description = <<-DESC sherpa-onnx Flutter FFI plugin project. diff --git a/flutter/sherpa_onnx_macos/pubspec.yaml b/flutter/sherpa_onnx_macos/pubspec.yaml index 92099f264..72dc71347 100644 --- a/flutter/sherpa_onnx_macos/pubspec.yaml +++ b/flutter/sherpa_onnx_macos/pubspec.yaml @@ -1,7 +1,24 @@ name: sherpa_onnx_macos -description: "A new Flutter FFI plugin project." + +description: > + Speech recognition, speech synthesis, and speaker recognition using next-gen Kaldi + with onnxruntime without Internet connection. + version: 0.0.1 -homepage: + +repository: https://github.com/k2-fsa/sherpa-onnx/tree/master/flutter + +issue_tracker: https://github.com/k2-fsa/sherpa-onnx/issues +documentation: https://k2-fsa.github.io/sherpa/onnx/ + +homepage: https://github.com/k2-fsa/sherpa-onnx + +topics: + - speech-recognition + - speech-synthesis + - speaker-identification + - audio-tagging + - voice-activity-detection environment: sdk: '>=3.4.0 <4.0.0' diff --git a/flutter/sherpa_onnx_windows/example/.gitignore b/flutter/sherpa_onnx_windows/example/.gitignore deleted file mode 100644 index 29a3a5017..000000000 --- a/flutter/sherpa_onnx_windows/example/.gitignore +++ /dev/null @@ -1,43 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -**/doc/api/ -**/ios/Flutter/.last_build_id -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -.pub-cache/ -.pub/ -/build/ - -# Symbolication related -app.*.symbols - -# Obfuscation related -app.*.map.json - -# Android Studio will place build artifacts here -/android/app/debug -/android/app/profile -/android/app/release diff --git a/flutter/sherpa_onnx_windows/example/README.md b/flutter/sherpa_onnx_windows/example/README.md deleted file mode 100644 index c97c78739..000000000 --- a/flutter/sherpa_onnx_windows/example/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Introduction - -Please find examples at - -https://github.com/k2-fsa/sherpa-onnx/tree/master/flutter-examples - -and - -https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples diff --git a/flutter/sherpa_onnx_windows/example/example.md b/flutter/sherpa_onnx_windows/example/example.md deleted file mode 100644 index 3f8957b2e..000000000 --- a/flutter/sherpa_onnx_windows/example/example.md +++ /dev/null @@ -1,18 +0,0 @@ -# sherpa-onnx app example - -## Streaming speech recognition - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/streaming-asr - -## Non-streaming speech recognition - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/non-streaming-asr - -## Text to speech (TTS) - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/tts - -## Voice activity detection (VAD) - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/vad - diff --git a/flutter/sherpa_onnx_windows/lib/README.md b/flutter/sherpa_onnx_windows/lib/README.md new file mode 100644 index 000000000..301806118 --- /dev/null +++ b/flutter/sherpa_onnx_windows/lib/README.md @@ -0,0 +1,3 @@ +# Introduction + +This directory is left empty intentionally. diff --git a/flutter/sherpa_onnx_windows/pubspec.yaml b/flutter/sherpa_onnx_windows/pubspec.yaml index dac101c21..8aed51e69 100644 --- a/flutter/sherpa_onnx_windows/pubspec.yaml +++ b/flutter/sherpa_onnx_windows/pubspec.yaml @@ -1,7 +1,24 @@ name: sherpa_onnx_windows -description: "A new Flutter FFI plugin project." + +description: > + Speech recognition, speech synthesis, and speaker recognition using next-gen Kaldi + with onnxruntime without Internet connection. + version: 0.0.1 -homepage: + +repository: https://github.com/k2-fsa/sherpa-onnx/tree/master/flutter + +issue_tracker: https://github.com/k2-fsa/sherpa-onnx/issues +documentation: https://k2-fsa.github.io/sherpa/onnx/ + +homepage: https://github.com/k2-fsa/sherpa-onnx + +topics: + - speech-recognition + - speech-synthesis + - speaker-identification + - audio-tagging + - voice-activity-detection environment: sdk: '>=3.4.0 <4.0.0' diff --git a/sherpa-onnx/flutter/.gitignore b/sherpa-onnx/flutter/.gitignore deleted file mode 100644 index cf8f95e10..000000000 --- a/sherpa-onnx/flutter/.gitignore +++ /dev/null @@ -1,147 +0,0 @@ -# Do not remove or rename entries in this file, only add new ones -# See https://github.com/flutter/flutter/issues/128635 for more context. - -# Miscellaneous -*.class -*.lock -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# Visual Studio Code related -.classpath -.project -.settings/ -.vscode/* - -# Flutter repo-specific -/bin/cache/ -/bin/internal/bootstrap.bat -/bin/internal/bootstrap.sh -/bin/mingit/ -/dev/benchmarks/mega_gallery/ -/dev/bots/.recipe_deps -/dev/bots/android_tools/ -/dev/devicelab/ABresults*.json -/dev/docs/doc/ -/dev/docs/api_docs.zip -/dev/docs/flutter.docs.zip -/dev/docs/lib/ -/dev/docs/pubspec.yaml -/dev/integration_tests/**/xcuserdata -/dev/integration_tests/**/Pods -/packages/flutter/coverage/ -version -analysis_benchmark.json - -# packages file containing multi-root paths -.packages.generated - -# Flutter/Dart/Pub related -**/doc/api/ -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -**/generated_plugin_registrant.dart -.packages -.pub-preload-cache/ -.pub-cache/ -.pub/ -build/ -flutter_*.png -linked_*.ds -unlinked.ds -unlinked_spec.ds - -# Android related -**/android/**/gradle-wrapper.jar -.gradle/ -**/android/captures/ -**/android/gradlew -**/android/gradlew.bat -**/android/local.properties -**/android/**/GeneratedPluginRegistrant.java -**/android/key.properties -*.jks - -# iOS/XCode related -**/ios/**/*.mode1v3 -**/ios/**/*.mode2v3 -**/ios/**/*.moved-aside -**/ios/**/*.pbxuser -**/ios/**/*.perspectivev3 -**/ios/**/*sync/ -**/ios/**/.sconsign.dblite -**/ios/**/.tags* -**/ios/**/.vagrant/ -**/ios/**/DerivedData/ -**/ios/**/Icon? -**/ios/**/Pods/ -**/ios/**/.symlinks/ -**/ios/**/profile -**/ios/**/xcuserdata -**/ios/.generated/ -**/ios/Flutter/.last_build_id -**/ios/Flutter/App.framework -**/ios/Flutter/Flutter.framework -**/ios/Flutter/Flutter.podspec -**/ios/Flutter/Generated.xcconfig -**/ios/Flutter/ephemeral -**/ios/Flutter/app.flx -**/ios/Flutter/app.zip -**/ios/Flutter/flutter_assets/ -**/ios/Flutter/flutter_export_environment.sh -**/ios/ServiceDefinitions.json -**/ios/Runner/GeneratedPluginRegistrant.* - -# macOS -**/Flutter/ephemeral/ -**/Pods/ -**/macos/Flutter/GeneratedPluginRegistrant.swift -**/macos/Flutter/ephemeral -**/xcuserdata/ - -# Windows -**/windows/flutter/generated_plugin_registrant.cc -**/windows/flutter/generated_plugin_registrant.h -**/windows/flutter/generated_plugins.cmake - -# Linux -**/linux/flutter/generated_plugin_registrant.cc -**/linux/flutter/generated_plugin_registrant.h -**/linux/flutter/generated_plugins.cmake - -# Coverage -coverage/ - -# Symbols -app.*.symbols - -# Exceptions to above rules. -!**/ios/**/default.mode1v3 -!**/ios/**/default.mode2v3 -!**/ios/**/default.pbxuser -!**/ios/**/default.perspectivev3 -!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages -!/dev/ci/**/Gemfile.lock -!.vscode/settings.json - -## User settings -xcuserdata/ - -## Xcode 8 and earlier -*.xcscmblueprint -*.xccheckout - -flutter_jank_metrics*.json diff --git a/sherpa-onnx/flutter/CHANGELOG.md b/sherpa-onnx/flutter/CHANGELOG.md deleted file mode 100644 index 96a6040b4..000000000 --- a/sherpa-onnx/flutter/CHANGELOG.md +++ /dev/null @@ -1,31 +0,0 @@ -## 1.10.2 - -* Fix passing C# string to C++ - -## 1.10.1 - -* Enable to stop TTS generation - -## 1.10.0 - -* Add inverse text normalization - -## 1.9.30 - -* Add TTS - -## 1.9.29 - -* Publish with CI - -## 0.0.3 - -* Fix path separator on Windows. - -## 0.0.2 - -* Support specifying lib path. - -## 0.0.1 - -* Initial release. diff --git a/sherpa-onnx/flutter/LICENSE b/sherpa-onnx/flutter/LICENSE deleted file mode 100644 index d64569567..000000000 --- a/sherpa-onnx/flutter/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/sherpa-onnx/flutter/analysis_options.yaml b/sherpa-onnx/flutter/analysis_options.yaml deleted file mode 100644 index a5744c1cf..000000000 --- a/sherpa-onnx/flutter/analysis_options.yaml +++ /dev/null @@ -1,4 +0,0 @@ -include: package:flutter_lints/flutter.yaml - -# Additional information about this file can be found at -# https://dart.dev/guides/language/analysis-options diff --git a/sherpa-onnx/flutter/example/assets/README.md b/sherpa-onnx/flutter/example/assets/README.md deleted file mode 100644 index e3135e914..000000000 --- a/sherpa-onnx/flutter/example/assets/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Introduction - -## Speaker identification - -```bash -# switch to this directory and run - -wget https://github.com/k2-fsa/sherpa-onnx/releases/download/speaker-recongition-models/3dspeaker_speech_eres2net_base_sv_zh-cn_3dspeaker_16k.onnx -wget https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/silero_vad.onnx -git clone https://github.com/csukuangfj/sr-data - -rm -rf sr-data/.git -``` diff --git a/sherpa-onnx/flutter/example/assets/streaming-asr.ico b/sherpa-onnx/flutter/example/assets/streaming-asr.ico deleted file mode 100644 index 9ce1bc230..000000000 Binary files a/sherpa-onnx/flutter/example/assets/streaming-asr.ico and /dev/null differ diff --git a/sherpa-onnx/flutter/example/assets/vad.ico b/sherpa-onnx/flutter/example/assets/vad.ico deleted file mode 100644 index c46ba9b45..000000000 Binary files a/sherpa-onnx/flutter/example/assets/vad.ico and /dev/null differ diff --git a/sherpa-onnx/flutter/example/example.md b/sherpa-onnx/flutter/example/example.md deleted file mode 100644 index 3f8957b2e..000000000 --- a/sherpa-onnx/flutter/example/example.md +++ /dev/null @@ -1,18 +0,0 @@ -# sherpa-onnx app example - -## Streaming speech recognition - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/streaming-asr - -## Non-streaming speech recognition - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/non-streaming-asr - -## Text to speech (TTS) - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/tts - -## Voice activity detection (VAD) - -Please see https://github.com/k2-fsa/sherpa-onnx/tree/master/dart-api-examples/vad - diff --git a/sherpa-onnx/flutter/example/lib/info.dart b/sherpa-onnx/flutter/example/lib/info.dart deleted file mode 100644 index e1b3b19e0..000000000 --- a/sherpa-onnx/flutter/example/lib/info.dart +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'package:flutter/material.dart'; -import 'package:url_launcher/url_launcher.dart'; - -class InfoScreen extends StatelessWidget { - @override - Widget build(BuildContext context) { - const double height = 20; - return Container( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text('Everything is open-sourced.'), - SizedBox(height: height), - InkWell( - child: Text('Code: https://github.com/k2-fsa/sherpa-onnx'), - onTap: () => launch('https://k2-fsa.github.io/sherpa/onnx/'), - ), - SizedBox(height: height), - InkWell( - child: Text('Doc: https://k2-fsa.github.io/sherpa/onnx/'), - onTap: () => launch('https://k2-fsa.github.io/sherpa/onnx/'), - ), - SizedBox(height: height), - Text('QQ 群: 744602236'), - SizedBox(height: height), - InkWell( - child: Text( - '微信群: https://k2-fsa.github.io/sherpa/social-groups.html'), - onTap: () => - launch('https://k2-fsa.github.io/sherpa/social-groups.html'), - ), - ], - ), - ), - ); - } -} diff --git a/sherpa-onnx/flutter/example/lib/main.dart b/sherpa-onnx/flutter/example/lib/main.dart deleted file mode 100644 index 253060576..000000000 --- a/sherpa-onnx/flutter/example/lib/main.dart +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx; -import 'package:flutter/material.dart'; - -import './vad.dart'; -import './streaming_asr.dart'; -import './info.dart'; - -void main() { - runApp(const MyApp()); -} - -class MyApp extends StatelessWidget { - const MyApp({Key? key}) : super(key: key); - @override - Widget build(BuildContext context) { - return MaterialApp( - title: 'Next-gen Kaldi', - theme: ThemeData( - primarySwatch: Colors.blue, - ), - home: const MyHomePage(title: 'Next-gen Kaldi Demo'), - ); - } -} - -class MyHomePage extends StatefulWidget { - const MyHomePage({Key? key, required this.title}) : super(key: key); - final String title; - @override - State createState() => _MyHomePageState(); -} - -class _MyHomePageState extends State { - int _currentIndex = 0; - final List _tabs = [ - StreamingAsrScreen(), - VadScreen(), - InfoScreen(), - ]; - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(widget.title), - ), - body: _tabs[_currentIndex], - bottomNavigationBar: BottomNavigationBar( - currentIndex: _currentIndex, - onTap: (int index) { - setState(() { - _currentIndex = index; - }); - }, - // https://www.xiconeditor.com/ - items: [ - BottomNavigationBarItem( - icon: new Image.asset("assets/streaming-asr.ico"), - label: '', - ), - BottomNavigationBarItem( - icon: new Image.asset("assets/vad.ico"), - label: '', - ), - BottomNavigationBarItem( - icon: Icon(Icons.info), - label: 'Info', - ), - ], - ), - ); - } -} diff --git a/sherpa-onnx/flutter/example/lib/non_streaming_paraformer_asr_test.dart b/sherpa-onnx/flutter/example/lib/non_streaming_paraformer_asr_test.dart deleted file mode 100644 index 5f7245e7a..000000000 --- a/sherpa-onnx/flutter/example/lib/non_streaming_paraformer_asr_test.dart +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'package:path/path.dart'; -import 'package:path_provider/path_provider.dart'; -import 'package:flutter/services.dart' show rootBundle; -import 'dart:typed_data'; -import "dart:io"; - -import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx; -import './utils.dart'; - -Future testNonStreamingParaformerAsr() async { - var model = 'assets/sherpa-onnx-paraformer-zh-2023-03-28/model.int8.onnx'; - var tokens = 'assets/sherpa-onnx-paraformer-zh-2023-03-28/tokens.txt'; - var testWave = 'assets/sherpa-onnx-paraformer-zh-2023-03-28/test_wavs/0.wav'; - - model = await copyAssetFile(src: model, dst: 'model.int8.onnx'); - tokens = await copyAssetFile(src: tokens, dst: 'tokens.txt'); - testWave = await copyAssetFile(src: testWave, dst: '0.wav'); - - final paraformer = sherpa_onnx.OfflineParaformerModelConfig( - model: model, - ); - - final modelConfig = sherpa_onnx.OfflineModelConfig( - paraformer: paraformer, - tokens: tokens, - modelType: 'paraformer', - ); - - final config = sherpa_onnx.OfflineRecognizerConfig(model: modelConfig); - print(config); - final recognizer = sherpa_onnx.OfflineRecognizer(config); - - final waveData = sherpa_onnx.readWave(testWave); - final stream = recognizer.createStream(); - - stream.acceptWaveform( - samples: waveData.samples, sampleRate: waveData.sampleRate); - recognizer.decode(stream); - - final result = recognizer.getResult(stream); - print('result is: ${result}'); - - print('recognizer: ${recognizer.ptr}'); - stream.free(); - recognizer.free(); -} diff --git a/sherpa-onnx/flutter/example/lib/speaker_identification_test.dart b/sherpa-onnx/flutter/example/lib/speaker_identification_test.dart deleted file mode 100644 index 535c0dd57..000000000 --- a/sherpa-onnx/flutter/example/lib/speaker_identification_test.dart +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx; -import 'dart:typed_data'; -import 'package:path/path.dart'; -import './utils.dart'; - -Float32List computeEmbedding( - {required sherpa_onnx.SpeakerEmbeddingExtractor extractor, - required String filename}) { - final stream = extractor.createStream(); - final waveData = sherpa_onnx.readWave(filename); - - stream.acceptWaveform( - samples: waveData.samples, sampleRate: waveData.sampleRate); - - stream.inputFinished(); - - final embedding = extractor.compute(stream); - - stream.free(); - - return embedding; -} - -Future testSpeakerID() async { - final src = - 'assets/3dspeaker_speech_eres2net_base_sv_zh-cn_3dspeaker_16k.onnx'; - final modelPath = await copyAssetFile(src: src, dst: 'model.onnx'); - - final config = sherpa_onnx.SpeakerEmbeddingExtractorConfig(model: modelPath); - final extractor = sherpa_onnx.SpeakerEmbeddingExtractor(config: config); - - const _spk1Files = [ - 'assets/sr-data/enroll/fangjun-sr-1.wav', - 'assets/sr-data/enroll/fangjun-sr-2.wav', - 'assets/sr-data/enroll/fangjun-sr-3.wav', - ]; - final spk1Files = []; - for (final f in _spk1Files) { - spk1Files.add(await copyAssetFile(src: f, dst: basename(f))); - } - - final spk1Vec = []; - for (final f in spk1Files) { - spk1Vec.add(computeEmbedding(extractor: extractor, filename: f)); - } - - const _spk2Files = [ - 'assets/sr-data/enroll/leijun-sr-1.wav', - 'assets/sr-data/enroll/leijun-sr-2.wav', - ]; - final spk2Files = []; - for (final f in _spk2Files) { - spk2Files.add(await copyAssetFile(src: f, dst: basename(f))); - } - - final spk2Vec = []; - for (final f in spk2Files) { - spk2Vec.add(computeEmbedding(extractor: extractor, filename: f)); - } - - final manager = sherpa_onnx.SpeakerEmbeddingManager(extractor.dim); - assert(manager.numSpeakers == 0, '${manager.numSpeakers}'); - - bool ok = manager.addMulti(name: 'fangjun', embeddingList: spk1Vec); - assert(ok, "Failed to add fangjun"); - assert(manager.numSpeakers == 1, '${manager.numSpeakers}'); - - ok = manager.addMulti(name: 'leijun', embeddingList: spk2Vec); - assert(ok, "Failed to add leijun"); - assert(manager.numSpeakers == 2, '${manager.numSpeakers}'); - - bool found = manager.contains('fangjun'); - assert(found, 'Failed to find fangjun'); - - found = manager.contains('leijun'); - assert(found, 'Failed to find leijun'); - - print('---All speakers---'); - - print(manager.allSpeakerNames); - - print('------------'); - - const _testFiles = [ - 'assets/sr-data/test/fangjun-test-sr-1.wav', - 'assets/sr-data/test/leijun-test-sr-1.wav', - 'assets/sr-data/test/liudehua-test-sr-1.wav', - ]; - - final testFiles = []; - for (final f in _testFiles) { - testFiles.add(await copyAssetFile(src: f, dst: basename(f))); - } - - const threshold = 0.6; - - for (final f in testFiles) { - final embedding = computeEmbedding(extractor: extractor, filename: f); - - var name = manager.search(embedding: embedding, threshold: threshold); - if (name == '') { - name = ''; - } - print('${f}: ${name}'); - } - - ok = manager.verify( - name: 'fangjun', - embedding: computeEmbedding(extractor: extractor, filename: testFiles[0]), - threshold: threshold); - assert(ok, 'Failed to verify fangjun using ${testFiles[0]}'); - - ok = manager.remove('fangjun'); - assert(ok, 'Failed to remove fangjun'); - assert(manager.numSpeakers == 1, '${manager.numSpeakers}'); - - found = manager.contains('fangjun'); - assert(!found, 'Still found fangjun!'); - - ok = manager.verify( - name: 'fangjun', - embedding: computeEmbedding(extractor: extractor, filename: testFiles[0]), - threshold: threshold); - assert(!ok, '${testFiles[0]}'); - - manager.free(); - extractor.free(); -} diff --git a/sherpa-onnx/flutter/example/lib/streaming_asr.dart b/sherpa-onnx/flutter/example/lib/streaming_asr.dart deleted file mode 100644 index 3d74b3645..000000000 --- a/sherpa-onnx/flutter/example/lib/streaming_asr.dart +++ /dev/null @@ -1,259 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'dart:async'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:path/path.dart' as p; -import 'package:path_provider/path_provider.dart'; -import 'package:record/record.dart'; - -import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx; - -import './utils.dart'; - -import './streaming_transducer_asr_test.dart'; // TODO(fangjun): remove it - -Future createOnlineRecognizer() async { - var encoder = - 'assets/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/encoder-epoch-99-avg-1.int8.onnx'; - var decoder = - 'assets/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/decoder-epoch-99-avg-1.onnx'; - var joiner = - 'assets/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/joiner-epoch-99-avg-1.int8.onnx'; - var tokens = - 'assets/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/tokens.txt'; - - encoder = await copyAssetFile(src: encoder, dst: 'encoder.onnx'); - decoder = await copyAssetFile(src: decoder, dst: 'decoder.onnx'); - joiner = await copyAssetFile(src: joiner, dst: 'joiner.onnx'); - tokens = await copyAssetFile(src: tokens, dst: 'tokens.txt'); - - final transducer = sherpa_onnx.OnlineTransducerModelConfig( - encoder: encoder, - decoder: decoder, - joiner: joiner, - ); - - final modelConfig = sherpa_onnx.OnlineModelConfig( - transducer: transducer, - tokens: tokens, - modelType: 'zipformer', - ); - - final config = sherpa_onnx.OnlineRecognizerConfig(model: modelConfig); - return sherpa_onnx.OnlineRecognizer(config); -} - -class StreamingAsrScreen extends StatefulWidget { - const StreamingAsrScreen({super.key}); - - @override - State createState() => _StreamingAsrScreenState(); -} - -class _StreamingAsrScreenState extends State { - late final TextEditingController _controller; - late final AudioRecorder _audioRecorder; - - String _title = 'Real-time speech recognition'; - String _last = ''; - int _index = 0; - bool _isInitialized = false; - - sherpa_onnx.OnlineRecognizer? _recognizer; - sherpa_onnx.OnlineStream? _stream; - int _sampleRate = 16000; - - StreamSubscription? _recordSub; - RecordState _recordState = RecordState.stop; - - @override - void initState() { - _audioRecorder = AudioRecorder(); - _controller = TextEditingController(); - - _recordSub = _audioRecorder.onStateChanged().listen((recordState) { - _updateRecordState(recordState); - }); - - super.initState(); - } - - Future _start() async { - if (!_isInitialized) { - sherpa_onnx.initBindings(); - _recognizer = await createOnlineRecognizer(); - _stream = _recognizer?.createStream(); - - _isInitialized = true; - } - - try { - if (await _audioRecorder.hasPermission()) { - const encoder = AudioEncoder.pcm16bits; - - if (!await _isEncoderSupported(encoder)) { - return; - } - - final devs = await _audioRecorder.listInputDevices(); - debugPrint(devs.toString()); - - const config = RecordConfig( - encoder: encoder, - sampleRate: 16000, - numChannels: 1, - ); - - final stream = await _audioRecorder.startStream(config); - - stream.listen( - (data) { - final samplesFloat32 = - convertBytesToFloat32(Uint8List.fromList(data)); - - _stream!.acceptWaveform( - samples: samplesFloat32, sampleRate: _sampleRate); - while (_recognizer!.isReady(_stream!)) { - _recognizer!.decode(_stream!); - } - final text = _recognizer!.getResult(_stream!).text; - String textToDisplay = _last; - if (text != '') { - if (_last == '') { - textToDisplay = '$_index: $text'; - } else { - textToDisplay = '$_index: $text\n$_last'; - } - } - - if (_recognizer!.isEndpoint(_stream!)) { - _recognizer!.reset(_stream!); - if (text != '') { - _last = textToDisplay; - _index += 1; - } - } - print('text: $textToDisplay'); - - _controller.value = TextEditingValue( - text: textToDisplay, - selection: TextSelection.collapsed(offset: textToDisplay.length), - ); - }, - onDone: () { - print('stream stopped.'); - }, - ); - } - } catch (e) { - print(e); - } - } - - Future _stop() async { - _stream!.free(); - _stream = _recognizer!.createStream(); - - await _audioRecorder.stop(); - } - - Future _pause() => _audioRecorder.pause(); - - Future _resume() => _audioRecorder.resume(); - - void _updateRecordState(RecordState recordState) { - setState(() => _recordState = recordState); - } - - Future _isEncoderSupported(AudioEncoder encoder) async { - final isSupported = await _audioRecorder.isEncoderSupported( - encoder, - ); - - if (!isSupported) { - debugPrint('${encoder.name} is not supported on this platform.'); - debugPrint('Supported encoders are:'); - - for (final e in AudioEncoder.values) { - if (await _audioRecorder.isEncoderSupported(e)) { - debugPrint('- ${encoder.name}'); - } - } - } - - return isSupported; - } - - @override - Widget build(BuildContext context) { - return MaterialApp( - home: Scaffold( - body: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text(_title), - const SizedBox(height: 50), - TextField( - maxLines: 5, - controller: _controller, - readOnly: true, - ), - const SizedBox(height: 50), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - _buildRecordStopControl(), - const SizedBox(width: 20), - _buildText(), - ], - ), - ], - ), - ), - ); - } - - @override - void dispose() { - _recordSub?.cancel(); - _audioRecorder.dispose(); - _stream?.free(); - _recognizer?.free(); - super.dispose(); - } - - Widget _buildRecordStopControl() { - late Icon icon; - late Color color; - - if (_recordState != RecordState.stop) { - icon = const Icon(Icons.stop, color: Colors.red, size: 30); - color = Colors.red.withOpacity(0.1); - } else { - final theme = Theme.of(context); - icon = Icon(Icons.mic, color: theme.primaryColor, size: 30); - color = theme.primaryColor.withOpacity(0.1); - } - - return ClipOval( - child: Material( - color: color, - child: InkWell( - child: SizedBox(width: 56, height: 56, child: icon), - onTap: () { - (_recordState != RecordState.stop) ? _stop() : _start(); - }, - ), - ), - ); - } - - Widget _buildText() { - if (_recordState == RecordState.stop) { - return const Text("Start"); - } else { - return const Text("Stop"); - } - } -} diff --git a/sherpa-onnx/flutter/example/lib/streaming_transducer_asr_test.dart b/sherpa-onnx/flutter/example/lib/streaming_transducer_asr_test.dart deleted file mode 100644 index 4d9e3eb85..000000000 --- a/sherpa-onnx/flutter/example/lib/streaming_transducer_asr_test.dart +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'package:path/path.dart'; -import 'package:path_provider/path_provider.dart'; -import 'package:flutter/services.dart' show rootBundle; -import 'dart:typed_data'; -import "dart:io"; - -import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx; -import './utils.dart'; - -Future testStreamingTransducerAsr() async { - var encoder = - 'assets/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/encoder-epoch-99-avg-1.int8.onnx'; - var decoder = - 'assets/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/decoder-epoch-99-avg-1.onnx'; - var joiner = - 'assets/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/joiner-epoch-99-avg-1.int8.onnx'; - var tokens = - 'assets/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/tokens.txt'; - - var testWave = - 'assets/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/test_wavs/0.wav'; - - encoder = await copyAssetFile(src: encoder, dst: 'encoder.onnx'); - decoder = await copyAssetFile(src: decoder, dst: 'decoder.onnx'); - joiner = await copyAssetFile(src: joiner, dst: 'joiner.onnx'); - tokens = await copyAssetFile(src: tokens, dst: 'tokens.txt'); - testWave = await copyAssetFile(src: testWave, dst: 'test.wav'); - - final transducer = sherpa_onnx.OnlineTransducerModelConfig( - encoder: encoder, - decoder: decoder, - joiner: joiner, - ); - - final modelConfig = sherpa_onnx.OnlineModelConfig( - transducer: transducer, - tokens: tokens, - modelType: 'zipformer', - ); - - final config = sherpa_onnx.OnlineRecognizerConfig(model: modelConfig); - print(config); - final recognizer = sherpa_onnx.OnlineRecognizer(config); - - final waveData = sherpa_onnx.readWave(testWave); - final stream = recognizer.createStream(); - - stream.acceptWaveform( - samples: waveData.samples, sampleRate: waveData.sampleRate); - while (recognizer.isReady(stream)) { - recognizer.decode(stream); - } - - final result = recognizer.getResult(stream); - print('result is: ${result}'); - - print('recognizer: ${recognizer.ptr}'); - stream.free(); - recognizer.free(); -} diff --git a/sherpa-onnx/flutter/example/lib/utils.dart b/sherpa-onnx/flutter/example/lib/utils.dart deleted file mode 100644 index 493233807..000000000 --- a/sherpa-onnx/flutter/example/lib/utils.dart +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'package:path/path.dart'; -import 'package:path_provider/path_provider.dart'; -import 'package:flutter/services.dart' show rootBundle; -import 'dart:typed_data'; -import "dart:io"; - -// Copy the asset file from src to dst -Future copyAssetFile({required String src, required String dst}) async { - final Directory directory = await getApplicationDocumentsDirectory(); - final target = join(directory.path, dst); - - final data = await rootBundle.load(src); - final List bytes = - data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); - await File(target).writeAsBytes(bytes); - - return target; -} - -Float32List convertBytesToFloat32(Uint8List bytes, [endian = Endian.little]) { - final values = Float32List(bytes.length ~/ 2); - - final data = ByteData.view(bytes.buffer); - - for (var i = 0; i < bytes.length; i += 2) { - int short = data.getInt16(i, endian); - values[i ~/ 2] = short / 32678.0; - } - - return values; -} diff --git a/sherpa-onnx/flutter/example/lib/vad.dart b/sherpa-onnx/flutter/example/lib/vad.dart deleted file mode 100644 index 7df0c9e51..000000000 --- a/sherpa-onnx/flutter/example/lib/vad.dart +++ /dev/null @@ -1,255 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'dart:async'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:path/path.dart' as p; -import 'package:path_provider/path_provider.dart'; -import 'package:record/record.dart'; - -import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx; - -import './utils.dart'; - -class VadScreen extends StatefulWidget { - const VadScreen({super.key}); - - @override - State createState() => _VadScreenState(); -} - -class _VadScreenState extends State { - late final AudioRecorder _audioRecorder; - - bool _printed = false; - var _color = Colors.black; - bool _isInitialized = false; - - sherpa_onnx.VoiceActivityDetector? _vad; - sherpa_onnx.CircularBuffer? _buffer; - - StreamSubscription? _recordSub; - RecordState _recordState = RecordState.stop; - - @override - void initState() { - _audioRecorder = AudioRecorder(); - - _recordSub = _audioRecorder.onStateChanged().listen((recordState) { - _updateRecordState(recordState); - }); - - super.initState(); - } - - Future _start() async { - if (!_isInitialized) { - sherpa_onnx.initBindings(); - final src = 'assets/silero_vad.onnx'; - final modelPath = await copyAssetFile(src: src, dst: 'silero_vad.onnx'); - - final sileroVadConfig = sherpa_onnx.SileroVadModelConfig( - model: modelPath, - minSpeechDuration: 0.25, - minSilenceDuration: 0.5, - ); - - final config = sherpa_onnx.VadModelConfig( - sileroVad: sileroVadConfig, - numThreads: 1, - debug: true, - ); - - _vad = sherpa_onnx.VoiceActivityDetector( - config: config, bufferSizeInSeconds: 30); - - _buffer = sherpa_onnx.CircularBuffer(capacity: 16000 * 30); - print(_buffer!.ptr); - - _isInitialized = true; - } - - try { - if (await _audioRecorder.hasPermission()) { - const encoder = AudioEncoder.pcm16bits; - - if (!await _isEncoderSupported(encoder)) { - return; - } - - final devs = await _audioRecorder.listInputDevices(); - debugPrint(devs.toString()); - - const config = RecordConfig( - encoder: encoder, - sampleRate: 16000, - numChannels: 1, - ); - - final stream = await _audioRecorder.startStream(config); - - final dir = await getApplicationDocumentsDirectory(); - - stream.listen( - (data) { - final samplesFloat32 = - convertBytesToFloat32(Uint8List.fromList(data)); - - _buffer!.push(samplesFloat32); - - final windowSize = _vad!.config.sileroVad.windowSize; - while (_buffer!.size > windowSize) { - final samples = - _buffer!.get(startIndex: _buffer!.head, n: windowSize); - _buffer!.pop(windowSize); - _vad!.acceptWaveform(samples); - if (_vad!.isDetected() && !_printed) { - print('detected'); - _printed = true; - - setState(() => _color = Colors.red); - } - - if (!_vad!.isDetected()) { - _printed = false; - setState(() => _color = Colors.black); - } - - while (!_vad!.isEmpty()) { - final segment = _vad!.front(); - final duration = segment.samples.length / 16000; - final d = DateTime.now(); - final filename = p.join(dir.path, - '${d.year}-${d.month}-${d.day}-${d.hour}-${d.minute}-${d.second}-duration-${duration.toStringAsPrecision(3)}s.wav'); - - bool ok = sherpa_onnx.writeWave( - filename: filename, - samples: segment.samples, - sampleRate: 16000); - if (!ok) { - print('Failed to write $filename'); - } else { - print('Saved to write $filename'); - } - - _vad!.pop(); - } - } - }, - onDone: () { - print('stream stopped.'); - }, - ); - } - } catch (e) { - print(e); - } - } - - Future _stop() async { - _buffer!.reset(); - _vad!.clear(); - - await _audioRecorder.stop(); - } - - Future _pause() => _audioRecorder.pause(); - - Future _resume() => _audioRecorder.resume(); - - void _updateRecordState(RecordState recordState) { - setState(() => _recordState = recordState); - } - - Future _isEncoderSupported(AudioEncoder encoder) async { - final isSupported = await _audioRecorder.isEncoderSupported( - encoder, - ); - - if (!isSupported) { - debugPrint('${encoder.name} is not supported on this platform.'); - debugPrint('Supported encoders are:'); - - for (final e in AudioEncoder.values) { - if (await _audioRecorder.isEncoderSupported(e)) { - debugPrint('- ${encoder.name}'); - } - } - } - - return isSupported; - } - - @override - Widget build(BuildContext context) { - return MaterialApp( - home: Scaffold( - body: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Container( - width: 100.0, - height: 100.0, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: _color, - ), - ), - const SizedBox(height: 50), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - _buildRecordStopControl(), - const SizedBox(width: 20), - _buildText(), - ], - ), - ], - ), - ), - ); - } - - @override - void dispose() { - _recordSub?.cancel(); - _audioRecorder.dispose(); - _vad?.free(); - _buffer?.free(); - super.dispose(); - } - - Widget _buildRecordStopControl() { - late Icon icon; - late Color color; - - if (_recordState != RecordState.stop) { - icon = const Icon(Icons.stop, color: Colors.red, size: 30); - color = Colors.red.withOpacity(0.1); - } else { - final theme = Theme.of(context); - icon = Icon(Icons.mic, color: theme.primaryColor, size: 30); - color = theme.primaryColor.withOpacity(0.1); - } - - return ClipOval( - child: Material( - color: color, - child: InkWell( - child: SizedBox(width: 56, height: 56, child: icon), - onTap: () { - (_recordState != RecordState.stop) ? _stop() : _start(); - }, - ), - ), - ); - } - - Widget _buildText() { - if (_recordState == RecordState.stop) { - return const Text("Start"); - } else { - return const Text("Stop"); - } - } -} diff --git a/sherpa-onnx/flutter/example/lib/vad_test.dart b/sherpa-onnx/flutter/example/lib/vad_test.dart deleted file mode 100644 index d6edbb301..000000000 --- a/sherpa-onnx/flutter/example/lib/vad_test.dart +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'dart:typed_data'; -import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx; -import './utils.dart'; - -Future testVad() async { - final src = 'assets/silero_vad.onnx'; - final modelPath = await copyAssetFile(src: src, dst: 'silero_vad.onnx'); - - final sileroVadConfig = sherpa_onnx.SileroVadModelConfig(model: modelPath); - final config = sherpa_onnx.VadModelConfig( - sileroVad: sileroVadConfig, - numThreads: 1, - debug: true, - ); - - final vad = sherpa_onnx.VoiceActivityDetector( - config: config, bufferSizeInSeconds: 10); - print('before vad.free(): ${vad.ptr}'); - vad.free(); - print('after vad.free(): ${vad.ptr}'); - - final buffer = sherpa_onnx.CircularBuffer(capacity: 16000 * 2); - - final d = Float32List.fromList([0, 10, 20, 30]); - buffer.push(d); - assert(d.length == buffer.size, '${d.length} vs ${buffer.size}'); - - final f = Float32List.fromList([-5, 100.25, 599]); - buffer.push(f); - - assert(buffer.size == d.length + f.length); - final g = buffer.get(startIndex: 0, n: 5); - - assert(g.length == 5); - assert(g[0] == 0); - assert(g[1] == 10); - assert(g[2] == 20); - assert(g[3] == 30); - assert(g[4] == -5); - - assert(buffer.size == d.length + f.length); - - buffer.pop(3); - assert(buffer.size == d.length + f.length - 3); - - final h = buffer.get(startIndex: buffer.head, n: 4); - assert(h.length == 4); - assert(h[0] == 30); - assert(h[1] == -5); - assert(h[2] == 100.25); - assert(h[3] == 599); - - buffer.reset(); - - assert(buffer.size == 0); - assert(buffer.head == 0); - - print('before free: ${buffer.ptr}'); - buffer.free(); - print('after free: ${buffer.ptr}'); -} diff --git a/sherpa-onnx/flutter/example/linux/.gitignore b/sherpa-onnx/flutter/example/linux/.gitignore deleted file mode 100644 index d3896c984..000000000 --- a/sherpa-onnx/flutter/example/linux/.gitignore +++ /dev/null @@ -1 +0,0 @@ -flutter/ephemeral diff --git a/sherpa-onnx/flutter/example/linux/CMakeLists.txt b/sherpa-onnx/flutter/example/linux/CMakeLists.txt deleted file mode 100644 index b719ed676..000000000 --- a/sherpa-onnx/flutter/example/linux/CMakeLists.txt +++ /dev/null @@ -1,145 +0,0 @@ -# Project-level configuration. -cmake_minimum_required(VERSION 3.10) -project(runner LANGUAGES CXX) - -# The name of the executable created for the application. Change this to change -# the on-disk name of your application. -set(BINARY_NAME "sherpa_onnx") -# The unique GTK application identifier for this application. See: -# https://wiki.gnome.org/HowDoI/ChooseApplicationID -set(APPLICATION_ID "com.k2fsa.sherpa.onnx") - -# Explicitly opt in to modern CMake behaviors to avoid warnings with recent -# versions of CMake. -cmake_policy(SET CMP0063 NEW) - -# Load bundled libraries from the lib/ directory relative to the binary. -set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") - -# Root filesystem for cross-building. -if(FLUTTER_TARGET_PLATFORM_SYSROOT) - set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) - set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) - set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) - set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) - set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) - set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -endif() - -# Define build configuration options. -if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE "Debug" CACHE - STRING "Flutter build mode" FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS - "Debug" "Profile" "Release") -endif() - -# Compilation settings that should be applied to most targets. -# -# Be cautious about adding new options here, as plugins use this function by -# default. In most cases, you should add new options to specific targets instead -# of modifying this function. -function(APPLY_STANDARD_SETTINGS TARGET) - target_compile_features(${TARGET} PUBLIC cxx_std_14) - target_compile_options(${TARGET} PRIVATE -Wall -Werror) - target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") - target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") -endfunction() - -# Flutter library and tool build rules. -set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") -add_subdirectory(${FLUTTER_MANAGED_DIR}) - -# System-level dependencies. -find_package(PkgConfig REQUIRED) -pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) - -add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") - -# Define the application target. To change its name, change BINARY_NAME above, -# not the value here, or `flutter run` will no longer work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} - "main.cc" - "my_application.cc" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add dependency libraries. Add any application-specific dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter) -target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) - -# Run the Flutter tool portions of the build. This must not be removed. -add_dependencies(${BINARY_NAME} flutter_assemble) - -# Only the install-generated bundle's copy of the executable will launch -# correctly, since the resources must in the right relative locations. To avoid -# people trying to run the unbundled copy, put it in a subdirectory instead of -# the default top-level location. -set_target_properties(${BINARY_NAME} - PROPERTIES - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" -) - - -# Generated plugin build rules, which manage building the plugins and adding -# them to the application. -include(flutter/generated_plugins.cmake) - - -# === Installation === -# By default, "installing" just makes a relocatable bundle in the build -# directory. -set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") -if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) -endif() - -# Start with a clean build bundle directory every time. -install(CODE " - file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") - " COMPONENT Runtime) - -set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") -set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") - -install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" - COMPONENT Runtime) - -install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" - COMPONENT Runtime) - -install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) - -foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) - install(FILES "${bundled_library}" - DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) -endforeach(bundled_library) - -# Copy the native assets provided by the build.dart from all packages. -set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") -install(DIRECTORY "${NATIVE_ASSETS_DIR}" - DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) - -# Fully re-copy the assets directory on each build to avoid having stale files -# from a previous install. -set(FLUTTER_ASSET_DIR_NAME "flutter_assets") -install(CODE " - file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") - " COMPONENT Runtime) -install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" - DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) - -# Install the AOT library on non-Debug builds only. -if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") - install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) -endif() diff --git a/sherpa-onnx/flutter/example/linux/flutter/CMakeLists.txt b/sherpa-onnx/flutter/example/linux/flutter/CMakeLists.txt deleted file mode 100644 index d5bd01648..000000000 --- a/sherpa-onnx/flutter/example/linux/flutter/CMakeLists.txt +++ /dev/null @@ -1,88 +0,0 @@ -# This file controls Flutter-level build steps. It should not be edited. -cmake_minimum_required(VERSION 3.10) - -set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") - -# Configuration provided via flutter tool. -include(${EPHEMERAL_DIR}/generated_config.cmake) - -# TODO: Move the rest of this into files in ephemeral. See -# https://github.com/flutter/flutter/issues/57146. - -# Serves the same purpose as list(TRANSFORM ... PREPEND ...), -# which isn't available in 3.10. -function(list_prepend LIST_NAME PREFIX) - set(NEW_LIST "") - foreach(element ${${LIST_NAME}}) - list(APPEND NEW_LIST "${PREFIX}${element}") - endforeach(element) - set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) -endfunction() - -# === Flutter Library === -# System-level dependencies. -find_package(PkgConfig REQUIRED) -pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) -pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) -pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) - -set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") - -# Published to parent scope for install step. -set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) -set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) -set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) -set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) - -list(APPEND FLUTTER_LIBRARY_HEADERS - "fl_basic_message_channel.h" - "fl_binary_codec.h" - "fl_binary_messenger.h" - "fl_dart_project.h" - "fl_engine.h" - "fl_json_message_codec.h" - "fl_json_method_codec.h" - "fl_message_codec.h" - "fl_method_call.h" - "fl_method_channel.h" - "fl_method_codec.h" - "fl_method_response.h" - "fl_plugin_registrar.h" - "fl_plugin_registry.h" - "fl_standard_message_codec.h" - "fl_standard_method_codec.h" - "fl_string_codec.h" - "fl_value.h" - "fl_view.h" - "flutter_linux.h" -) -list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") -add_library(flutter INTERFACE) -target_include_directories(flutter INTERFACE - "${EPHEMERAL_DIR}" -) -target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") -target_link_libraries(flutter INTERFACE - PkgConfig::GTK - PkgConfig::GLIB - PkgConfig::GIO -) -add_dependencies(flutter flutter_assemble) - -# === Flutter tool backend === -# _phony_ is a non-existent file to force this command to run every time, -# since currently there's no way to get a full input/output list from the -# flutter tool. -add_custom_command( - OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} - ${CMAKE_CURRENT_BINARY_DIR}/_phony_ - COMMAND ${CMAKE_COMMAND} -E env - ${FLUTTER_TOOL_ENVIRONMENT} - "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" - ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} - VERBATIM -) -add_custom_target(flutter_assemble DEPENDS - "${FLUTTER_LIBRARY}" - ${FLUTTER_LIBRARY_HEADERS} -) diff --git a/sherpa-onnx/flutter/example/linux/main.cc b/sherpa-onnx/flutter/example/linux/main.cc deleted file mode 100644 index e7c5c5437..000000000 --- a/sherpa-onnx/flutter/example/linux/main.cc +++ /dev/null @@ -1,6 +0,0 @@ -#include "my_application.h" - -int main(int argc, char** argv) { - g_autoptr(MyApplication) app = my_application_new(); - return g_application_run(G_APPLICATION(app), argc, argv); -} diff --git a/sherpa-onnx/flutter/example/linux/my_application.cc b/sherpa-onnx/flutter/example/linux/my_application.cc deleted file mode 100644 index b6b1a09f1..000000000 --- a/sherpa-onnx/flutter/example/linux/my_application.cc +++ /dev/null @@ -1,124 +0,0 @@ -#include "my_application.h" - -#include -#ifdef GDK_WINDOWING_X11 -#include -#endif - -#include "flutter/generated_plugin_registrant.h" - -struct _MyApplication { - GtkApplication parent_instance; - char** dart_entrypoint_arguments; -}; - -G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) - -// Implements GApplication::activate. -static void my_application_activate(GApplication* application) { - MyApplication* self = MY_APPLICATION(application); - GtkWindow* window = - GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); - - // Use a header bar when running in GNOME as this is the common style used - // by applications and is the setup most users will be using (e.g. Ubuntu - // desktop). - // If running on X and not using GNOME then just use a traditional title bar - // in case the window manager does more exotic layout, e.g. tiling. - // If running on Wayland assume the header bar will work (may need changing - // if future cases occur). - gboolean use_header_bar = TRUE; -#ifdef GDK_WINDOWING_X11 - GdkScreen* screen = gtk_window_get_screen(window); - if (GDK_IS_X11_SCREEN(screen)) { - const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); - if (g_strcmp0(wm_name, "GNOME Shell") != 0) { - use_header_bar = FALSE; - } - } -#endif - if (use_header_bar) { - GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); - gtk_widget_show(GTK_WIDGET(header_bar)); - gtk_header_bar_set_title(header_bar, "sherpa_onnx"); - gtk_header_bar_set_show_close_button(header_bar, TRUE); - gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); - } else { - gtk_window_set_title(window, "sherpa_onnx"); - } - - gtk_window_set_default_size(window, 1280, 720); - gtk_widget_show(GTK_WIDGET(window)); - - g_autoptr(FlDartProject) project = fl_dart_project_new(); - fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); - - FlView* view = fl_view_new(project); - gtk_widget_show(GTK_WIDGET(view)); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); - - fl_register_plugins(FL_PLUGIN_REGISTRY(view)); - - gtk_widget_grab_focus(GTK_WIDGET(view)); -} - -// Implements GApplication::local_command_line. -static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { - MyApplication* self = MY_APPLICATION(application); - // Strip out the first argument as it is the binary name. - self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); - - g_autoptr(GError) error = nullptr; - if (!g_application_register(application, nullptr, &error)) { - g_warning("Failed to register: %s", error->message); - *exit_status = 1; - return TRUE; - } - - g_application_activate(application); - *exit_status = 0; - - return TRUE; -} - -// Implements GApplication::startup. -static void my_application_startup(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application startup. - - G_APPLICATION_CLASS(my_application_parent_class)->startup(application); -} - -// Implements GApplication::shutdown. -static void my_application_shutdown(GApplication* application) { - //MyApplication* self = MY_APPLICATION(object); - - // Perform any actions required at application shutdown. - - G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); -} - -// Implements GObject::dispose. -static void my_application_dispose(GObject* object) { - MyApplication* self = MY_APPLICATION(object); - g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); - G_OBJECT_CLASS(my_application_parent_class)->dispose(object); -} - -static void my_application_class_init(MyApplicationClass* klass) { - G_APPLICATION_CLASS(klass)->activate = my_application_activate; - G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; - G_APPLICATION_CLASS(klass)->startup = my_application_startup; - G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; - G_OBJECT_CLASS(klass)->dispose = my_application_dispose; -} - -static void my_application_init(MyApplication* self) {} - -MyApplication* my_application_new() { - return MY_APPLICATION(g_object_new(my_application_get_type(), - "application-id", APPLICATION_ID, - "flags", G_APPLICATION_NON_UNIQUE, - nullptr)); -} diff --git a/sherpa-onnx/flutter/example/linux/my_application.h b/sherpa-onnx/flutter/example/linux/my_application.h deleted file mode 100644 index 72271d5e4..000000000 --- a/sherpa-onnx/flutter/example/linux/my_application.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef FLUTTER_MY_APPLICATION_H_ -#define FLUTTER_MY_APPLICATION_H_ - -#include - -G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, - GtkApplication) - -/** - * my_application_new: - * - * Creates a new Flutter-based application. - * - * Returns: a new #MyApplication. - */ -MyApplication* my_application_new(); - -#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/sherpa-onnx/flutter/example/macos/.gitignore b/sherpa-onnx/flutter/example/macos/.gitignore deleted file mode 100644 index 746adbb6b..000000000 --- a/sherpa-onnx/flutter/example/macos/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# Flutter-related -**/Flutter/ephemeral/ -**/Pods/ - -# Xcode-related -**/dgph -**/xcuserdata/ diff --git a/sherpa-onnx/flutter/example/macos/Flutter/Flutter-Debug.xcconfig b/sherpa-onnx/flutter/example/macos/Flutter/Flutter-Debug.xcconfig deleted file mode 100644 index 4b81f9b2d..000000000 --- a/sherpa-onnx/flutter/example/macos/Flutter/Flutter-Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" -#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/sherpa-onnx/flutter/example/macos/Flutter/Flutter-Release.xcconfig b/sherpa-onnx/flutter/example/macos/Flutter/Flutter-Release.xcconfig deleted file mode 100644 index 5caa9d157..000000000 --- a/sherpa-onnx/flutter/example/macos/Flutter/Flutter-Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" -#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/sherpa-onnx/flutter/example/macos/Podfile b/sherpa-onnx/flutter/example/macos/Podfile deleted file mode 100644 index b52666a10..000000000 --- a/sherpa-onnx/flutter/example/macos/Podfile +++ /dev/null @@ -1,43 +0,0 @@ -platform :osx, '10.15' - -# CocoaPods analytics sends network stats synchronously affecting flutter build latency. -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -project 'Runner', { - 'Debug' => :debug, - 'Profile' => :release, - 'Release' => :release, -} - -def flutter_root - generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) - unless File.exist?(generated_xcode_build_settings_path) - raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" - end - - File.foreach(generated_xcode_build_settings_path) do |line| - matches = line.match(/FLUTTER_ROOT\=(.*)/) - return matches[1].strip if matches - end - raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" -end - -require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) - -flutter_macos_podfile_setup - -target 'Runner' do - use_frameworks! - use_modular_headers! - - flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) - target 'RunnerTests' do - inherit! :search_paths - end -end - -post_install do |installer| - installer.pods_project.targets.each do |target| - flutter_additional_macos_build_settings(target) - end -end diff --git a/sherpa-onnx/flutter/example/macos/Runner.xcodeproj/project.pbxproj b/sherpa-onnx/flutter/example/macos/Runner.xcodeproj/project.pbxproj deleted file mode 100644 index a872f1b76..000000000 --- a/sherpa-onnx/flutter/example/macos/Runner.xcodeproj/project.pbxproj +++ /dev/null @@ -1,801 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXAggregateTarget section */ - 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; - buildPhases = ( - 33CC111E2044C6BF0003C045 /* ShellScript */, - ); - dependencies = ( - ); - name = "Flutter Assemble"; - productName = FLX; - }; -/* End PBXAggregateTarget section */ - -/* Begin PBXBuildFile section */ - 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; - 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; - 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; - 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; - 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; - 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - AD18C81BD25EB64A10A74721 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3EEF159F4D7912B9311CB282 /* Pods_Runner.framework */; }; - F1F6B0C655533B7F45E75DA0 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BA92A3C1CA5533C24C7C7468 /* Pods_RunnerTests.framework */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 33CC10E52044A3C60003C045 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 33CC10EC2044A3C60003C045; - remoteInfo = Runner; - }; - 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 33CC10E52044A3C60003C045 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 33CC111A2044C6BA0003C045; - remoteInfo = FLX; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - 33CC110E2044A8840003C045 /* Bundle Framework */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Bundle Framework"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 09EF98B2CF4F049F4C7B5BAA /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; - 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; - 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* sherpa_onnx.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = sherpa_onnx.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; - 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; - 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; - 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; - 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; - 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; - 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; - 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; - 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 3EEF159F4D7912B9311CB282 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - A1236548122E91133BF39DA1 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - BA92A3C1CA5533C24C7C7468 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C9A014A0AF0A3CC243C5BA0C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - CDC9FAA17691FA4BA5F49074 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - E3A16097032C820A141E3D0C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - F7379309434F931B509C87FA /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 331C80D2294CF70F00263BE5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - F1F6B0C655533B7F45E75DA0 /* Pods_RunnerTests.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 33CC10EA2044A3C60003C045 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AD18C81BD25EB64A10A74721 /* Pods_Runner.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 331C80D6294CF71000263BE5 /* RunnerTests */ = { - isa = PBXGroup; - children = ( - 331C80D7294CF71000263BE5 /* RunnerTests.swift */, - ); - path = RunnerTests; - sourceTree = ""; - }; - 33BA886A226E78AF003329D5 /* Configs */ = { - isa = PBXGroup; - children = ( - 33E5194F232828860026EE4D /* AppInfo.xcconfig */, - 9740EEB21CF90195004384FC /* Debug.xcconfig */, - 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, - 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, - ); - path = Configs; - sourceTree = ""; - }; - 33CC10E42044A3C60003C045 = { - isa = PBXGroup; - children = ( - 33FAB671232836740065AC1E /* Runner */, - 33CEB47122A05771004F2AC0 /* Flutter */, - 331C80D6294CF71000263BE5 /* RunnerTests */, - 33CC10EE2044A3C60003C045 /* Products */, - D73912EC22F37F3D000D13A0 /* Frameworks */, - 782733D97D5852B42F7DAD3B /* Pods */, - ); - sourceTree = ""; - }; - 33CC10EE2044A3C60003C045 /* Products */ = { - isa = PBXGroup; - children = ( - 33CC10ED2044A3C60003C045 /* sherpa_onnx.app */, - 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 33CC11242044D66E0003C045 /* Resources */ = { - isa = PBXGroup; - children = ( - 33CC10F22044A3C60003C045 /* Assets.xcassets */, - 33CC10F42044A3C60003C045 /* MainMenu.xib */, - 33CC10F72044A3C60003C045 /* Info.plist */, - ); - name = Resources; - path = ..; - sourceTree = ""; - }; - 33CEB47122A05771004F2AC0 /* Flutter */ = { - isa = PBXGroup; - children = ( - 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, - 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, - 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, - 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, - ); - path = Flutter; - sourceTree = ""; - }; - 33FAB671232836740065AC1E /* Runner */ = { - isa = PBXGroup; - children = ( - 33CC10F02044A3C60003C045 /* AppDelegate.swift */, - 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, - 33E51913231747F40026EE4D /* DebugProfile.entitlements */, - 33E51914231749380026EE4D /* Release.entitlements */, - 33CC11242044D66E0003C045 /* Resources */, - 33BA886A226E78AF003329D5 /* Configs */, - ); - path = Runner; - sourceTree = ""; - }; - 782733D97D5852B42F7DAD3B /* Pods */ = { - isa = PBXGroup; - children = ( - A1236548122E91133BF39DA1 /* Pods-Runner.debug.xcconfig */, - 09EF98B2CF4F049F4C7B5BAA /* Pods-Runner.release.xcconfig */, - CDC9FAA17691FA4BA5F49074 /* Pods-Runner.profile.xcconfig */, - E3A16097032C820A141E3D0C /* Pods-RunnerTests.debug.xcconfig */, - C9A014A0AF0A3CC243C5BA0C /* Pods-RunnerTests.release.xcconfig */, - F7379309434F931B509C87FA /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; - D73912EC22F37F3D000D13A0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 3EEF159F4D7912B9311CB282 /* Pods_Runner.framework */, - BA92A3C1CA5533C24C7C7468 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 331C80D4294CF70F00263BE5 /* RunnerTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; - buildPhases = ( - A6B10289F00794F0134DF87E /* [CP] Check Pods Manifest.lock */, - 331C80D1294CF70F00263BE5 /* Sources */, - 331C80D2294CF70F00263BE5 /* Frameworks */, - 331C80D3294CF70F00263BE5 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 331C80DA294CF71000263BE5 /* PBXTargetDependency */, - ); - name = RunnerTests; - productName = RunnerTests; - productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 33CC10EC2044A3C60003C045 /* Runner */ = { - isa = PBXNativeTarget; - buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; - buildPhases = ( - 1CEDB7D27400A1C1B87B926C /* [CP] Check Pods Manifest.lock */, - 33CC10E92044A3C60003C045 /* Sources */, - 33CC10EA2044A3C60003C045 /* Frameworks */, - 33CC10EB2044A3C60003C045 /* Resources */, - 33CC110E2044A8840003C045 /* Bundle Framework */, - 3399D490228B24CF009A79C7 /* ShellScript */, - C2CEDA50A000327A806944DD /* [CP] Embed Pods Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 33CC11202044C79F0003C045 /* PBXTargetDependency */, - ); - name = Runner; - productName = Runner; - productReference = 33CC10ED2044A3C60003C045 /* sherpa_onnx.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 33CC10E52044A3C60003C045 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = YES; - LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 1510; - ORGANIZATIONNAME = ""; - TargetAttributes = { - 331C80D4294CF70F00263BE5 = { - CreatedOnToolsVersion = 14.0; - TestTargetID = 33CC10EC2044A3C60003C045; - }; - 33CC10EC2044A3C60003C045 = { - CreatedOnToolsVersion = 9.2; - LastSwiftMigration = 1100; - ProvisioningStyle = Automatic; - SystemCapabilities = { - com.apple.Sandbox = { - enabled = 1; - }; - }; - }; - 33CC111A2044C6BA0003C045 = { - CreatedOnToolsVersion = 9.2; - ProvisioningStyle = Manual; - }; - }; - }; - buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 9.3"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 33CC10E42044A3C60003C045; - productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 33CC10EC2044A3C60003C045 /* Runner */, - 331C80D4294CF70F00263BE5 /* RunnerTests */, - 33CC111A2044C6BA0003C045 /* Flutter Assemble */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 331C80D3294CF70F00263BE5 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 33CC10EB2044A3C60003C045 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, - 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 1CEDB7D27400A1C1B87B926C /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; - }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, - ); - inputPaths = ( - Flutter/ephemeral/tripwire, - ); - outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; - }; - A6B10289F00794F0134DF87E /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - C2CEDA50A000327A806944DD /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 331C80D1294CF70F00263BE5 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 33CC10E92044A3C60003C045 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, - 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, - 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 33CC10EC2044A3C60003C045 /* Runner */; - targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; - }; - 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; - targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { - isa = PBXVariantGroup; - children = ( - 33CC10F52044A3C60003C045 /* Base */, - ); - name = MainMenu.xib; - path = Runner; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 331C80DB294CF71000263BE5 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E3A16097032C820A141E3D0C /* Pods-RunnerTests.debug.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.k2fsa.sherpa.onnx.RunnerTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/sherpa_onnx.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/sherpa_onnx"; - }; - name = Debug; - }; - 331C80DC294CF71000263BE5 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = C9A014A0AF0A3CC243C5BA0C /* Pods-RunnerTests.release.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.k2fsa.sherpa.onnx.RunnerTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/sherpa_onnx.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/sherpa_onnx"; - }; - name = Release; - }; - 331C80DD294CF71000263BE5 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = F7379309434F931B509C87FA /* Pods-RunnerTests.profile.xcconfig */; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - CURRENT_PROJECT_VERSION = 1; - GENERATE_INFOPLIST_FILE = YES; - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.k2fsa.sherpa.onnx.RunnerTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/sherpa_onnx.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/sherpa_onnx"; - }; - name = Profile; - }; - 338D0CE9231458BD00FA5F75 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - }; - name = Profile; - }; - 338D0CEA231458BD00FA5F75 /* Profile */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 5.0; - }; - name = Profile; - }; - 338D0CEB231458BD00FA5F75 /* Profile */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Manual; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Profile; - }; - 33CC10F92044A3C60003C045 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - }; - name = Debug; - }; - 33CC10FA2044A3C60003C045 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEAD_CODE_STRIPPING = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.15; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - }; - name = Release; - }; - 33CC10FC2044A3C60003C045 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - }; - name = Debug; - }; - 33CC10FD2044A3C60003C045 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; - CODE_SIGN_STYLE = Automatic; - COMBINE_HIDPI_IMAGES = YES; - INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - PROVISIONING_PROFILE_SPECIFIER = ""; - SWIFT_VERSION = 5.0; - }; - name = Release; - }; - 33CC111C2044C6BA0003C045 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Manual; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - 33CC111D2044C6BA0003C045 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 331C80DB294CF71000263BE5 /* Debug */, - 331C80DC294CF71000263BE5 /* Release */, - 331C80DD294CF71000263BE5 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 33CC10F92044A3C60003C045 /* Debug */, - 33CC10FA2044A3C60003C045 /* Release */, - 338D0CE9231458BD00FA5F75 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 33CC10FC2044A3C60003C045 /* Debug */, - 33CC10FD2044A3C60003C045 /* Release */, - 338D0CEA231458BD00FA5F75 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 33CC111C2044C6BA0003C045 /* Debug */, - 33CC111D2044C6BA0003C045 /* Release */, - 338D0CEB231458BD00FA5F75 /* Profile */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 33CC10E52044A3C60003C045 /* Project object */; -} diff --git a/sherpa-onnx/flutter/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/sherpa-onnx/flutter/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003..000000000 --- a/sherpa-onnx/flutter/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/sherpa-onnx/flutter/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/sherpa-onnx/flutter/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme deleted file mode 100644 index 33dea4279..000000000 --- a/sherpa-onnx/flutter/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sherpa-onnx/flutter/example/macos/Runner.xcworkspace/contents.xcworkspacedata b/sherpa-onnx/flutter/example/macos/Runner.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 21a3cc14c..000000000 --- a/sherpa-onnx/flutter/example/macos/Runner.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/sherpa-onnx/flutter/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/sherpa-onnx/flutter/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d981003..000000000 --- a/sherpa-onnx/flutter/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/sherpa-onnx/flutter/example/macos/Runner/AppDelegate.swift b/sherpa-onnx/flutter/example/macos/Runner/AppDelegate.swift deleted file mode 100644 index d53ef6437..000000000 --- a/sherpa-onnx/flutter/example/macos/Runner/AppDelegate.swift +++ /dev/null @@ -1,9 +0,0 @@ -import Cocoa -import FlutterMacOS - -@NSApplicationMain -class AppDelegate: FlutterAppDelegate { - override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { - return true - } -} diff --git a/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index a2ec33f19..000000000 --- a/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "images" : [ - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_16.png", - "scale" : "1x" - }, - { - "size" : "16x16", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "2x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_32.png", - "scale" : "1x" - }, - { - "size" : "32x32", - "idiom" : "mac", - "filename" : "app_icon_64.png", - "scale" : "2x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_128.png", - "scale" : "1x" - }, - { - "size" : "128x128", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "2x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_256.png", - "scale" : "1x" - }, - { - "size" : "256x256", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "2x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_512.png", - "scale" : "1x" - }, - { - "size" : "512x512", - "idiom" : "mac", - "filename" : "app_icon_1024.png", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png deleted file mode 100644 index 82b6f9d9a..000000000 Binary files a/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png and /dev/null differ diff --git a/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png deleted file mode 100644 index 13b35eba5..000000000 Binary files a/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png and /dev/null differ diff --git a/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png deleted file mode 100644 index 0a3f5fa40..000000000 Binary files a/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png and /dev/null differ diff --git a/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png deleted file mode 100644 index bdb57226d..000000000 Binary files a/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png and /dev/null differ diff --git a/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png deleted file mode 100644 index f083318e0..000000000 Binary files a/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png and /dev/null differ diff --git a/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png deleted file mode 100644 index 326c0e72c..000000000 Binary files a/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png and /dev/null differ diff --git a/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png deleted file mode 100644 index 2f1632cfd..000000000 Binary files a/sherpa-onnx/flutter/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png and /dev/null differ diff --git a/sherpa-onnx/flutter/example/macos/Runner/Base.lproj/MainMenu.xib b/sherpa-onnx/flutter/example/macos/Runner/Base.lproj/MainMenu.xib deleted file mode 100644 index 80e867a4e..000000000 --- a/sherpa-onnx/flutter/example/macos/Runner/Base.lproj/MainMenu.xib +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sherpa-onnx/flutter/example/macos/Runner/Configs/AppInfo.xcconfig b/sherpa-onnx/flutter/example/macos/Runner/Configs/AppInfo.xcconfig deleted file mode 100644 index 374d9c0fa..000000000 --- a/sherpa-onnx/flutter/example/macos/Runner/Configs/AppInfo.xcconfig +++ /dev/null @@ -1,14 +0,0 @@ -// Application-level settings for the Runner target. -// -// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the -// future. If not, the values below would default to using the project name when this becomes a -// 'flutter create' template. - -// The application's name. By default this is also the title of the Flutter window. -PRODUCT_NAME = sherpa_onnx - -// The application's bundle identifier -PRODUCT_BUNDLE_IDENTIFIER = com.k2fsa.sherpa.onnx - -// The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2024 Next-gen Kaldi. All rights reserved. diff --git a/sherpa-onnx/flutter/example/macos/Runner/Configs/Debug.xcconfig b/sherpa-onnx/flutter/example/macos/Runner/Configs/Debug.xcconfig deleted file mode 100644 index 36b0fd946..000000000 --- a/sherpa-onnx/flutter/example/macos/Runner/Configs/Debug.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "../../Flutter/Flutter-Debug.xcconfig" -#include "Warnings.xcconfig" diff --git a/sherpa-onnx/flutter/example/macos/Runner/Configs/Release.xcconfig b/sherpa-onnx/flutter/example/macos/Runner/Configs/Release.xcconfig deleted file mode 100644 index dff4f4956..000000000 --- a/sherpa-onnx/flutter/example/macos/Runner/Configs/Release.xcconfig +++ /dev/null @@ -1,2 +0,0 @@ -#include "../../Flutter/Flutter-Release.xcconfig" -#include "Warnings.xcconfig" diff --git a/sherpa-onnx/flutter/example/macos/Runner/Configs/Warnings.xcconfig b/sherpa-onnx/flutter/example/macos/Runner/Configs/Warnings.xcconfig deleted file mode 100644 index 42bcbf478..000000000 --- a/sherpa-onnx/flutter/example/macos/Runner/Configs/Warnings.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings -GCC_WARN_UNDECLARED_SELECTOR = YES -CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES -CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE -CLANG_WARN__DUPLICATE_METHOD_MATCH = YES -CLANG_WARN_PRAGMA_PACK = YES -CLANG_WARN_STRICT_PROTOTYPES = YES -CLANG_WARN_COMMA = YES -GCC_WARN_STRICT_SELECTOR_MATCH = YES -CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES -CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES -GCC_WARN_SHADOW = YES -CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/sherpa-onnx/flutter/example/macos/Runner/DebugProfile.entitlements b/sherpa-onnx/flutter/example/macos/Runner/DebugProfile.entitlements deleted file mode 100644 index aa7828c7a..000000000 --- a/sherpa-onnx/flutter/example/macos/Runner/DebugProfile.entitlements +++ /dev/null @@ -1,14 +0,0 @@ - - - - - com.apple.security.app-sandbox - - com.apple.security.cs.allow-jit - - com.apple.security.device.audio-input - - com.apple.security.network.server - - - diff --git a/sherpa-onnx/flutter/example/macos/Runner/Info.plist b/sherpa-onnx/flutter/example/macos/Runner/Info.plist deleted file mode 100644 index dfb417860..000000000 --- a/sherpa-onnx/flutter/example/macos/Runner/Info.plist +++ /dev/null @@ -1,34 +0,0 @@ - - - - - NSMicrophoneUsageDescription - Need microphone access for Next-gen kaldi to work - CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIconFile - - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) - LSMinimumSystemVersion - $(MACOSX_DEPLOYMENT_TARGET) - NSHumanReadableCopyright - $(PRODUCT_COPYRIGHT) - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - - diff --git a/sherpa-onnx/flutter/example/macos/Runner/MainFlutterWindow.swift b/sherpa-onnx/flutter/example/macos/Runner/MainFlutterWindow.swift deleted file mode 100644 index 3cc05eb23..000000000 --- a/sherpa-onnx/flutter/example/macos/Runner/MainFlutterWindow.swift +++ /dev/null @@ -1,15 +0,0 @@ -import Cocoa -import FlutterMacOS - -class MainFlutterWindow: NSWindow { - override func awakeFromNib() { - let flutterViewController = FlutterViewController() - let windowFrame = self.frame - self.contentViewController = flutterViewController - self.setFrame(windowFrame, display: true) - - RegisterGeneratedPlugins(registry: flutterViewController) - - super.awakeFromNib() - } -} diff --git a/sherpa-onnx/flutter/example/macos/Runner/Release.entitlements b/sherpa-onnx/flutter/example/macos/Runner/Release.entitlements deleted file mode 100644 index f29279b35..000000000 --- a/sherpa-onnx/flutter/example/macos/Runner/Release.entitlements +++ /dev/null @@ -1,10 +0,0 @@ - - - - - com.apple.security.app-sandbox - - com.apple.security.device.audio-input - - - diff --git a/sherpa-onnx/flutter/example/macos/RunnerTests/RunnerTests.swift b/sherpa-onnx/flutter/example/macos/RunnerTests/RunnerTests.swift deleted file mode 100644 index 61f3bd1fc..000000000 --- a/sherpa-onnx/flutter/example/macos/RunnerTests/RunnerTests.swift +++ /dev/null @@ -1,12 +0,0 @@ -import Cocoa -import FlutterMacOS -import XCTest - -class RunnerTests: XCTestCase { - - func testExample() { - // If you add code to the Runner application, consider adding tests here. - // See https://developer.apple.com/documentation/xctest for more information about using XCTest. - } - -} diff --git a/sherpa-onnx/flutter/example/pubspec.yaml b/sherpa-onnx/flutter/example/pubspec.yaml deleted file mode 100644 index 0292fa340..000000000 --- a/sherpa-onnx/flutter/example/pubspec.yaml +++ /dev/null @@ -1,107 +0,0 @@ -name: hello_sherpa_onnx -description: "Demonstrates how to use the sherpa_onnx ffi plugin." -# The following line prevents the package from being accidentally published to -# pub.dev using `flutter pub publish`. This is preferred for private packages. -publish_to: 'none' # Remove this line if you wish to publish to pub.dev - -# The following defines the version and build number for your application. -# A version number is three numbers separated by dots, like 1.2.43 -# followed by an optional build number separated by a +. -# Both the version and the builder number may be overridden in flutter -# build by specifying --build-name and --build-number, respectively. -# In Android, build-name is used as versionName while build-number used as versionCode. -# Read more about Android versioning at https://developer.android.com/studio/publish/versioning -# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. -# Read more about iOS versioning at -# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -# In Windows, build-name is used as the major, minor, and patch parts -# of the product and file versions while build-number is used as the build suffix. -version: 1.0.0+1 - -environment: - sdk: '>=3.4.0 <4.0.0' - -# Dependencies specify other packages that your package needs in order to work. -# To automatically upgrade your package dependencies to the latest versions -# consider running `flutter pub upgrade --major-versions`. Alternatively, -# dependencies can be manually updated by changing the version numbers below to -# the latest version available on pub.dev. To see which dependencies have newer -# versions available, run `flutter pub outdated`. -dependencies: - flutter: - sdk: flutter - - path_provider: ^2.1.3 - path: ^1.9.0 - record: ^5.1.0 - url_launcher: ^6.2.6 - - sherpa_onnx: - # When depending on this package from a real application you should use: - # sherpa_onnx: ^x.y.z - # See https://dart.dev/tools/pub/dependencies#version-constraints - # The example app is bundled with the plugin so we use a path dependency on - # the parent directory to use the current plugin's version. - path: ../ - - # The following adds the Cupertino Icons font to your application. - # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^1.0.6 - -dev_dependencies: - flutter_test: - sdk: flutter - - # The "flutter_lints" package below contains a set of recommended lints to - # encourage good coding practices. The lint set provided by the package is - # activated in the `analysis_options.yaml` file located at the root of your - # package. See that file for information about deactivating specific lint - # rules and activating additional ones. - flutter_lints: ^3.0.0 - -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter packages. -flutter: - - # The following line ensures that the Material Icons font is - # included with your application, so that you can use the icons in - # the material Icons class. - uses-material-design: true - - # To add assets to your application, add an assets section, like this: - assets: - - assets/ - - assets/sherpa-onnx-streaming-zipformer-bilingual-zh-en-2023-02-20/ - # - assets/sherpa-onnx-paraformer-zh-2023-03-28/ - # - assets/sherpa-onnx-paraformer-zh-2023-03-28/test_wavs/ - # - assets/sr-data/enroll/ - # - assets/sr-data/test/ - # - images/a_dot_ham.jpeg - - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware - - # For details regarding adding assets from package dependencies, see - # https://flutter.dev/assets-and-images/#from-packages - - # To add custom fonts to your application, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts from package dependencies, - # see https://flutter.dev/custom-fonts/#from-packages diff --git a/sherpa-onnx/flutter/example/windows/.gitignore b/sherpa-onnx/flutter/example/windows/.gitignore deleted file mode 100644 index d492d0d98..000000000 --- a/sherpa-onnx/flutter/example/windows/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -flutter/ephemeral/ - -# Visual Studio user-specific files. -*.suo -*.user -*.userosscache -*.sln.docstates - -# Visual Studio build-related files. -x64/ -x86/ - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!*.[Cc]ache/ diff --git a/sherpa-onnx/flutter/example/windows/CMakeLists.txt b/sherpa-onnx/flutter/example/windows/CMakeLists.txt deleted file mode 100644 index 5311dfec9..000000000 --- a/sherpa-onnx/flutter/example/windows/CMakeLists.txt +++ /dev/null @@ -1,108 +0,0 @@ -# Project-level configuration. -cmake_minimum_required(VERSION 3.14) -project(sherpa_onnx LANGUAGES CXX) - -# The name of the executable created for the application. Change this to change -# the on-disk name of your application. -set(BINARY_NAME "sherpa_onnx") - -# Explicitly opt in to modern CMake behaviors to avoid warnings with recent -# versions of CMake. -cmake_policy(VERSION 3.14...3.25) - -# Define build configuration option. -get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) -if(IS_MULTICONFIG) - set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" - CACHE STRING "" FORCE) -else() - if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) - set(CMAKE_BUILD_TYPE "Debug" CACHE - STRING "Flutter build mode" FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS - "Debug" "Profile" "Release") - endif() -endif() -# Define settings for the Profile build mode. -set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") -set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") -set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") -set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") - -# Use Unicode for all projects. -add_definitions(-DUNICODE -D_UNICODE) - -# Compilation settings that should be applied to most targets. -# -# Be cautious about adding new options here, as plugins use this function by -# default. In most cases, you should add new options to specific targets instead -# of modifying this function. -function(APPLY_STANDARD_SETTINGS TARGET) - target_compile_features(${TARGET} PUBLIC cxx_std_17) - target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") - target_compile_options(${TARGET} PRIVATE /EHsc) - target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") - target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") -endfunction() - -# Flutter library and tool build rules. -set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") -add_subdirectory(${FLUTTER_MANAGED_DIR}) - -# Application build; see runner/CMakeLists.txt. -add_subdirectory("runner") - - -# Generated plugin build rules, which manage building the plugins and adding -# them to the application. -include(flutter/generated_plugins.cmake) - - -# === Installation === -# Support files are copied into place next to the executable, so that it can -# run in place. This is done instead of making a separate bundle (as on Linux) -# so that building and running from within Visual Studio will work. -set(BUILD_BUNDLE_DIR "$") -# Make the "install" step default, as it's required to run. -set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) -if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) -endif() - -set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") -set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") - -install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" - COMPONENT Runtime) - -install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" - COMPONENT Runtime) - -install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) - -if(PLUGIN_BUNDLED_LIBRARIES) - install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" - DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) -endif() - -# Copy the native assets provided by the build.dart from all packages. -set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") -install(DIRECTORY "${NATIVE_ASSETS_DIR}" - DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" - COMPONENT Runtime) - -# Fully re-copy the assets directory on each build to avoid having stale files -# from a previous install. -set(FLUTTER_ASSET_DIR_NAME "flutter_assets") -install(CODE " - file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") - " COMPONENT Runtime) -install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" - DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) - -# Install the AOT library on non-Debug builds only. -install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" - CONFIGURATIONS Profile;Release - COMPONENT Runtime) diff --git a/sherpa-onnx/flutter/example/windows/flutter/CMakeLists.txt b/sherpa-onnx/flutter/example/windows/flutter/CMakeLists.txt deleted file mode 100644 index 903f4899d..000000000 --- a/sherpa-onnx/flutter/example/windows/flutter/CMakeLists.txt +++ /dev/null @@ -1,109 +0,0 @@ -# This file controls Flutter-level build steps. It should not be edited. -cmake_minimum_required(VERSION 3.14) - -set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") - -# Configuration provided via flutter tool. -include(${EPHEMERAL_DIR}/generated_config.cmake) - -# TODO: Move the rest of this into files in ephemeral. See -# https://github.com/flutter/flutter/issues/57146. -set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") - -# Set fallback configurations for older versions of the flutter tool. -if (NOT DEFINED FLUTTER_TARGET_PLATFORM) - set(FLUTTER_TARGET_PLATFORM "windows-x64") -endif() - -# === Flutter Library === -set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") - -# Published to parent scope for install step. -set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) -set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) -set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) -set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) - -list(APPEND FLUTTER_LIBRARY_HEADERS - "flutter_export.h" - "flutter_windows.h" - "flutter_messenger.h" - "flutter_plugin_registrar.h" - "flutter_texture_registrar.h" -) -list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") -add_library(flutter INTERFACE) -target_include_directories(flutter INTERFACE - "${EPHEMERAL_DIR}" -) -target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") -add_dependencies(flutter flutter_assemble) - -# === Wrapper === -list(APPEND CPP_WRAPPER_SOURCES_CORE - "core_implementations.cc" - "standard_codec.cc" -) -list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") -list(APPEND CPP_WRAPPER_SOURCES_PLUGIN - "plugin_registrar.cc" -) -list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") -list(APPEND CPP_WRAPPER_SOURCES_APP - "flutter_engine.cc" - "flutter_view_controller.cc" -) -list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") - -# Wrapper sources needed for a plugin. -add_library(flutter_wrapper_plugin STATIC - ${CPP_WRAPPER_SOURCES_CORE} - ${CPP_WRAPPER_SOURCES_PLUGIN} -) -apply_standard_settings(flutter_wrapper_plugin) -set_target_properties(flutter_wrapper_plugin PROPERTIES - POSITION_INDEPENDENT_CODE ON) -set_target_properties(flutter_wrapper_plugin PROPERTIES - CXX_VISIBILITY_PRESET hidden) -target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) -target_include_directories(flutter_wrapper_plugin PUBLIC - "${WRAPPER_ROOT}/include" -) -add_dependencies(flutter_wrapper_plugin flutter_assemble) - -# Wrapper sources needed for the runner. -add_library(flutter_wrapper_app STATIC - ${CPP_WRAPPER_SOURCES_CORE} - ${CPP_WRAPPER_SOURCES_APP} -) -apply_standard_settings(flutter_wrapper_app) -target_link_libraries(flutter_wrapper_app PUBLIC flutter) -target_include_directories(flutter_wrapper_app PUBLIC - "${WRAPPER_ROOT}/include" -) -add_dependencies(flutter_wrapper_app flutter_assemble) - -# === Flutter tool backend === -# _phony_ is a non-existent file to force this command to run every time, -# since currently there's no way to get a full input/output list from the -# flutter tool. -set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") -set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) -add_custom_command( - OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} - ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} - ${CPP_WRAPPER_SOURCES_APP} - ${PHONY_OUTPUT} - COMMAND ${CMAKE_COMMAND} -E env - ${FLUTTER_TOOL_ENVIRONMENT} - "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" - ${FLUTTER_TARGET_PLATFORM} $ - VERBATIM -) -add_custom_target(flutter_assemble DEPENDS - "${FLUTTER_LIBRARY}" - ${FLUTTER_LIBRARY_HEADERS} - ${CPP_WRAPPER_SOURCES_CORE} - ${CPP_WRAPPER_SOURCES_PLUGIN} - ${CPP_WRAPPER_SOURCES_APP} -) diff --git a/sherpa-onnx/flutter/example/windows/runner/CMakeLists.txt b/sherpa-onnx/flutter/example/windows/runner/CMakeLists.txt deleted file mode 100644 index 394917c05..000000000 --- a/sherpa-onnx/flutter/example/windows/runner/CMakeLists.txt +++ /dev/null @@ -1,40 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(runner LANGUAGES CXX) - -# Define the application target. To change its name, change BINARY_NAME in the -# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer -# work. -# -# Any new source files that you add to the application should be added here. -add_executable(${BINARY_NAME} WIN32 - "flutter_window.cpp" - "main.cpp" - "utils.cpp" - "win32_window.cpp" - "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" - "Runner.rc" - "runner.exe.manifest" -) - -# Apply the standard set of build settings. This can be removed for applications -# that need different build settings. -apply_standard_settings(${BINARY_NAME}) - -# Add preprocessor definitions for the build version. -target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") -target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") -target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") -target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") -target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") - -# Disable Windows macros that collide with C++ standard library functions. -target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") - -# Add dependency libraries and include directories. Add any application-specific -# dependencies here. -target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) -target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") -target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") - -# Run the Flutter tool portions of the build. This must not be removed. -add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/sherpa-onnx/flutter/example/windows/runner/Runner.rc b/sherpa-onnx/flutter/example/windows/runner/Runner.rc deleted file mode 100644 index bd25a823d..000000000 --- a/sherpa-onnx/flutter/example/windows/runner/Runner.rc +++ /dev/null @@ -1,121 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#pragma code_page(65001) -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "winres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (United States) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""winres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_APP_ICON ICON "resources\\app_icon.ico" - - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) -#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD -#else -#define VERSION_AS_NUMBER 1,0,0,0 -#endif - -#if defined(FLUTTER_VERSION) -#define VERSION_AS_STRING FLUTTER_VERSION -#else -#define VERSION_AS_STRING "1.0.0" -#endif - -VS_VERSION_INFO VERSIONINFO - FILEVERSION VERSION_AS_NUMBER - PRODUCTVERSION VERSION_AS_NUMBER - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG -#else - FILEFLAGS 0x0L -#endif - FILEOS VOS__WINDOWS32 - FILETYPE VFT_APP - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904e4" - BEGIN - VALUE "CompanyName", "Next-gen Kaldi" "\0" - VALUE "FileDescription", "sherpa_onnx" "\0" - VALUE "FileVersion", VERSION_AS_STRING "\0" - VALUE "InternalName", "sherpa_onnx" "\0" - VALUE "LegalCopyright", "Copyright (C) 2024 Next-gen Kaldi. All rights reserved." "\0" - VALUE "OriginalFilename", "sherpa_onnx.exe" "\0" - VALUE "ProductName", "sherpa_onnx" "\0" - VALUE "ProductVersion", VERSION_AS_STRING "\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1252 - END -END - -#endif // English (United States) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED diff --git a/sherpa-onnx/flutter/example/windows/runner/flutter_window.cpp b/sherpa-onnx/flutter/example/windows/runner/flutter_window.cpp deleted file mode 100644 index 955ee3038..000000000 --- a/sherpa-onnx/flutter/example/windows/runner/flutter_window.cpp +++ /dev/null @@ -1,71 +0,0 @@ -#include "flutter_window.h" - -#include - -#include "flutter/generated_plugin_registrant.h" - -FlutterWindow::FlutterWindow(const flutter::DartProject& project) - : project_(project) {} - -FlutterWindow::~FlutterWindow() {} - -bool FlutterWindow::OnCreate() { - if (!Win32Window::OnCreate()) { - return false; - } - - RECT frame = GetClientArea(); - - // The size here must match the window dimensions to avoid unnecessary surface - // creation / destruction in the startup path. - flutter_controller_ = std::make_unique( - frame.right - frame.left, frame.bottom - frame.top, project_); - // Ensure that basic setup of the controller was successful. - if (!flutter_controller_->engine() || !flutter_controller_->view()) { - return false; - } - RegisterPlugins(flutter_controller_->engine()); - SetChildContent(flutter_controller_->view()->GetNativeWindow()); - - flutter_controller_->engine()->SetNextFrameCallback([&]() { - this->Show(); - }); - - // Flutter can complete the first frame before the "show window" callback is - // registered. The following call ensures a frame is pending to ensure the - // window is shown. It is a no-op if the first frame hasn't completed yet. - flutter_controller_->ForceRedraw(); - - return true; -} - -void FlutterWindow::OnDestroy() { - if (flutter_controller_) { - flutter_controller_ = nullptr; - } - - Win32Window::OnDestroy(); -} - -LRESULT -FlutterWindow::MessageHandler(HWND hwnd, UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept { - // Give Flutter, including plugins, an opportunity to handle window messages. - if (flutter_controller_) { - std::optional result = - flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, - lparam); - if (result) { - return *result; - } - } - - switch (message) { - case WM_FONTCHANGE: - flutter_controller_->engine()->ReloadSystemFonts(); - break; - } - - return Win32Window::MessageHandler(hwnd, message, wparam, lparam); -} diff --git a/sherpa-onnx/flutter/example/windows/runner/flutter_window.h b/sherpa-onnx/flutter/example/windows/runner/flutter_window.h deleted file mode 100644 index 6da0652f0..000000000 --- a/sherpa-onnx/flutter/example/windows/runner/flutter_window.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef RUNNER_FLUTTER_WINDOW_H_ -#define RUNNER_FLUTTER_WINDOW_H_ - -#include -#include - -#include - -#include "win32_window.h" - -// A window that does nothing but host a Flutter view. -class FlutterWindow : public Win32Window { - public: - // Creates a new FlutterWindow hosting a Flutter view running |project|. - explicit FlutterWindow(const flutter::DartProject& project); - virtual ~FlutterWindow(); - - protected: - // Win32Window: - bool OnCreate() override; - void OnDestroy() override; - LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, - LPARAM const lparam) noexcept override; - - private: - // The project to run. - flutter::DartProject project_; - - // The Flutter instance hosted by this window. - std::unique_ptr flutter_controller_; -}; - -#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/sherpa-onnx/flutter/example/windows/runner/main.cpp b/sherpa-onnx/flutter/example/windows/runner/main.cpp deleted file mode 100644 index 11cde36d1..000000000 --- a/sherpa-onnx/flutter/example/windows/runner/main.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#include -#include -#include - -#include "flutter_window.h" -#include "utils.h" - -int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, - _In_ wchar_t *command_line, _In_ int show_command) { - // Attach to console when present (e.g., 'flutter run') or create a - // new console when running with a debugger. - if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { - CreateAndAttachConsole(); - } - - // Initialize COM, so that it is available for use in the library and/or - // plugins. - ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); - - flutter::DartProject project(L"data"); - - std::vector command_line_arguments = - GetCommandLineArguments(); - - project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); - - FlutterWindow window(project); - Win32Window::Point origin(10, 10); - Win32Window::Size size(1280, 720); - if (!window.Create(L"sherpa_onnx", origin, size)) { - return EXIT_FAILURE; - } - window.SetQuitOnClose(true); - - ::MSG msg; - while (::GetMessage(&msg, nullptr, 0, 0)) { - ::TranslateMessage(&msg); - ::DispatchMessage(&msg); - } - - ::CoUninitialize(); - return EXIT_SUCCESS; -} diff --git a/sherpa-onnx/flutter/example/windows/runner/resource.h b/sherpa-onnx/flutter/example/windows/runner/resource.h deleted file mode 100644 index 66a65d1e4..000000000 --- a/sherpa-onnx/flutter/example/windows/runner/resource.h +++ /dev/null @@ -1,16 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by Runner.rc -// -#define IDI_APP_ICON 101 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 102 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif diff --git a/sherpa-onnx/flutter/example/windows/runner/resources/app_icon.ico b/sherpa-onnx/flutter/example/windows/runner/resources/app_icon.ico deleted file mode 100644 index c04e20caf..000000000 Binary files a/sherpa-onnx/flutter/example/windows/runner/resources/app_icon.ico and /dev/null differ diff --git a/sherpa-onnx/flutter/example/windows/runner/runner.exe.manifest b/sherpa-onnx/flutter/example/windows/runner/runner.exe.manifest deleted file mode 100644 index a42ea7687..000000000 --- a/sherpa-onnx/flutter/example/windows/runner/runner.exe.manifest +++ /dev/null @@ -1,20 +0,0 @@ - - - - - PerMonitorV2 - - - - - - - - - - - - - - - diff --git a/sherpa-onnx/flutter/example/windows/runner/utils.cpp b/sherpa-onnx/flutter/example/windows/runner/utils.cpp deleted file mode 100644 index 3a0b46511..000000000 --- a/sherpa-onnx/flutter/example/windows/runner/utils.cpp +++ /dev/null @@ -1,65 +0,0 @@ -#include "utils.h" - -#include -#include -#include -#include - -#include - -void CreateAndAttachConsole() { - if (::AllocConsole()) { - FILE *unused; - if (freopen_s(&unused, "CONOUT$", "w", stdout)) { - _dup2(_fileno(stdout), 1); - } - if (freopen_s(&unused, "CONOUT$", "w", stderr)) { - _dup2(_fileno(stdout), 2); - } - std::ios::sync_with_stdio(); - FlutterDesktopResyncOutputStreams(); - } -} - -std::vector GetCommandLineArguments() { - // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. - int argc; - wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); - if (argv == nullptr) { - return std::vector(); - } - - std::vector command_line_arguments; - - // Skip the first argument as it's the binary name. - for (int i = 1; i < argc; i++) { - command_line_arguments.push_back(Utf8FromUtf16(argv[i])); - } - - ::LocalFree(argv); - - return command_line_arguments; -} - -std::string Utf8FromUtf16(const wchar_t* utf16_string) { - if (utf16_string == nullptr) { - return std::string(); - } - unsigned int target_length = ::WideCharToMultiByte( - CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr) - -1; // remove the trailing null character - int input_length = (int)wcslen(utf16_string); - std::string utf8_string; - if (target_length == 0 || target_length > utf8_string.max_size()) { - return utf8_string; - } - utf8_string.resize(target_length); - int converted_length = ::WideCharToMultiByte( - CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - input_length, utf8_string.data(), target_length, nullptr, nullptr); - if (converted_length == 0) { - return std::string(); - } - return utf8_string; -} diff --git a/sherpa-onnx/flutter/example/windows/runner/utils.h b/sherpa-onnx/flutter/example/windows/runner/utils.h deleted file mode 100644 index 3879d5475..000000000 --- a/sherpa-onnx/flutter/example/windows/runner/utils.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef RUNNER_UTILS_H_ -#define RUNNER_UTILS_H_ - -#include -#include - -// Creates a console for the process, and redirects stdout and stderr to -// it for both the runner and the Flutter library. -void CreateAndAttachConsole(); - -// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string -// encoded in UTF-8. Returns an empty std::string on failure. -std::string Utf8FromUtf16(const wchar_t* utf16_string); - -// Gets the command line arguments passed in as a std::vector, -// encoded in UTF-8. Returns an empty std::vector on failure. -std::vector GetCommandLineArguments(); - -#endif // RUNNER_UTILS_H_ diff --git a/sherpa-onnx/flutter/example/windows/runner/win32_window.cpp b/sherpa-onnx/flutter/example/windows/runner/win32_window.cpp deleted file mode 100644 index 60608d0fe..000000000 --- a/sherpa-onnx/flutter/example/windows/runner/win32_window.cpp +++ /dev/null @@ -1,288 +0,0 @@ -#include "win32_window.h" - -#include -#include - -#include "resource.h" - -namespace { - -/// Window attribute that enables dark mode window decorations. -/// -/// Redefined in case the developer's machine has a Windows SDK older than -/// version 10.0.22000.0. -/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute -#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE -#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 -#endif - -constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; - -/// Registry key for app theme preference. -/// -/// A value of 0 indicates apps should use dark mode. A non-zero or missing -/// value indicates apps should use light mode. -constexpr const wchar_t kGetPreferredBrightnessRegKey[] = - L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; -constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; - -// The number of Win32Window objects that currently exist. -static int g_active_window_count = 0; - -using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); - -// Scale helper to convert logical scaler values to physical using passed in -// scale factor -int Scale(int source, double scale_factor) { - return static_cast(source * scale_factor); -} - -// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. -// This API is only needed for PerMonitor V1 awareness mode. -void EnableFullDpiSupportIfAvailable(HWND hwnd) { - HMODULE user32_module = LoadLibraryA("User32.dll"); - if (!user32_module) { - return; - } - auto enable_non_client_dpi_scaling = - reinterpret_cast( - GetProcAddress(user32_module, "EnableNonClientDpiScaling")); - if (enable_non_client_dpi_scaling != nullptr) { - enable_non_client_dpi_scaling(hwnd); - } - FreeLibrary(user32_module); -} - -} // namespace - -// Manages the Win32Window's window class registration. -class WindowClassRegistrar { - public: - ~WindowClassRegistrar() = default; - - // Returns the singleton registrar instance. - static WindowClassRegistrar* GetInstance() { - if (!instance_) { - instance_ = new WindowClassRegistrar(); - } - return instance_; - } - - // Returns the name of the window class, registering the class if it hasn't - // previously been registered. - const wchar_t* GetWindowClass(); - - // Unregisters the window class. Should only be called if there are no - // instances of the window. - void UnregisterWindowClass(); - - private: - WindowClassRegistrar() = default; - - static WindowClassRegistrar* instance_; - - bool class_registered_ = false; -}; - -WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; - -const wchar_t* WindowClassRegistrar::GetWindowClass() { - if (!class_registered_) { - WNDCLASS window_class{}; - window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); - window_class.lpszClassName = kWindowClassName; - window_class.style = CS_HREDRAW | CS_VREDRAW; - window_class.cbClsExtra = 0; - window_class.cbWndExtra = 0; - window_class.hInstance = GetModuleHandle(nullptr); - window_class.hIcon = - LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); - window_class.hbrBackground = 0; - window_class.lpszMenuName = nullptr; - window_class.lpfnWndProc = Win32Window::WndProc; - RegisterClass(&window_class); - class_registered_ = true; - } - return kWindowClassName; -} - -void WindowClassRegistrar::UnregisterWindowClass() { - UnregisterClass(kWindowClassName, nullptr); - class_registered_ = false; -} - -Win32Window::Win32Window() { - ++g_active_window_count; -} - -Win32Window::~Win32Window() { - --g_active_window_count; - Destroy(); -} - -bool Win32Window::Create(const std::wstring& title, - const Point& origin, - const Size& size) { - Destroy(); - - const wchar_t* window_class = - WindowClassRegistrar::GetInstance()->GetWindowClass(); - - const POINT target_point = {static_cast(origin.x), - static_cast(origin.y)}; - HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); - UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); - double scale_factor = dpi / 96.0; - - HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW, - Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), - Scale(size.width, scale_factor), Scale(size.height, scale_factor), - nullptr, nullptr, GetModuleHandle(nullptr), this); - - if (!window) { - return false; - } - - UpdateTheme(window); - - return OnCreate(); -} - -bool Win32Window::Show() { - return ShowWindow(window_handle_, SW_SHOWNORMAL); -} - -// static -LRESULT CALLBACK Win32Window::WndProc(HWND const window, - UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept { - if (message == WM_NCCREATE) { - auto window_struct = reinterpret_cast(lparam); - SetWindowLongPtr(window, GWLP_USERDATA, - reinterpret_cast(window_struct->lpCreateParams)); - - auto that = static_cast(window_struct->lpCreateParams); - EnableFullDpiSupportIfAvailable(window); - that->window_handle_ = window; - } else if (Win32Window* that = GetThisFromHandle(window)) { - return that->MessageHandler(window, message, wparam, lparam); - } - - return DefWindowProc(window, message, wparam, lparam); -} - -LRESULT -Win32Window::MessageHandler(HWND hwnd, - UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept { - switch (message) { - case WM_DESTROY: - window_handle_ = nullptr; - Destroy(); - if (quit_on_close_) { - PostQuitMessage(0); - } - return 0; - - case WM_DPICHANGED: { - auto newRectSize = reinterpret_cast(lparam); - LONG newWidth = newRectSize->right - newRectSize->left; - LONG newHeight = newRectSize->bottom - newRectSize->top; - - SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, - newHeight, SWP_NOZORDER | SWP_NOACTIVATE); - - return 0; - } - case WM_SIZE: { - RECT rect = GetClientArea(); - if (child_content_ != nullptr) { - // Size and position the child window. - MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, - rect.bottom - rect.top, TRUE); - } - return 0; - } - - case WM_ACTIVATE: - if (child_content_ != nullptr) { - SetFocus(child_content_); - } - return 0; - - case WM_DWMCOLORIZATIONCOLORCHANGED: - UpdateTheme(hwnd); - return 0; - } - - return DefWindowProc(window_handle_, message, wparam, lparam); -} - -void Win32Window::Destroy() { - OnDestroy(); - - if (window_handle_) { - DestroyWindow(window_handle_); - window_handle_ = nullptr; - } - if (g_active_window_count == 0) { - WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); - } -} - -Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { - return reinterpret_cast( - GetWindowLongPtr(window, GWLP_USERDATA)); -} - -void Win32Window::SetChildContent(HWND content) { - child_content_ = content; - SetParent(content, window_handle_); - RECT frame = GetClientArea(); - - MoveWindow(content, frame.left, frame.top, frame.right - frame.left, - frame.bottom - frame.top, true); - - SetFocus(child_content_); -} - -RECT Win32Window::GetClientArea() { - RECT frame; - GetClientRect(window_handle_, &frame); - return frame; -} - -HWND Win32Window::GetHandle() { - return window_handle_; -} - -void Win32Window::SetQuitOnClose(bool quit_on_close) { - quit_on_close_ = quit_on_close; -} - -bool Win32Window::OnCreate() { - // No-op; provided for subclasses. - return true; -} - -void Win32Window::OnDestroy() { - // No-op; provided for subclasses. -} - -void Win32Window::UpdateTheme(HWND const window) { - DWORD light_mode; - DWORD light_mode_size = sizeof(light_mode); - LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, - kGetPreferredBrightnessRegValue, - RRF_RT_REG_DWORD, nullptr, &light_mode, - &light_mode_size); - - if (result == ERROR_SUCCESS) { - BOOL enable_dark_mode = light_mode == 0; - DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, - &enable_dark_mode, sizeof(enable_dark_mode)); - } -} diff --git a/sherpa-onnx/flutter/example/windows/runner/win32_window.h b/sherpa-onnx/flutter/example/windows/runner/win32_window.h deleted file mode 100644 index e901dde68..000000000 --- a/sherpa-onnx/flutter/example/windows/runner/win32_window.h +++ /dev/null @@ -1,102 +0,0 @@ -#ifndef RUNNER_WIN32_WINDOW_H_ -#define RUNNER_WIN32_WINDOW_H_ - -#include - -#include -#include -#include - -// A class abstraction for a high DPI-aware Win32 Window. Intended to be -// inherited from by classes that wish to specialize with custom -// rendering and input handling -class Win32Window { - public: - struct Point { - unsigned int x; - unsigned int y; - Point(unsigned int x, unsigned int y) : x(x), y(y) {} - }; - - struct Size { - unsigned int width; - unsigned int height; - Size(unsigned int width, unsigned int height) - : width(width), height(height) {} - }; - - Win32Window(); - virtual ~Win32Window(); - - // Creates a win32 window with |title| that is positioned and sized using - // |origin| and |size|. New windows are created on the default monitor. Window - // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size this function will scale the inputted width and height as - // as appropriate for the default monitor. The window is invisible until - // |Show| is called. Returns true if the window was created successfully. - bool Create(const std::wstring& title, const Point& origin, const Size& size); - - // Show the current window. Returns true if the window was successfully shown. - bool Show(); - - // Release OS resources associated with window. - void Destroy(); - - // Inserts |content| into the window tree. - void SetChildContent(HWND content); - - // Returns the backing Window handle to enable clients to set icon and other - // window properties. Returns nullptr if the window has been destroyed. - HWND GetHandle(); - - // If true, closing this window will quit the application. - void SetQuitOnClose(bool quit_on_close); - - // Return a RECT representing the bounds of the current client area. - RECT GetClientArea(); - - protected: - // Processes and route salient window messages for mouse handling, - // size change and DPI. Delegates handling of these to member overloads that - // inheriting classes can handle. - virtual LRESULT MessageHandler(HWND window, - UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept; - - // Called when CreateAndShow is called, allowing subclass window-related - // setup. Subclasses should return false if setup fails. - virtual bool OnCreate(); - - // Called when Destroy is called. - virtual void OnDestroy(); - - private: - friend class WindowClassRegistrar; - - // OS callback called by message pump. Handles the WM_NCCREATE message which - // is passed when the non-client area is being created and enables automatic - // non-client DPI scaling so that the non-client area automatically - // responds to changes in DPI. All other messages are handled by - // MessageHandler. - static LRESULT CALLBACK WndProc(HWND const window, - UINT const message, - WPARAM const wparam, - LPARAM const lparam) noexcept; - - // Retrieves a class instance pointer for |window| - static Win32Window* GetThisFromHandle(HWND const window) noexcept; - - // Update the window frame's theme to match the system theme. - static void UpdateTheme(HWND const window); - - bool quit_on_close_ = false; - - // window handle for top level window. - HWND window_handle_ = nullptr; - - // window handle for hosted content. - HWND child_content_ = nullptr; -}; - -#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/sherpa-onnx/flutter/lib/sherpa_onnx.dart b/sherpa-onnx/flutter/lib/sherpa_onnx.dart deleted file mode 100644 index 0a2445619..000000000 --- a/sherpa-onnx/flutter/lib/sherpa_onnx.dart +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'dart:io'; -import 'dart:ffi'; - -export 'src/feature_config.dart'; -export 'src/offline_recognizer.dart'; -export 'src/offline_stream.dart'; -export 'src/online_recognizer.dart'; -export 'src/online_stream.dart'; -export 'src/speaker_identification.dart'; -export 'src/tts.dart'; -export 'src/vad.dart'; -export 'src/wave_reader.dart'; -export 'src/wave_writer.dart'; - -import 'src/sherpa_onnx_bindings.dart'; - -String? _path; - -final DynamicLibrary _dylib = () { - if (Platform.isIOS) { - throw UnsupportedError('Unknown platform: ${Platform.operatingSystem}'); - } - if (Platform.isMacOS) { - if (_path == null) { - return DynamicLibrary.open('libsherpa-onnx-c-api.dylib'); - } else { - return DynamicLibrary.open('$_path/libsherpa-onnx-c-api.dylib'); - } - } - - if (Platform.isAndroid || Platform.isLinux) { - if (_path == null) { - return DynamicLibrary.open('libsherpa-onnx-c-api.so'); - } else { - return DynamicLibrary.open('$_path/libsherpa-onnx-c-api.so'); - } - } - - if (Platform.isWindows) { - if (_path == null) { - return DynamicLibrary.open('sherpa-onnx-c-api.dll'); - } else { - return DynamicLibrary.open('$_path\\sherpa-onnx-c-api.dll'); - } - } - - throw UnsupportedError('Unknown platform: ${Platform.operatingSystem}'); -}(); - -void initBindings([String? p]) { - _path ??= p; - SherpaOnnxBindings.init(_dylib); -} diff --git a/sherpa-onnx/flutter/lib/src/feature_config.dart b/sherpa-onnx/flutter/lib/src/feature_config.dart deleted file mode 100644 index 2af7f2cc4..000000000 --- a/sherpa-onnx/flutter/lib/src/feature_config.dart +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation - -class FeatureConfig { - const FeatureConfig({this.sampleRate = 16000, this.featureDim = 80}); - - @override - String toString() { - return 'FeatureConfig(sampleRate: $sampleRate, featureDim: $featureDim)'; - } - - final int sampleRate; - final int featureDim; -} diff --git a/sherpa-onnx/flutter/lib/src/offline_recognizer.dart b/sherpa-onnx/flutter/lib/src/offline_recognizer.dart deleted file mode 100644 index b5619e3e0..000000000 --- a/sherpa-onnx/flutter/lib/src/offline_recognizer.dart +++ /dev/null @@ -1,302 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'dart:convert'; -import 'dart:ffi'; - -import 'package:ffi/ffi.dart'; - -import './feature_config.dart'; -import './offline_stream.dart'; -import './sherpa_onnx_bindings.dart'; - -class OfflineTransducerModelConfig { - const OfflineTransducerModelConfig({ - this.encoder = '', - this.decoder = '', - this.joiner = '', - }); - - @override - String toString() { - return 'OfflineTransducerModelConfig(encoder: $encoder, decoder: $decoder, joiner: $joiner)'; - } - - final String encoder; - final String decoder; - final String joiner; -} - -class OfflineParaformerModelConfig { - const OfflineParaformerModelConfig({this.model = ''}); - - @override - String toString() { - return 'OfflineParaformerModelConfig(model: $model)'; - } - - final String model; -} - -class OfflineNemoEncDecCtcModelConfig { - const OfflineNemoEncDecCtcModelConfig({this.model = ''}); - - @override - String toString() { - return 'OfflineNemoEncDecCtcModelConfig(model: $model)'; - } - - final String model; -} - -class OfflineWhisperModelConfig { - const OfflineWhisperModelConfig( - {this.encoder = '', - this.decoder = '', - this.language = '', - this.task = '', - this.tailPaddings = -1}); - - @override - String toString() { - return 'OfflineWhisperModelConfig(encoder: $encoder, decoder: $decoder, language: $language, task: $task, tailPaddings: $tailPaddings)'; - } - - final String encoder; - final String decoder; - final String language; - final String task; - final int tailPaddings; -} - -class OfflineTdnnModelConfig { - const OfflineTdnnModelConfig({this.model = ''}); - - @override - String toString() { - return 'OfflineTdnnModelConfig(model: $model)'; - } - - final String model; -} - -class OfflineLMConfig { - const OfflineLMConfig({this.model = '', this.scale = 1.0}); - - @override - String toString() { - return 'OfflineLMConfig(model: $model, scale: $scale)'; - } - - final String model; - final double scale; -} - -class OfflineModelConfig { - const OfflineModelConfig({ - this.transducer = const OfflineTransducerModelConfig(), - this.paraformer = const OfflineParaformerModelConfig(), - this.nemoCtc = const OfflineNemoEncDecCtcModelConfig(), - this.whisper = const OfflineWhisperModelConfig(), - this.tdnn = const OfflineTdnnModelConfig(), - required this.tokens, - this.numThreads = 1, - this.debug = true, - this.provider = 'cpu', - this.modelType = '', - this.modelingUnit = '', - this.bpeVocab = '', - this.telespeechCtc = '', - }); - - @override - String toString() { - return 'OfflineModelConfig(transducer: $transducer, paraformer: $paraformer, nemoCtc: $nemoCtc, whisper: $whisper, tdnn: $tdnn, tokens: $tokens, numThreads: $numThreads, debug: $debug, provider: $provider, modelType: $modelType, modelingUnit: $modelingUnit, bpeVocab: $bpeVocab, telespeechCtc: $telespeechCtc)'; - } - - final OfflineTransducerModelConfig transducer; - final OfflineParaformerModelConfig paraformer; - final OfflineNemoEncDecCtcModelConfig nemoCtc; - final OfflineWhisperModelConfig whisper; - final OfflineTdnnModelConfig tdnn; - - final String tokens; - final int numThreads; - final bool debug; - final String provider; - final String modelType; - final String modelingUnit; - final String bpeVocab; - final String telespeechCtc; -} - -class OfflineRecognizerConfig { - const OfflineRecognizerConfig({ - this.feat = const FeatureConfig(), - required this.model, - this.lm = const OfflineLMConfig(), - this.decodingMethod = 'greedy_search', - this.maxActivePaths = 4, - this.hotwordsFile = '', - this.hotwordsScore = 1.5, - this.ruleFsts = '', - this.ruleFars = '', - }); - - @override - String toString() { - return 'OfflineRecognizerConfig(feat: $feat, model: $model, lm: $lm, decodingMethod: $decodingMethod, maxActivePaths: $maxActivePaths, hotwordsFile: $hotwordsFile, hotwordsScore: $hotwordsScore, ruleFsts: $ruleFsts, ruleFars: $ruleFars)'; - } - - final FeatureConfig feat; - final OfflineModelConfig model; - final OfflineLMConfig lm; - final String decodingMethod; - - final int maxActivePaths; - - final String hotwordsFile; - - final double hotwordsScore; - - final String ruleFsts; - final String ruleFars; -} - -class OfflineRecognizerResult { - OfflineRecognizerResult( - {required this.text, required this.tokens, required this.timestamps}); - - @override - String toString() { - return 'OfflineRecognizerResult(text: $text, tokens: $tokens, timestamps: $timestamps)'; - } - - final String text; - final List tokens; - final List timestamps; -} - -class OfflineRecognizer { - OfflineRecognizer._({required this.ptr, required this.config}); - - void free() { - SherpaOnnxBindings.destroyOfflineRecognizer?.call(ptr); - ptr = nullptr; - } - - /// The user is responsible to call the OfflineRecognizer.free() - /// method of the returned instance to avoid memory leak. - factory OfflineRecognizer(OfflineRecognizerConfig config) { - final c = calloc(); - - c.ref.feat.sampleRate = config.feat.sampleRate; - c.ref.feat.featureDim = config.feat.featureDim; - - // transducer - c.ref.model.transducer.encoder = - config.model.transducer.encoder.toNativeUtf8(); - c.ref.model.transducer.decoder = - config.model.transducer.decoder.toNativeUtf8(); - c.ref.model.transducer.joiner = - config.model.transducer.joiner.toNativeUtf8(); - - // paraformer - c.ref.model.paraformer.model = config.model.paraformer.model.toNativeUtf8(); - - // nemoCtc - c.ref.model.nemoCtc.model = config.model.nemoCtc.model.toNativeUtf8(); - - // whisper - c.ref.model.whisper.encoder = config.model.whisper.encoder.toNativeUtf8(); - - c.ref.model.whisper.decoder = config.model.whisper.decoder.toNativeUtf8(); - - c.ref.model.whisper.language = config.model.whisper.language.toNativeUtf8(); - - c.ref.model.whisper.task = config.model.whisper.task.toNativeUtf8(); - - c.ref.model.whisper.tailPaddings = config.model.whisper.tailPaddings; - - c.ref.model.tdnn.model = config.model.tdnn.model.toNativeUtf8(); - - c.ref.model.tokens = config.model.tokens.toNativeUtf8(); - - c.ref.model.numThreads = config.model.numThreads; - c.ref.model.debug = config.model.debug ? 1 : 0; - c.ref.model.provider = config.model.provider.toNativeUtf8(); - c.ref.model.modelType = config.model.modelType.toNativeUtf8(); - c.ref.model.modelingUnit = config.model.modelingUnit.toNativeUtf8(); - c.ref.model.bpeVocab = config.model.bpeVocab.toNativeUtf8(); - c.ref.model.telespeechCtc = config.model.telespeechCtc.toNativeUtf8(); - - c.ref.lm.model = config.lm.model.toNativeUtf8(); - c.ref.lm.scale = config.lm.scale; - - c.ref.decodingMethod = config.decodingMethod.toNativeUtf8(); - c.ref.maxActivePaths = config.maxActivePaths; - - c.ref.hotwordsFile = config.hotwordsFile.toNativeUtf8(); - c.ref.hotwordsScore = config.hotwordsScore; - - c.ref.ruleFsts = config.ruleFsts.toNativeUtf8(); - c.ref.ruleFars = config.ruleFars.toNativeUtf8(); - - final ptr = SherpaOnnxBindings.createOfflineRecognizer?.call(c) ?? nullptr; - - calloc.free(c.ref.ruleFars); - calloc.free(c.ref.ruleFsts); - calloc.free(c.ref.hotwordsFile); - calloc.free(c.ref.decodingMethod); - calloc.free(c.ref.lm.model); - calloc.free(c.ref.model.telespeechCtc); - calloc.free(c.ref.model.bpeVocab); - calloc.free(c.ref.model.modelingUnit); - calloc.free(c.ref.model.modelType); - calloc.free(c.ref.model.provider); - calloc.free(c.ref.model.tokens); - calloc.free(c.ref.model.tdnn.model); - calloc.free(c.ref.model.whisper.task); - calloc.free(c.ref.model.whisper.language); - calloc.free(c.ref.model.whisper.decoder); - calloc.free(c.ref.model.whisper.encoder); - calloc.free(c.ref.model.nemoCtc.model); - calloc.free(c.ref.model.paraformer.model); - calloc.free(c.ref.model.transducer.encoder); - calloc.free(c.ref.model.transducer.decoder); - calloc.free(c.ref.model.transducer.joiner); - calloc.free(c); - - return OfflineRecognizer._(ptr: ptr, config: config); - } - - /// The user has to invoke stream.free() on the returned instance - /// to avoid memory leak - OfflineStream createStream() { - final p = SherpaOnnxBindings.createOfflineStream?.call(ptr) ?? nullptr; - return OfflineStream(ptr: p); - } - - void decode(OfflineStream stream) { - SherpaOnnxBindings.decodeOfflineStream?.call(ptr, stream.ptr); - } - - OfflineRecognizerResult getResult(OfflineStream stream) { - final json = - SherpaOnnxBindings.getOfflineStreamResultAsJson?.call(stream.ptr) ?? - nullptr; - if (json == nullptr) { - return OfflineRecognizerResult(text: '', tokens: [], timestamps: []); - } - - final parsedJson = jsonDecode(json.toDartString()); - - SherpaOnnxBindings.destroyOfflineStreamResultJson?.call(json); - - return OfflineRecognizerResult( - text: parsedJson['text'], - tokens: List.from(parsedJson['tokens']), - timestamps: List.from(parsedJson['timestamps'])); - } - - Pointer ptr; - OfflineRecognizerConfig config; -} diff --git a/sherpa-onnx/flutter/lib/src/offline_stream.dart b/sherpa-onnx/flutter/lib/src/offline_stream.dart deleted file mode 100644 index 0b6f9c866..000000000 --- a/sherpa-onnx/flutter/lib/src/offline_stream.dart +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'dart:ffi'; -import 'dart:typed_data'; -import 'package:ffi/ffi.dart'; - -import './sherpa_onnx_bindings.dart'; - -class OfflineStream { - /// The user has to call OfflineStream.free() to avoid memory leak. - OfflineStream({required this.ptr}); - - void free() { - SherpaOnnxBindings.destroyOfflineStream?.call(ptr); - ptr = nullptr; - } - - /// If you have List data, then you can use - /// Float32List.fromList(data) to convert data to Float32List - /// - /// See - /// https://api.flutter.dev/flutter/dart-core/List-class.html - /// and - /// https://api.flutter.dev/flutter/dart-typed_data/Float32List-class.html - void acceptWaveform({required Float32List samples, required int sampleRate}) { - final n = samples.length; - final Pointer p = calloc(n); - - final pList = p.asTypedList(n); - pList.setAll(0, samples); - - SherpaOnnxBindings.acceptWaveformOffline?.call(ptr, sampleRate, p, n); - - calloc.free(p); - } - - Pointer ptr; -} diff --git a/sherpa-onnx/flutter/lib/src/online_recognizer.dart b/sherpa-onnx/flutter/lib/src/online_recognizer.dart deleted file mode 100644 index 49ca3d2e8..000000000 --- a/sherpa-onnx/flutter/lib/src/online_recognizer.dart +++ /dev/null @@ -1,297 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'dart:convert'; -import 'dart:ffi'; - -import 'package:ffi/ffi.dart'; - -import './feature_config.dart'; -import './online_stream.dart'; -import './sherpa_onnx_bindings.dart'; - -class OnlineTransducerModelConfig { - const OnlineTransducerModelConfig({ - this.encoder = '', - this.decoder = '', - this.joiner = '', - }); - - @override - String toString() { - return 'OnlineTransducerModelConfig(encoder: $encoder, decoder: $decoder, joiner: $joiner)'; - } - - final String encoder; - final String decoder; - final String joiner; -} - -class OnlineParaformerModelConfig { - const OnlineParaformerModelConfig({this.encoder = '', this.decoder = ''}); - - @override - String toString() { - return 'OnlineParaformerModelConfig(encoder: $encoder, decoder: $decoder)'; - } - - final String encoder; - final String decoder; -} - -class OnlineZipformer2CtcModelConfig { - const OnlineZipformer2CtcModelConfig({this.model = ''}); - - @override - String toString() { - return 'OnlineZipformer2CtcModelConfig(model: $model)'; - } - - final String model; -} - -class OnlineModelConfig { - const OnlineModelConfig({ - this.transducer = const OnlineTransducerModelConfig(), - this.paraformer = const OnlineParaformerModelConfig(), - this.zipformer2Ctc = const OnlineZipformer2CtcModelConfig(), - required this.tokens, - this.numThreads = 1, - this.provider = 'cpu', - this.debug = true, - this.modelType = '', - this.modelingUnit = '', - this.bpeVocab = '', - }); - - @override - String toString() { - return 'OnlineModelConfig(transducer: $transducer, paraformer: $paraformer, zipformer2Ctc: $zipformer2Ctc, tokens: $tokens, numThreads: $numThreads, provider: $provider, debug: $debug, modelType: $modelType, modelingUnit: $modelingUnit, bpeVocab: $bpeVocab)'; - } - - final OnlineTransducerModelConfig transducer; - final OnlineParaformerModelConfig paraformer; - final OnlineZipformer2CtcModelConfig zipformer2Ctc; - - final String tokens; - - final int numThreads; - - final String provider; - - final bool debug; - - final String modelType; - - final String modelingUnit; - - final String bpeVocab; -} - -class OnlineCtcFstDecoderConfig { - const OnlineCtcFstDecoderConfig({this.graph = '', this.maxActive = 3000}); - - @override - String toString() { - return 'OnlineCtcFstDecoderConfig(graph: $graph, maxActive: $maxActive)'; - } - - final String graph; - final int maxActive; -} - -class OnlineRecognizerConfig { - const OnlineRecognizerConfig({ - this.feat = const FeatureConfig(), - required this.model, - this.decodingMethod = 'greedy_search', - this.maxActivePaths = 4, - this.enableEndpoint = true, - this.rule1MinTrailingSilence = 2.4, - this.rule2MinTrailingSilence = 1.2, - this.rule3MinUtteranceLength = 20, - this.hotwordsFile = '', - this.hotwordsScore = 1.5, - this.ctcFstDecoderConfig = const OnlineCtcFstDecoderConfig(), - this.ruleFsts = '', - this.ruleFars = '', - }); - - @override - String toString() { - return 'OnlineRecognizerConfig(feat: $feat, model: $model, decodingMethod: $decodingMethod, maxActivePaths: $maxActivePaths, enableEndpoint: $enableEndpoint, rule1MinTrailingSilence: $rule1MinTrailingSilence, rule2MinTrailingSilence: $rule2MinTrailingSilence, rule3MinUtteranceLength: $rule3MinUtteranceLength, hotwordsFile: $hotwordsFile, hotwordsScore: $hotwordsScore, ctcFstDecoderConfig: $ctcFstDecoderConfig, ruleFsts: $ruleFsts, ruleFars: $ruleFars)'; - } - - final FeatureConfig feat; - final OnlineModelConfig model; - final String decodingMethod; - - final int maxActivePaths; - - final bool enableEndpoint; - - final double rule1MinTrailingSilence; - - final double rule2MinTrailingSilence; - - final double rule3MinUtteranceLength; - - final String hotwordsFile; - - final double hotwordsScore; - - final OnlineCtcFstDecoderConfig ctcFstDecoderConfig; - final String ruleFsts; - final String ruleFars; -} - -class OnlineRecognizerResult { - OnlineRecognizerResult( - {required this.text, required this.tokens, required this.timestamps}); - - @override - String toString() { - return 'OnlineRecognizerResult(text: $text, tokens: $tokens, timestamps: $timestamps)'; - } - - final String text; - final List tokens; - final List timestamps; -} - -class OnlineRecognizer { - OnlineRecognizer._({required this.ptr, required this.config}); - - /// The user is responsible to call the OnlineRecognizer.free() - /// method of the returned instance to avoid memory leak. - factory OnlineRecognizer(OnlineRecognizerConfig config) { - final c = calloc(); - c.ref.feat.sampleRate = config.feat.sampleRate; - c.ref.feat.featureDim = config.feat.featureDim; - - // transducer - c.ref.model.transducer.encoder = - config.model.transducer.encoder.toNativeUtf8(); - c.ref.model.transducer.decoder = - config.model.transducer.decoder.toNativeUtf8(); - c.ref.model.transducer.joiner = - config.model.transducer.joiner.toNativeUtf8(); - - // paraformer - c.ref.model.paraformer.encoder = - config.model.paraformer.encoder.toNativeUtf8(); - c.ref.model.paraformer.decoder = - config.model.paraformer.decoder.toNativeUtf8(); - - // zipformer2Ctc - c.ref.model.zipformer2Ctc.model = - config.model.zipformer2Ctc.model.toNativeUtf8(); - - c.ref.model.tokens = config.model.tokens.toNativeUtf8(); - c.ref.model.numThreads = config.model.numThreads; - c.ref.model.provider = config.model.provider.toNativeUtf8(); - c.ref.model.debug = config.model.debug ? 1 : 0; - c.ref.model.modelType = config.model.modelType.toNativeUtf8(); - c.ref.model.modelingUnit = config.model.modelingUnit.toNativeUtf8(); - c.ref.model.bpeVocab = config.model.bpeVocab.toNativeUtf8(); - - c.ref.decodingMethod = config.decodingMethod.toNativeUtf8(); - c.ref.maxActivePaths = config.maxActivePaths; - c.ref.enableEndpoint = config.enableEndpoint ? 1 : 0; - c.ref.rule1MinTrailingSilence = config.rule1MinTrailingSilence; - c.ref.rule2MinTrailingSilence = config.rule2MinTrailingSilence; - c.ref.rule3MinUtteranceLength = config.rule3MinUtteranceLength; - c.ref.hotwordsFile = config.hotwordsFile.toNativeUtf8(); - c.ref.hotwordsScore = config.hotwordsScore; - - c.ref.ctcFstDecoderConfig.graph = - config.ctcFstDecoderConfig.graph.toNativeUtf8(); - c.ref.ctcFstDecoderConfig.maxActive = config.ctcFstDecoderConfig.maxActive; - c.ref.ruleFsts = config.ruleFsts.toNativeUtf8(); - c.ref.ruleFars = config.ruleFars.toNativeUtf8(); - - final ptr = SherpaOnnxBindings.createOnlineRecognizer?.call(c) ?? nullptr; - - calloc.free(c.ref.ruleFars); - calloc.free(c.ref.ruleFsts); - calloc.free(c.ref.ctcFstDecoderConfig.graph); - calloc.free(c.ref.hotwordsFile); - calloc.free(c.ref.decodingMethod); - calloc.free(c.ref.model.bpeVocab); - calloc.free(c.ref.model.modelingUnit); - calloc.free(c.ref.model.modelType); - calloc.free(c.ref.model.provider); - calloc.free(c.ref.model.tokens); - calloc.free(c.ref.model.zipformer2Ctc.model); - calloc.free(c.ref.model.paraformer.encoder); - calloc.free(c.ref.model.paraformer.decoder); - - calloc.free(c.ref.model.transducer.encoder); - calloc.free(c.ref.model.transducer.decoder); - calloc.free(c.ref.model.transducer.joiner); - calloc.free(c); - - return OnlineRecognizer._(ptr: ptr, config: config); - } - - void free() { - SherpaOnnxBindings.destroyOnlineRecognizer?.call(ptr); - ptr = nullptr; - } - - /// The user has to invoke stream.free() on the returned instance - /// to avoid memory leak - OnlineStream createStream({String hotwords = ''}) { - if (hotwords == '') { - final p = SherpaOnnxBindings.createOnlineStream?.call(ptr) ?? nullptr; - return OnlineStream(ptr: p); - } - - final utf8 = hotwords.toNativeUtf8(); - final p = - SherpaOnnxBindings.createOnlineStreamWithHotwords?.call(ptr, utf8) ?? - nullptr; - calloc.free(utf8); - return OnlineStream(ptr: p); - } - - bool isReady(OnlineStream stream) { - int ready = - SherpaOnnxBindings.isOnlineStreamReady?.call(ptr, stream.ptr) ?? 0; - - return ready == 1; - } - - OnlineRecognizerResult getResult(OnlineStream stream) { - final json = - SherpaOnnxBindings.getOnlineStreamResultAsJson?.call(ptr, stream.ptr) ?? - nullptr; - if (json == nullptr) { - return OnlineRecognizerResult(text: '', tokens: [], timestamps: []); - } - - final parsedJson = jsonDecode(json.toDartString()); - - SherpaOnnxBindings.destroyOnlineStreamResultJson?.call(json); - - return OnlineRecognizerResult( - text: parsedJson['text'], - tokens: List.from(parsedJson['tokens']), - timestamps: List.from(parsedJson['timestamps'])); - } - - void reset(OnlineStream stream) { - SherpaOnnxBindings.reset?.call(ptr, stream.ptr); - } - - void decode(OnlineStream stream) { - SherpaOnnxBindings.decodeOnlineStream?.call(ptr, stream.ptr); - } - - bool isEndpoint(OnlineStream stream) { - int yes = SherpaOnnxBindings.isEndpoint?.call(ptr, stream.ptr) ?? 0; - - return yes == 1; - } - - Pointer ptr; - OnlineRecognizerConfig config; -} diff --git a/sherpa-onnx/flutter/lib/src/online_stream.dart b/sherpa-onnx/flutter/lib/src/online_stream.dart deleted file mode 100644 index e1f61e15c..000000000 --- a/sherpa-onnx/flutter/lib/src/online_stream.dart +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'dart:ffi'; -import 'dart:typed_data'; -import 'package:ffi/ffi.dart'; - -import './sherpa_onnx_bindings.dart'; - -class OnlineStream { - /// The user has to call OnlineStream.free() to avoid memory leak. - OnlineStream({required this.ptr}); - - void free() { - SherpaOnnxBindings.destroyOnlineStream?.call(ptr); - ptr = nullptr; - } - - /// If you have List data, then you can use - /// Float32List.fromList(data) to convert data to Float32List - /// - /// See - /// https://api.flutter.dev/flutter/dart-core/List-class.html - /// and - /// https://api.flutter.dev/flutter/dart-typed_data/Float32List-class.html - void acceptWaveform({required Float32List samples, required int sampleRate}) { - final n = samples.length; - final Pointer p = calloc(n); - - final pList = p.asTypedList(n); - pList.setAll(0, samples); - - SherpaOnnxBindings.onlineStreamAcceptWaveform?.call(ptr, sampleRate, p, n); - - calloc.free(p); - } - - void inputFinished() { - SherpaOnnxBindings.onlineStreamInputFinished?.call(ptr); - } - - Pointer ptr; -} diff --git a/sherpa-onnx/flutter/lib/src/sherpa_onnx_bindings.dart b/sherpa-onnx/flutter/lib/src/sherpa_onnx_bindings.dart deleted file mode 100644 index ac7a241ee..000000000 --- a/sherpa-onnx/flutter/lib/src/sherpa_onnx_bindings.dart +++ /dev/null @@ -1,1231 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'dart:ffi'; -import 'package:ffi/ffi.dart'; - -final class SherpaOnnxOfflineTtsVitsModelConfig extends Struct { - external Pointer model; - external Pointer lexicon; - external Pointer tokens; - external Pointer dataDir; - - @Float() - external double noiseScale; - - @Float() - external double noiseScaleW; - - @Float() - external double lengthScale; - - external Pointer dictDir; -} - -final class SherpaOnnxOfflineTtsModelConfig extends Struct { - external SherpaOnnxOfflineTtsVitsModelConfig vits; - @Int32() - external int numThreads; - - @Int32() - external int debug; - - external Pointer provider; -} - -final class SherpaOnnxOfflineTtsConfig extends Struct { - external SherpaOnnxOfflineTtsModelConfig model; - external Pointer ruleFsts; - - @Int32() - external int maxNumSenetences; - - external Pointer ruleFars; -} - -final class SherpaOnnxGeneratedAudio extends Struct { - external Pointer samples; - - @Int32() - external int n; - - @Int32() - external int sampleRate; -} - -final class SherpaOnnxFeatureConfig extends Struct { - @Int32() - external int sampleRate; - - @Int32() - external int featureDim; -} - -final class SherpaOnnxOfflineTransducerModelConfig extends Struct { - external Pointer encoder; - external Pointer decoder; - external Pointer joiner; -} - -final class SherpaOnnxOfflineParaformerModelConfig extends Struct { - external Pointer model; -} - -final class SherpaOnnxOfflineNemoEncDecCtcModelConfig extends Struct { - external Pointer model; -} - -final class SherpaOnnxOfflineWhisperModelConfig extends Struct { - external Pointer encoder; - external Pointer decoder; - external Pointer language; - external Pointer task; - - @Int32() - external int tailPaddings; -} - -final class SherpaOnnxOfflineTdnnModelConfig extends Struct { - external Pointer model; -} - -final class SherpaOnnxOfflineLMConfig extends Struct { - external Pointer model; - - @Float() - external double scale; -} - -final class SherpaOnnxOfflineModelConfig extends Struct { - external SherpaOnnxOfflineTransducerModelConfig transducer; - external SherpaOnnxOfflineParaformerModelConfig paraformer; - external SherpaOnnxOfflineNemoEncDecCtcModelConfig nemoCtc; - external SherpaOnnxOfflineWhisperModelConfig whisper; - external SherpaOnnxOfflineTdnnModelConfig tdnn; - - external Pointer tokens; - - @Int32() - external int numThreads; - - @Int32() - external int debug; - - external Pointer provider; - - external Pointer modelType; - external Pointer modelingUnit; - external Pointer bpeVocab; - external Pointer telespeechCtc; -} - -final class SherpaOnnxOfflineRecognizerConfig extends Struct { - external SherpaOnnxFeatureConfig feat; - external SherpaOnnxOfflineModelConfig model; - external SherpaOnnxOfflineLMConfig lm; - external Pointer decodingMethod; - - @Int32() - external int maxActivePaths; - - external Pointer hotwordsFile; - - @Float() - external double hotwordsScore; - - external Pointer ruleFsts; - external Pointer ruleFars; -} - -final class SherpaOnnxOnlineTransducerModelConfig extends Struct { - external Pointer encoder; - external Pointer decoder; - external Pointer joiner; -} - -final class SherpaOnnxOnlineParaformerModelConfig extends Struct { - external Pointer encoder; - external Pointer decoder; -} - -final class SherpaOnnxOnlineZipformer2CtcModelConfig extends Struct { - external Pointer model; -} - -final class SherpaOnnxOnlineModelConfig extends Struct { - external SherpaOnnxOnlineTransducerModelConfig transducer; - external SherpaOnnxOnlineParaformerModelConfig paraformer; - external SherpaOnnxOnlineZipformer2CtcModelConfig zipformer2Ctc; - - external Pointer tokens; - - @Int32() - external int numThreads; - - external Pointer provider; - - @Int32() - external int debug; - - external Pointer modelType; - - external Pointer modelingUnit; - - external Pointer bpeVocab; -} - -final class SherpaOnnxOnlineCtcFstDecoderConfig extends Struct { - external Pointer graph; - - @Int32() - external int maxActive; -} - -final class SherpaOnnxOnlineRecognizerConfig extends Struct { - external SherpaOnnxFeatureConfig feat; - external SherpaOnnxOnlineModelConfig model; - external Pointer decodingMethod; - - @Int32() - external int maxActivePaths; - - @Int32() - external int enableEndpoint; - - @Float() - external double rule1MinTrailingSilence; - - @Float() - external double rule2MinTrailingSilence; - - @Float() - external double rule3MinUtteranceLength; - - external Pointer hotwordsFile; - - @Float() - external double hotwordsScore; - - external SherpaOnnxOnlineCtcFstDecoderConfig ctcFstDecoderConfig; - - external Pointer ruleFsts; - external Pointer ruleFars; -} - -final class SherpaOnnxSileroVadModelConfig extends Struct { - external Pointer model; - - @Float() - external double threshold; - - @Float() - external double minSilenceDuration; - - @Float() - external double minSpeechDuration; - - @Int32() - external int windowSize; -} - -final class SherpaOnnxVadModelConfig extends Struct { - external SherpaOnnxSileroVadModelConfig sileroVad; - - @Int32() - external int sampleRate; - - @Int32() - external int numThreads; - - external Pointer provider; - - @Int32() - external int debug; -} - -final class SherpaOnnxSpeechSegment extends Struct { - @Int32() - external int start; - - external Pointer samples; - - @Int32() - external int n; -} - -final class SherpaOnnxWave extends Struct { - external Pointer samples; - - @Int32() - external int sampleRate; - - @Int32() - external int numSamples; -} - -final class SherpaOnnxSpeakerEmbeddingExtractorConfig extends Struct { - external Pointer model; - - @Int32() - external int numThreads; - - @Int32() - external int debug; - - external Pointer provider; -} - -final class SherpaOnnxOfflineTts extends Opaque {} - -final class SherpaOnnxCircularBuffer extends Opaque {} - -final class SherpaOnnxVoiceActivityDetector extends Opaque {} - -final class SherpaOnnxOnlineStream extends Opaque {} - -final class SherpaOnnxOnlineRecognizer extends Opaque {} - -final class SherpaOnnxOfflineRecognizer extends Opaque {} - -final class SherpaOnnxOfflineStream extends Opaque {} - -final class SherpaOnnxSpeakerEmbeddingExtractor extends Opaque {} - -final class SherpaOnnxSpeakerEmbeddingManager extends Opaque {} - -typedef SherpaOnnxCreateOfflineTtsNative = Pointer - Function(Pointer); - -typedef SherpaOnnxCreateOfflineTts = SherpaOnnxCreateOfflineTtsNative; - -typedef SherpaOnnxDestroyOfflineTtsNative = Void Function( - Pointer); - -typedef SherpaOnnxDestroyOfflineTts = void Function( - Pointer); - -typedef SherpaOnnxOfflineTtsSampleRateNative = Int32 Function( - Pointer); - -typedef SherpaOnnxOfflineTtsSampleRate = int Function( - Pointer); - -typedef SherpaOnnxOfflineTtsNumSpeakersNative = Int32 Function( - Pointer); - -typedef SherpaOnnxOfflineTtsNumSpeakers = int Function( - Pointer); - -typedef SherpaOnnxOfflineTtsGenerateNative = Pointer - Function(Pointer, Pointer, Int32, Float); - -typedef SherpaOnnxOfflineTtsGenerate = Pointer - Function(Pointer, Pointer, int, double); - -typedef SherpaOnnxDestroyOfflineTtsGeneratedAudioNative = Void Function( - Pointer); - -typedef SherpaOnnxDestroyOfflineTtsGeneratedAudio = void Function( - Pointer); - -typedef SherpaOnnxGeneratedAudioCallbackNative = Int Function( - Pointer, Int32); - -typedef SherpaOnnxOfflineTtsGenerateWithCallbackNative - = Pointer Function( - Pointer, - Pointer, - Int32, - Float, - Pointer>); - -typedef SherpaOnnxOfflineTtsGenerateWithCallback - = Pointer Function( - Pointer, - Pointer, - int, - double, - Pointer>); - -typedef CreateOfflineRecognizerNative = Pointer - Function(Pointer); - -typedef CreateOfflineRecognizer = CreateOfflineRecognizerNative; - -typedef DestroyOfflineRecognizerNative = Void Function( - Pointer); - -typedef DestroyOfflineRecognizer = void Function( - Pointer); - -typedef CreateOfflineStreamNative = Pointer Function( - Pointer); - -typedef CreateOfflineStream = CreateOfflineStreamNative; - -typedef DestroyOfflineStreamNative = Void Function( - Pointer); - -typedef DestroyOfflineStream = void Function(Pointer); - -typedef AcceptWaveformOfflineNative = Void Function( - Pointer, Int32, Pointer, Int32); - -typedef AcceptWaveformOffline = void Function( - Pointer, int, Pointer, int); - -typedef DecodeOfflineStreamNative = Void Function( - Pointer, Pointer); - -typedef DecodeOfflineStream = void Function( - Pointer, Pointer); - -typedef GetOfflineStreamResultAsJsonNative = Pointer Function( - Pointer); - -typedef GetOfflineStreamResultAsJson = GetOfflineStreamResultAsJsonNative; - -typedef DestroyOfflineStreamResultJsonNative = Void Function(Pointer); - -typedef DestroyOfflineStreamResultJson = void Function(Pointer); - -typedef CreateOnlineRecognizerNative = Pointer - Function(Pointer); - -typedef CreateOnlineRecognizer = CreateOnlineRecognizerNative; - -typedef DestroyOnlineRecognizerNative = Void Function( - Pointer); - -typedef DestroyOnlineRecognizer = void Function( - Pointer); - -typedef CreateOnlineStreamNative = Pointer Function( - Pointer); - -typedef CreateOnlineStream = CreateOnlineStreamNative; - -typedef CreateOnlineStreamWithHotwordsNative = Pointer - Function(Pointer, Pointer); - -typedef CreateOnlineStreamWithHotwords = CreateOnlineStreamWithHotwordsNative; - -typedef IsOnlineStreamReadyNative = Int32 Function( - Pointer, Pointer); - -typedef IsOnlineStreamReady = int Function( - Pointer, Pointer); - -typedef DecodeOnlineStreamNative = Void Function( - Pointer, Pointer); - -typedef DecodeOnlineStream = void Function( - Pointer, Pointer); - -typedef GetOnlineStreamResultAsJsonNative = Pointer Function( - Pointer, Pointer); - -typedef GetOnlineStreamResultAsJson = GetOnlineStreamResultAsJsonNative; - -typedef ResetNative = Void Function( - Pointer, Pointer); - -typedef Reset = void Function( - Pointer, Pointer); - -typedef IsEndpointNative = Int32 Function( - Pointer, Pointer); - -typedef IsEndpoint = int Function( - Pointer, Pointer); - -typedef DestroyOnlineStreamResultJsonNative = Void Function(Pointer); - -typedef DestroyOnlineStreamResultJson = void Function(Pointer); - -typedef SherpaOnnxCreateVoiceActivityDetectorNative - = Pointer Function( - Pointer, Float); - -typedef SherpaOnnxCreateVoiceActivityDetector - = Pointer Function( - Pointer, double); - -typedef SherpaOnnxDestroyVoiceActivityDetectorNative = Void Function( - Pointer); - -typedef SherpaOnnxDestroyVoiceActivityDetector = void Function( - Pointer); - -typedef SherpaOnnxVoiceActivityDetectorAcceptWaveformNative = Void Function( - Pointer, Pointer, Int32); - -typedef SherpaOnnxVoiceActivityDetectorAcceptWaveform = void Function( - Pointer, Pointer, int); - -typedef SherpaOnnxVoiceActivityDetectorEmptyNative = Int32 Function( - Pointer); - -typedef SherpaOnnxVoiceActivityDetectorEmpty = int Function( - Pointer); - -typedef SherpaOnnxVoiceActivityDetectorDetectedNative = Int32 Function( - Pointer); - -typedef SherpaOnnxVoiceActivityDetectorDetected = int Function( - Pointer); - -typedef SherpaOnnxVoiceActivityDetectorPopNative = Void Function( - Pointer); - -typedef SherpaOnnxVoiceActivityDetectorPop = void Function( - Pointer); - -typedef SherpaOnnxVoiceActivityDetectorClearNative = Void Function( - Pointer); - -typedef SherpaOnnxVoiceActivityDetectorClear = void Function( - Pointer); - -typedef SherpaOnnxVoiceActivityDetectorResetNative = Void Function( - Pointer); - -typedef SherpaOnnxVoiceActivityDetectorReset = void Function( - Pointer); - -typedef SherpaOnnxVoiceActivityDetectorFrontNative - = Pointer Function( - Pointer); - -typedef SherpaOnnxVoiceActivityDetectorFront - = SherpaOnnxVoiceActivityDetectorFrontNative; - -typedef SherpaOnnxDestroySpeechSegmentNative = Void Function( - Pointer); - -typedef SherpaOnnxDestroySpeechSegment = void Function( - Pointer); - -typedef SherpaOnnxCreateCircularBufferNative = Pointer - Function(Int32); - -typedef SherpaOnnxCreateCircularBuffer = Pointer - Function(int); - -typedef SherpaOnnxDestroyCircularBufferNative = Void Function( - Pointer); - -typedef SherpaOnnxDestroyCircularBuffer = void Function( - Pointer); - -typedef SherpaOnnxCircularBufferPushNative = Void Function( - Pointer, Pointer, Int32); - -typedef SherpaOnnxCircularBufferPush = void Function( - Pointer, Pointer, int); - -typedef SherpaOnnxCircularBufferGetNative = Pointer Function( - Pointer, Int32, Int32); - -typedef SherpaOnnxCircularBufferGet = Pointer Function( - Pointer, int, int); - -typedef SherpaOnnxCircularBufferFreeNative = Void Function(Pointer); - -typedef SherpaOnnxCircularBufferFree = void Function(Pointer); - -typedef SherpaOnnxCircularBufferPopNative = Void Function( - Pointer, Int32); - -typedef SherpaOnnxCircularBufferPop = void Function( - Pointer, int); - -typedef SherpaOnnxCircularBufferSizeNative = Int32 Function( - Pointer); - -typedef SherpaOnnxCircularBufferSize = int Function( - Pointer); - -typedef SherpaOnnxCircularBufferHeadNative = Int32 Function( - Pointer); - -typedef SherpaOnnxCircularBufferHead = int Function( - Pointer); - -typedef SherpaOnnxCircularBufferResetNative = Void Function( - Pointer); - -typedef SherpaOnnxCircularBufferReset = void Function( - Pointer); - -typedef SherpaOnnxCreateSpeakerEmbeddingManagerNative - = Pointer Function(Int32); - -typedef SherpaOnnxCreateSpeakerEmbeddingManager - = Pointer Function(int); - -typedef SherpaOnnxDestroySpeakerEmbeddingManagerNative = Void Function( - Pointer); - -typedef SherpaOnnxDestroySpeakerEmbeddingManager = void Function( - Pointer); - -typedef SherpaOnnxSpeakerEmbeddingManagerAddNative = Int32 Function( - Pointer, Pointer, Pointer); - -typedef SherpaOnnxSpeakerEmbeddingManagerAdd = int Function( - Pointer, Pointer, Pointer); - -typedef SherpaOnnxSpeakerEmbeddingManagerAddListFlattenedNative - = Int32 Function(Pointer, Pointer, - Pointer, Int32); - -typedef SherpaOnnxSpeakerEmbeddingManagerAddListFlattened = int Function( - Pointer, - Pointer, - Pointer, - int); - -typedef SherpaOnnxSpeakerEmbeddingManagerRemoveNative = Int32 Function( - Pointer, Pointer); - -typedef SherpaOnnxSpeakerEmbeddingManagerRemove = int Function( - Pointer, Pointer); - -typedef SherpaOnnxSpeakerEmbeddingManagerContainsNative = Int32 Function( - Pointer, Pointer); - -typedef SherpaOnnxSpeakerEmbeddingManagerContains = int Function( - Pointer, Pointer); - -typedef SherpaOnnxSpeakerEmbeddingManagerSearchNative = Pointer Function( - Pointer, Pointer, Float); - -typedef SherpaOnnxSpeakerEmbeddingManagerSearch = Pointer Function( - Pointer, Pointer, double); - -typedef SherpaOnnxSpeakerEmbeddingManagerFreeSearchNative = Void Function( - Pointer); - -typedef SherpaOnnxSpeakerEmbeddingManagerFreeSearch = void Function( - Pointer); - -typedef SherpaOnnxSpeakerEmbeddingManagerNumSpeakersNative = Int32 Function( - Pointer); - -typedef SherpaOnnxSpeakerEmbeddingManagerNumSpeakers = int Function( - Pointer); - -typedef SherpaOnnxSpeakerEmbeddingManagerVerifyNative = Int32 Function( - Pointer, - Pointer, - Pointer, - Float); - -typedef SherpaOnnxSpeakerEmbeddingManagerVerify = int Function( - Pointer, - Pointer, - Pointer, - double); - -typedef SherpaOnnxSpeakerEmbeddingManagerGetAllSpeakersNative - = Pointer> Function( - Pointer); - -typedef SherpaOnnxSpeakerEmbeddingManagerGetAllSpeakers - = SherpaOnnxSpeakerEmbeddingManagerGetAllSpeakersNative; - -typedef SherpaOnnxSpeakerEmbeddingManagerFreeAllSpeakersNative = Void Function( - Pointer>); - -typedef SherpaOnnxSpeakerEmbeddingManagerFreeAllSpeakers = void Function( - Pointer>); - -typedef SherpaOnnxCreateSpeakerEmbeddingExtractorNative - = Pointer Function( - Pointer); - -typedef SherpaOnnxCreateSpeakerEmbeddingExtractor - = SherpaOnnxCreateSpeakerEmbeddingExtractorNative; - -typedef SherpaOnnxDestroySpeakerEmbeddingExtractorNative = Void Function( - Pointer); - -typedef SherpaOnnxDestroySpeakerEmbeddingExtractor = void Function( - Pointer); - -typedef SherpaOnnxSpeakerEmbeddingExtractorDimNative = Int32 Function( - Pointer); - -typedef SherpaOnnxSpeakerEmbeddingExtractorDim = int Function( - Pointer); - -typedef SherpaOnnxSpeakerEmbeddingExtractorCreateStreamNative - = Pointer Function( - Pointer); - -typedef SherpaOnnxSpeakerEmbeddingExtractorCreateStream - = SherpaOnnxSpeakerEmbeddingExtractorCreateStreamNative; - -typedef DestroyOnlineStreamNative = Void Function( - Pointer); - -typedef DestroyOnlineStream = void Function(Pointer); - -typedef OnlineStreamAcceptWaveformNative = Void Function( - Pointer, Int32, Pointer, Int32); - -typedef OnlineStreamAcceptWaveform = void Function( - Pointer, int, Pointer, int); - -typedef OnlineStreamInputFinishedNative = Void Function( - Pointer); - -typedef OnlineStreamInputFinished = void Function( - Pointer); - -typedef SherpaOnnxSpeakerEmbeddingExtractorIsReadyNative = Int32 Function( - Pointer, - Pointer); - -typedef SherpaOnnxSpeakerEmbeddingExtractorIsReady = int Function( - Pointer, - Pointer); - -typedef SherpaOnnxSpeakerEmbeddingExtractorComputeEmbeddingNative - = Pointer Function(Pointer, - Pointer); - -typedef SherpaOnnxSpeakerEmbeddingExtractorComputeEmbedding - = SherpaOnnxSpeakerEmbeddingExtractorComputeEmbeddingNative; - -typedef SherpaOnnxSpeakerEmbeddingExtractorDestroyEmbeddingNative = Void - Function(Pointer); - -typedef SherpaOnnxSpeakerEmbeddingExtractorDestroyEmbedding = void Function( - Pointer); - -typedef SherpaOnnxReadWaveNative = Pointer Function( - Pointer); - -typedef SherpaOnnxReadWave = SherpaOnnxReadWaveNative; - -typedef SherpaOnnxWriteWaveNative = Int32 Function( - Pointer, Int32, Int32, Pointer); - -typedef SherpaOnnxWriteWave = int Function( - Pointer, int, int, Pointer); - -typedef SherpaOnnxFreeWaveNative = Void Function(Pointer); - -typedef SherpaOnnxFreeWave = void Function(Pointer); - -class SherpaOnnxBindings { - static SherpaOnnxCreateOfflineTts? createOfflineTts; - static SherpaOnnxDestroyOfflineTts? destroyOfflineTts; - static SherpaOnnxOfflineTtsSampleRate? offlineTtsSampleRate; - static SherpaOnnxOfflineTtsNumSpeakers? offlineTtsNumSpeakers; - static SherpaOnnxOfflineTtsGenerate? offlineTtsGenerate; - static SherpaOnnxDestroyOfflineTtsGeneratedAudio? - destroyOfflineTtsGeneratedAudio; - static SherpaOnnxOfflineTtsGenerateWithCallback? - offlineTtsGenerateWithCallback; - - static CreateOfflineRecognizer? createOfflineRecognizer; - static DestroyOfflineRecognizer? destroyOfflineRecognizer; - static CreateOfflineStream? createOfflineStream; - static DestroyOfflineStream? destroyOfflineStream; - static AcceptWaveformOffline? acceptWaveformOffline; - static DecodeOfflineStream? decodeOfflineStream; - static GetOfflineStreamResultAsJson? getOfflineStreamResultAsJson; - static DestroyOfflineStreamResultJson? destroyOfflineStreamResultJson; - - static CreateOnlineRecognizer? createOnlineRecognizer; - - static DestroyOnlineRecognizer? destroyOnlineRecognizer; - - static CreateOnlineStream? createOnlineStream; - - static CreateOnlineStreamWithHotwords? createOnlineStreamWithHotwords; - - static IsOnlineStreamReady? isOnlineStreamReady; - - static DecodeOnlineStream? decodeOnlineStream; - - static GetOnlineStreamResultAsJson? getOnlineStreamResultAsJson; - - static Reset? reset; - - static IsEndpoint? isEndpoint; - - static DestroyOnlineStreamResultJson? destroyOnlineStreamResultJson; - - static SherpaOnnxCreateVoiceActivityDetector? createVoiceActivityDetector; - - static SherpaOnnxDestroyVoiceActivityDetector? destroyVoiceActivityDetector; - - static SherpaOnnxVoiceActivityDetectorAcceptWaveform? - voiceActivityDetectorAcceptWaveform; - - static SherpaOnnxVoiceActivityDetectorEmpty? voiceActivityDetectorEmpty; - - static SherpaOnnxVoiceActivityDetectorDetected? voiceActivityDetectorDetected; - - static SherpaOnnxVoiceActivityDetectorPop? voiceActivityDetectorPop; - - static SherpaOnnxVoiceActivityDetectorClear? voiceActivityDetectorClear; - - static SherpaOnnxVoiceActivityDetectorFront? voiceActivityDetectorFront; - - static SherpaOnnxDestroySpeechSegment? destroySpeechSegment; - - static SherpaOnnxVoiceActivityDetectorReset? voiceActivityDetectorReset; - - static SherpaOnnxCreateCircularBuffer? createCircularBuffer; - - static SherpaOnnxDestroyCircularBuffer? destroyCircularBuffer; - - static SherpaOnnxCircularBufferPush? circularBufferPush; - - static SherpaOnnxCircularBufferGet? circularBufferGet; - - static SherpaOnnxCircularBufferFree? circularBufferFree; - - static SherpaOnnxCircularBufferPop? circularBufferPop; - - static SherpaOnnxCircularBufferSize? circularBufferSize; - - static SherpaOnnxCircularBufferHead? circularBufferHead; - - static SherpaOnnxCircularBufferReset? circularBufferReset; - - static SherpaOnnxCreateSpeakerEmbeddingExtractor? - createSpeakerEmbeddingExtractor; - - static SherpaOnnxDestroySpeakerEmbeddingExtractor? - destroySpeakerEmbeddingExtractor; - - static SherpaOnnxSpeakerEmbeddingExtractorDim? speakerEmbeddingExtractorDim; - - static SherpaOnnxSpeakerEmbeddingExtractorCreateStream? - speakerEmbeddingExtractorCreateStream; - - static SherpaOnnxSpeakerEmbeddingExtractorComputeEmbedding? - speakerEmbeddingExtractorComputeEmbedding; - - static SherpaOnnxSpeakerEmbeddingExtractorDestroyEmbedding? - speakerEmbeddingExtractorDestroyEmbedding; - - static DestroyOnlineStream? destroyOnlineStream; - - static OnlineStreamAcceptWaveform? onlineStreamAcceptWaveform; - - static OnlineStreamInputFinished? onlineStreamInputFinished; - - static SherpaOnnxSpeakerEmbeddingExtractorIsReady? - speakerEmbeddingExtractorIsReady; - - static SherpaOnnxCreateSpeakerEmbeddingManager? createSpeakerEmbeddingManager; - - static SherpaOnnxDestroySpeakerEmbeddingManager? - destroySpeakerEmbeddingManager; - - static SherpaOnnxSpeakerEmbeddingManagerAdd? speakerEmbeddingManagerAdd; - - static SherpaOnnxSpeakerEmbeddingManagerAddListFlattened? - speakerEmbeddingManagerAddListFlattened; - - static SherpaOnnxSpeakerEmbeddingManagerRemove? speakerEmbeddingManagerRemove; - - static SherpaOnnxSpeakerEmbeddingManagerContains? - speakerEmbeddingManagerContains; - - static SherpaOnnxSpeakerEmbeddingManagerSearch? speakerEmbeddingManagerSearch; - - static SherpaOnnxSpeakerEmbeddingManagerFreeSearch? - speakerEmbeddingManagerFreeSearch; - - static SherpaOnnxSpeakerEmbeddingManagerNumSpeakers? - speakerEmbeddingManagerNumSpeakers; - - static SherpaOnnxSpeakerEmbeddingManagerVerify? speakerEmbeddingManagerVerify; - - static SherpaOnnxSpeakerEmbeddingManagerGetAllSpeakers? - speakerEmbeddingManagerGetAllSpeakers; - - static SherpaOnnxSpeakerEmbeddingManagerFreeAllSpeakers? - speakerEmbeddingManagerFreeAllSpeakers; - - static SherpaOnnxReadWave? readWave; - - static SherpaOnnxWriteWave? writeWave; - - static SherpaOnnxFreeWave? freeWave; - - static void init(DynamicLibrary dynamicLibrary) { - createOfflineTts ??= dynamicLibrary - .lookup>( - 'SherpaOnnxCreateOfflineTts') - .asFunction(); - - destroyOfflineTts ??= dynamicLibrary - .lookup>( - 'SherpaOnnxDestroyOfflineTts') - .asFunction(); - - offlineTtsSampleRate ??= dynamicLibrary - .lookup>( - 'SherpaOnnxOfflineTtsSampleRate') - .asFunction(); - - offlineTtsNumSpeakers ??= dynamicLibrary - .lookup>( - 'SherpaOnnxOfflineTtsNumSpeakers') - .asFunction(); - - offlineTtsGenerate ??= dynamicLibrary - .lookup>( - 'SherpaOnnxOfflineTtsGenerate') - .asFunction(); - - destroyOfflineTtsGeneratedAudio ??= dynamicLibrary - .lookup< - NativeFunction< - SherpaOnnxDestroyOfflineTtsGeneratedAudioNative>>( - 'SherpaOnnxDestroyOfflineTtsGeneratedAudio') - .asFunction(); - - offlineTtsGenerateWithCallback ??= dynamicLibrary - .lookup>( - 'SherpaOnnxOfflineTtsGenerateWithCallback') - .asFunction(); - - createOfflineRecognizer ??= dynamicLibrary - .lookup>( - 'CreateOfflineRecognizer') - .asFunction(); - - destroyOfflineRecognizer ??= dynamicLibrary - .lookup>( - 'DestroyOfflineRecognizer') - .asFunction(); - - createOfflineStream ??= dynamicLibrary - .lookup>( - 'CreateOfflineStream') - .asFunction(); - - destroyOfflineStream ??= dynamicLibrary - .lookup>( - 'DestroyOfflineStream') - .asFunction(); - - acceptWaveformOffline ??= dynamicLibrary - .lookup>( - 'AcceptWaveformOffline') - .asFunction(); - - decodeOfflineStream ??= dynamicLibrary - .lookup>( - 'DecodeOfflineStream') - .asFunction(); - - getOfflineStreamResultAsJson ??= dynamicLibrary - .lookup>( - 'GetOfflineStreamResultAsJson') - .asFunction(); - - destroyOfflineStreamResultJson ??= dynamicLibrary - .lookup>( - 'DestroyOfflineStreamResultJson') - .asFunction(); - - createOnlineRecognizer ??= dynamicLibrary - .lookup>( - 'CreateOnlineRecognizer') - .asFunction(); - - destroyOnlineRecognizer ??= dynamicLibrary - .lookup>( - 'DestroyOnlineRecognizer') - .asFunction(); - - createOnlineStream ??= dynamicLibrary - .lookup>('CreateOnlineStream') - .asFunction(); - - createOnlineStreamWithHotwords ??= dynamicLibrary - .lookup>( - 'CreateOnlineStreamWithHotwords') - .asFunction(); - - isOnlineStreamReady ??= dynamicLibrary - .lookup>( - 'IsOnlineStreamReady') - .asFunction(); - - decodeOnlineStream ??= dynamicLibrary - .lookup>('DecodeOnlineStream') - .asFunction(); - - getOnlineStreamResultAsJson ??= dynamicLibrary - .lookup>( - 'GetOnlineStreamResultAsJson') - .asFunction(); - - reset ??= dynamicLibrary - .lookup>('Reset') - .asFunction(); - - isEndpoint ??= dynamicLibrary - .lookup>('IsEndpoint') - .asFunction(); - - destroyOnlineStreamResultJson ??= dynamicLibrary - .lookup>( - 'DestroyOnlineStreamResultJson') - .asFunction(); - - createVoiceActivityDetector ??= dynamicLibrary - .lookup>( - 'SherpaOnnxCreateVoiceActivityDetector') - .asFunction(); - - destroyVoiceActivityDetector ??= dynamicLibrary - .lookup>( - 'SherpaOnnxDestroyVoiceActivityDetector') - .asFunction(); - - voiceActivityDetectorAcceptWaveform ??= dynamicLibrary - .lookup< - NativeFunction< - SherpaOnnxVoiceActivityDetectorAcceptWaveformNative>>( - 'SherpaOnnxVoiceActivityDetectorAcceptWaveform') - .asFunction(); - - voiceActivityDetectorEmpty ??= dynamicLibrary - .lookup>( - 'SherpaOnnxVoiceActivityDetectorEmpty') - .asFunction(); - - voiceActivityDetectorDetected ??= dynamicLibrary - .lookup>( - 'SherpaOnnxVoiceActivityDetectorDetected') - .asFunction(); - - voiceActivityDetectorPop ??= dynamicLibrary - .lookup>( - 'SherpaOnnxVoiceActivityDetectorPop') - .asFunction(); - - voiceActivityDetectorClear ??= dynamicLibrary - .lookup>( - 'SherpaOnnxVoiceActivityDetectorClear') - .asFunction(); - - voiceActivityDetectorFront ??= dynamicLibrary - .lookup>( - 'SherpaOnnxVoiceActivityDetectorFront') - .asFunction(); - - destroySpeechSegment ??= dynamicLibrary - .lookup>( - 'SherpaOnnxDestroySpeechSegment') - .asFunction(); - - voiceActivityDetectorReset ??= dynamicLibrary - .lookup>( - 'SherpaOnnxVoiceActivityDetectorReset') - .asFunction(); - - createCircularBuffer ??= dynamicLibrary - .lookup>( - 'SherpaOnnxCreateCircularBuffer') - .asFunction(); - - destroyCircularBuffer ??= dynamicLibrary - .lookup>( - 'SherpaOnnxDestroyCircularBuffer') - .asFunction(); - - circularBufferPush ??= dynamicLibrary - .lookup>( - 'SherpaOnnxCircularBufferPush') - .asFunction(); - - circularBufferGet ??= dynamicLibrary - .lookup>( - 'SherpaOnnxCircularBufferGet') - .asFunction(); - - circularBufferFree ??= dynamicLibrary - .lookup>( - 'SherpaOnnxCircularBufferFree') - .asFunction(); - - circularBufferPop ??= dynamicLibrary - .lookup>( - 'SherpaOnnxCircularBufferPop') - .asFunction(); - - circularBufferSize ??= dynamicLibrary - .lookup>( - 'SherpaOnnxCircularBufferSize') - .asFunction(); - - circularBufferHead ??= dynamicLibrary - .lookup>( - 'SherpaOnnxCircularBufferHead') - .asFunction(); - - circularBufferReset ??= dynamicLibrary - .lookup>( - 'SherpaOnnxCircularBufferReset') - .asFunction(); - - createSpeakerEmbeddingExtractor ??= dynamicLibrary - .lookup< - NativeFunction< - SherpaOnnxCreateSpeakerEmbeddingExtractorNative>>( - 'SherpaOnnxCreateSpeakerEmbeddingExtractor') - .asFunction(); - - destroySpeakerEmbeddingExtractor ??= dynamicLibrary - .lookup< - NativeFunction< - SherpaOnnxDestroySpeakerEmbeddingExtractorNative>>( - 'SherpaOnnxDestroySpeakerEmbeddingExtractor') - .asFunction(); - - speakerEmbeddingExtractorDim ??= dynamicLibrary - .lookup>( - 'SherpaOnnxSpeakerEmbeddingExtractorDim') - .asFunction(); - - speakerEmbeddingExtractorCreateStream ??= dynamicLibrary - .lookup< - NativeFunction< - SherpaOnnxSpeakerEmbeddingExtractorCreateStreamNative>>( - 'SherpaOnnxSpeakerEmbeddingExtractorCreateStream') - .asFunction(); - - speakerEmbeddingExtractorComputeEmbedding ??= dynamicLibrary - .lookup< - NativeFunction< - SherpaOnnxSpeakerEmbeddingExtractorComputeEmbeddingNative>>( - 'SherpaOnnxSpeakerEmbeddingExtractorComputeEmbedding') - .asFunction(); - - speakerEmbeddingExtractorDestroyEmbedding ??= dynamicLibrary - .lookup< - NativeFunction< - SherpaOnnxSpeakerEmbeddingExtractorDestroyEmbeddingNative>>( - 'SherpaOnnxSpeakerEmbeddingExtractorDestroyEmbedding') - .asFunction(); - - destroyOnlineStream ??= dynamicLibrary - .lookup>( - 'DestroyOnlineStream') - .asFunction(); - - onlineStreamAcceptWaveform ??= dynamicLibrary - .lookup>( - 'AcceptWaveform') - .asFunction(); - - onlineStreamInputFinished ??= dynamicLibrary - .lookup>( - 'InputFinished') - .asFunction(); - - speakerEmbeddingExtractorIsReady ??= dynamicLibrary - .lookup< - NativeFunction< - SherpaOnnxSpeakerEmbeddingExtractorIsReadyNative>>( - 'SherpaOnnxSpeakerEmbeddingExtractorIsReady') - .asFunction(); - - createSpeakerEmbeddingManager ??= dynamicLibrary - .lookup>( - 'SherpaOnnxCreateSpeakerEmbeddingManager') - .asFunction(); - - destroySpeakerEmbeddingManager ??= dynamicLibrary - .lookup>( - 'SherpaOnnxDestroySpeakerEmbeddingManager') - .asFunction(); - - speakerEmbeddingManagerAdd ??= dynamicLibrary - .lookup>( - 'SherpaOnnxSpeakerEmbeddingManagerAdd') - .asFunction(); - - speakerEmbeddingManagerAddListFlattened ??= dynamicLibrary - .lookup< - NativeFunction< - SherpaOnnxSpeakerEmbeddingManagerAddListFlattenedNative>>( - 'SherpaOnnxSpeakerEmbeddingManagerAddListFlattened') - .asFunction(); - - speakerEmbeddingManagerRemove ??= dynamicLibrary - .lookup>( - 'SherpaOnnxSpeakerEmbeddingManagerRemove') - .asFunction(); - - speakerEmbeddingManagerContains ??= dynamicLibrary - .lookup< - NativeFunction< - SherpaOnnxSpeakerEmbeddingManagerContainsNative>>( - 'SherpaOnnxSpeakerEmbeddingManagerContains') - .asFunction(); - - speakerEmbeddingManagerSearch ??= dynamicLibrary - .lookup>( - 'SherpaOnnxSpeakerEmbeddingManagerSearch') - .asFunction(); - - speakerEmbeddingManagerFreeSearch ??= dynamicLibrary - .lookup< - NativeFunction< - SherpaOnnxSpeakerEmbeddingManagerFreeSearchNative>>( - 'SherpaOnnxSpeakerEmbeddingManagerFreeSearch') - .asFunction(); - - speakerEmbeddingManagerNumSpeakers ??= dynamicLibrary - .lookup< - NativeFunction< - SherpaOnnxSpeakerEmbeddingManagerNumSpeakersNative>>( - 'SherpaOnnxSpeakerEmbeddingManagerNumSpeakers') - .asFunction(); - - speakerEmbeddingManagerVerify ??= dynamicLibrary - .lookup>( - 'SherpaOnnxSpeakerEmbeddingManagerVerify') - .asFunction(); - - speakerEmbeddingManagerGetAllSpeakers ??= dynamicLibrary - .lookup< - NativeFunction< - SherpaOnnxSpeakerEmbeddingManagerGetAllSpeakersNative>>( - 'SherpaOnnxSpeakerEmbeddingManagerGetAllSpeakers') - .asFunction(); - - speakerEmbeddingManagerFreeAllSpeakers ??= dynamicLibrary - .lookup< - NativeFunction< - SherpaOnnxSpeakerEmbeddingManagerFreeAllSpeakersNative>>( - 'SherpaOnnxSpeakerEmbeddingManagerFreeAllSpeakers') - .asFunction(); - - readWave ??= dynamicLibrary - .lookup>('SherpaOnnxReadWave') - .asFunction(); - - writeWave ??= dynamicLibrary - .lookup>( - 'SherpaOnnxWriteWave') - .asFunction(); - - freeWave ??= dynamicLibrary - .lookup>('SherpaOnnxFreeWave') - .asFunction(); - } -} diff --git a/sherpa-onnx/flutter/lib/src/speaker_identification.dart b/sherpa-onnx/flutter/lib/src/speaker_identification.dart deleted file mode 100644 index 5c2e10744..000000000 --- a/sherpa-onnx/flutter/lib/src/speaker_identification.dart +++ /dev/null @@ -1,268 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'dart:ffi'; -import 'dart:typed_data'; -import 'package:ffi/ffi.dart'; - -import './online_stream.dart'; -import './sherpa_onnx_bindings.dart'; - -class SpeakerEmbeddingExtractorConfig { - const SpeakerEmbeddingExtractorConfig( - {required this.model, - this.numThreads = 1, - this.debug = true, - this.provider = 'cpu'}); - - @override - String toString() { - return 'SpeakerEmbeddingExtractorConfig(model: $model, numThreads: $numThreads, debug: $debug, provider: $provider)'; - } - - final String model; - final int numThreads; - final bool debug; - final String provider; -} - -class SpeakerEmbeddingExtractor { - SpeakerEmbeddingExtractor._({required this.ptr, required this.dim}); - - /// The user is responsible to call the SpeakerEmbeddingExtractor.free() - /// method of the returned instance to avoid memory leak. - factory SpeakerEmbeddingExtractor( - {required SpeakerEmbeddingExtractorConfig config}) { - final c = calloc(); - - final modelPtr = config.model.toNativeUtf8(); - c.ref.model = modelPtr; - - c.ref.numThreads = config.numThreads; - c.ref.debug = config.debug ? 1 : 0; - - final providerPtr = config.provider.toNativeUtf8(); - c.ref.provider = providerPtr; - - final ptr = - SherpaOnnxBindings.createSpeakerEmbeddingExtractor?.call(c) ?? nullptr; - - calloc.free(providerPtr); - calloc.free(modelPtr); - calloc.free(c); - - final dim = SherpaOnnxBindings.speakerEmbeddingExtractorDim?.call(ptr) ?? 0; - - return SpeakerEmbeddingExtractor._(ptr: ptr, dim: dim); - } - - void free() { - SherpaOnnxBindings.destroySpeakerEmbeddingExtractor?.call(ptr); - ptr = nullptr; - } - - /// The user has to invoke stream.free() on the returned instance - /// to avoid memory leak - OnlineStream createStream() { - final p = - SherpaOnnxBindings.speakerEmbeddingExtractorCreateStream?.call(ptr) ?? - nullptr; - - return OnlineStream(ptr: p); - } - - bool isReady(OnlineStream stream) { - final int ready = SherpaOnnxBindings.speakerEmbeddingExtractorIsReady - ?.call(ptr, stream.ptr) ?? - 0; - return ready == 1; - } - - Float32List compute(OnlineStream stream) { - final Pointer embedding = SherpaOnnxBindings - .speakerEmbeddingExtractorComputeEmbedding - ?.call(ptr, stream.ptr) ?? - nullptr; - - if (embedding == nullptr) { - return Float32List(0); - } - - final embeddingList = embedding.asTypedList(dim); - final ans = Float32List(dim); - ans.setAll(0, embeddingList); - - SherpaOnnxBindings.speakerEmbeddingExtractorDestroyEmbedding - ?.call(embedding); - - return ans; - } - - Pointer ptr; - final int dim; -} - -class SpeakerEmbeddingManager { - SpeakerEmbeddingManager._({required this.ptr, required this.dim}); - - // The user has to use SpeakerEmbeddingManager.free() to avoid memory leak - factory SpeakerEmbeddingManager(int dim) { - final p = - SherpaOnnxBindings.createSpeakerEmbeddingManager?.call(dim) ?? nullptr; - return SpeakerEmbeddingManager._(ptr: p, dim: dim); - } - - void free() { - SherpaOnnxBindings.destroySpeakerEmbeddingManager?.call(ptr); - ptr = nullptr; - } - - /// Return true if added successfully; return false otherwise - bool add({required String name, required Float32List embedding}) { - assert(embedding.length == dim, '${embedding.length} vs $dim'); - - final Pointer namePtr = name.toNativeUtf8(); - final int n = embedding.length; - - final Pointer p = calloc(n); - final pList = p.asTypedList(n); - pList.setAll(0, embedding); - - final int ok = - SherpaOnnxBindings.speakerEmbeddingManagerAdd?.call(ptr, namePtr, p) ?? - 0; - - calloc.free(p); - calloc.free(namePtr); - - return ok == 1; - } - - bool addMulti( - {required String name, required List embeddingList}) { - final Pointer namePtr = name.toNativeUtf8(); - final int n = embeddingList.length; - - final Pointer p = calloc(n * dim); - final pList = p.asTypedList(n * dim); - - int offset = 0; - for (final e in embeddingList) { - assert(e.length == dim, '${e.length} vs $dim'); - - pList.setAll(offset, e); - offset += dim; - } - - final int ok = SherpaOnnxBindings.speakerEmbeddingManagerAddListFlattened - ?.call(ptr, namePtr, p, n) ?? - 0; - - calloc.free(p); - calloc.free(namePtr); - - return ok == 1; - } - - bool contains(String name) { - final Pointer namePtr = name.toNativeUtf8(); - - final int found = SherpaOnnxBindings.speakerEmbeddingManagerContains - ?.call(ptr, namePtr) ?? - 0; - - calloc.free(namePtr); - - return found == 1; - } - - bool remove(String name) { - final Pointer namePtr = name.toNativeUtf8(); - - final int ok = - SherpaOnnxBindings.speakerEmbeddingManagerRemove?.call(ptr, namePtr) ?? - 0; - - calloc.free(namePtr); - - return ok == 1; - } - - /// Return an empty string if no speaker is found - String search({required Float32List embedding, required double threshold}) { - assert(embedding.length == dim); - - final Pointer p = calloc(dim); - final pList = p.asTypedList(dim); - pList.setAll(0, embedding); - - final Pointer name = SherpaOnnxBindings.speakerEmbeddingManagerSearch - ?.call(ptr, p, threshold) ?? - nullptr; - - calloc.free(p); - - if (name == nullptr) { - return ''; - } - - final String ans = name.toDartString(); - - SherpaOnnxBindings.speakerEmbeddingManagerFreeSearch?.call(name); - - return ans; - } - - bool verify( - {required String name, - required Float32List embedding, - required double threshold}) { - assert(embedding.length == dim); - - final Pointer namePtr = name.toNativeUtf8(); - - final Pointer p = calloc(dim); - final pList = p.asTypedList(dim); - pList.setAll(0, embedding); - - final int ok = SherpaOnnxBindings.speakerEmbeddingManagerVerify - ?.call(ptr, namePtr, p, threshold) ?? - 0; - - calloc.free(p); - calloc.free(namePtr); - - return ok == 1; - } - - int get numSpeakers => - SherpaOnnxBindings.speakerEmbeddingManagerNumSpeakers?.call(ptr) ?? 0; - - List get allSpeakerNames { - int n = numSpeakers; - if (n == 0) { - return []; - } - - final Pointer> names = - SherpaOnnxBindings.speakerEmbeddingManagerGetAllSpeakers?.call(ptr) ?? - nullptr; - - if (names == nullptr) { - return []; - } - - final ans = []; - - // see https://api.flutter.dev/flutter/dart-ffi/PointerPointer.html - for (int i = 0; i != n; ++i) { - String name = names[i].toDartString(); - ans.add(name); - } - - SherpaOnnxBindings.speakerEmbeddingManagerFreeAllSpeakers?.call(names); - - return ans; - } - - Pointer ptr; - final int dim; -} diff --git a/sherpa-onnx/flutter/lib/src/tts.dart b/sherpa-onnx/flutter/lib/src/tts.dart deleted file mode 100644 index f779188b7..000000000 --- a/sherpa-onnx/flutter/lib/src/tts.dart +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'dart:ffi'; -import 'dart:typed_data'; - -import 'package:ffi/ffi.dart'; - -import './sherpa_onnx_bindings.dart'; - -class OfflineTtsVitsModelConfig { - const OfflineTtsVitsModelConfig({ - required this.model, - this.lexicon = '', - required this.tokens, - this.dataDir = '', - this.noiseScale = 0.667, - this.noiseScaleW = 0.8, - this.lengthScale = 1.0, - this.dictDir = '', - }); - - @override - String toString() { - return 'OfflineTtsVitsModelConfig(model: $model, lexicon: $lexicon, tokens: $tokens, dataDir: $dataDir, noiseScale: $noiseScale, noiseScaleW: $noiseScaleW, lengthScale: $lengthScale, dictDir: $dictDir)'; - } - - final String model; - final String lexicon; - final String tokens; - final String dataDir; - final double noiseScale; - final double noiseScaleW; - final double lengthScale; - final String dictDir; -} - -class OfflineTtsModelConfig { - const OfflineTtsModelConfig({ - required this.vits, - this.numThreads = 1, - this.debug = true, - this.provider = 'cpu', - }); - - @override - String toString() { - return 'OfflineTtsModelConfig(vits: $vits, numThreads: $numThreads, debug: $debug, provider: $provider)'; - } - - final OfflineTtsVitsModelConfig vits; - final int numThreads; - final bool debug; - final String provider; -} - -class OfflineTtsConfig { - const OfflineTtsConfig({ - required this.model, - this.ruleFsts = '', - this.maxNumSenetences = 1, - this.ruleFars = '', - }); - - @override - String toString() { - return 'OfflineTtsConfig(model: $model, ruleFsts: $ruleFsts, maxNumSenetences: $maxNumSenetences, ruleFars: $ruleFars)'; - } - - final OfflineTtsModelConfig model; - final String ruleFsts; - final int maxNumSenetences; - final String ruleFars; -} - -class GeneratedAudio { - GeneratedAudio({ - required this.samples, - required this.sampleRate, - }); - - final Float32List samples; - final int sampleRate; -} - -class OfflineTts { - OfflineTts._({required this.ptr, required this.config}); - - /// The user is responsible to call the OfflineTts.free() - /// method of the returned instance to avoid memory leak. - factory OfflineTts(OfflineTtsConfig config) { - final c = calloc(); - c.ref.model.vits.model = config.model.vits.model.toNativeUtf8(); - c.ref.model.vits.lexicon = config.model.vits.lexicon.toNativeUtf8(); - c.ref.model.vits.tokens = config.model.vits.tokens.toNativeUtf8(); - c.ref.model.vits.dataDir = config.model.vits.dataDir.toNativeUtf8(); - c.ref.model.vits.noiseScale = config.model.vits.noiseScale; - c.ref.model.vits.noiseScaleW = config.model.vits.noiseScaleW; - c.ref.model.vits.lengthScale = config.model.vits.lengthScale; - c.ref.model.vits.dictDir = config.model.vits.dictDir.toNativeUtf8(); - - c.ref.model.numThreads = config.model.numThreads; - c.ref.model.debug = config.model.debug ? 1 : 0; - c.ref.model.provider = config.model.provider.toNativeUtf8(); - - c.ref.ruleFsts = config.ruleFsts.toNativeUtf8(); - c.ref.maxNumSenetences = config.maxNumSenetences; - c.ref.ruleFars = config.ruleFars.toNativeUtf8(); - - final ptr = SherpaOnnxBindings.createOfflineTts?.call(c) ?? nullptr; - - calloc.free(c.ref.ruleFars); - calloc.free(c.ref.ruleFsts); - calloc.free(c.ref.model.provider); - calloc.free(c.ref.model.vits.dictDir); - calloc.free(c.ref.model.vits.dataDir); - calloc.free(c.ref.model.vits.tokens); - calloc.free(c.ref.model.vits.lexicon); - calloc.free(c.ref.model.vits.model); - - return OfflineTts._(ptr: ptr, config: config); - } - - void free() { - SherpaOnnxBindings.destroyOfflineTts?.call(ptr); - ptr = nullptr; - } - - GeneratedAudio generate( - {required String text, int sid = 0, double speed = 1.0}) { - final Pointer textPtr = text.toNativeUtf8(); - final p = - SherpaOnnxBindings.offlineTtsGenerate?.call(ptr, textPtr, sid, speed) ?? - nullptr; - calloc.free(textPtr); - - if (p == nullptr) { - return GeneratedAudio(samples: Float32List(0), sampleRate: 0); - } - - final samples = p.ref.samples.asTypedList(p.ref.n); - final sampleRate = p.ref.sampleRate; - final newSamples = Float32List.fromList(samples); - - SherpaOnnxBindings.destroyOfflineTtsGeneratedAudio?.call(p); - - return GeneratedAudio(samples: newSamples, sampleRate: sampleRate); - } - - GeneratedAudio generateWithCallback( - {required String text, - int sid = 0, - double speed = 1.0, - required int Function(Float32List samples) callback}) { - // see - // https://github.com/dart-lang/sdk/issues/54276#issuecomment-1846109285 - // https://stackoverflow.com/questions/69537440/callbacks-in-dart-dartffi-only-supports-calling-static-dart-functions-from-nat - // https://github.com/dart-lang/sdk/blob/main/tests/ffi/isolate_local_function_callbacks_test.dart#L46 - final wrapper = - NativeCallable.isolateLocal( - (Pointer samples, int n) { - final s = samples.asTypedList(n); - final newSamples = Float32List.fromList(s); - return callback(newSamples); - }, exceptionalReturn: 0); - - final Pointer textPtr = text.toNativeUtf8(); - final p = SherpaOnnxBindings.offlineTtsGenerateWithCallback - ?.call(ptr, textPtr, sid, speed, wrapper.nativeFunction) ?? - nullptr; - - calloc.free(textPtr); - wrapper.close(); - - if (p == nullptr) { - return GeneratedAudio(samples: Float32List(0), sampleRate: 0); - } - - final samples = p.ref.samples.asTypedList(p.ref.n); - final sampleRate = p.ref.sampleRate; - final newSamples = Float32List.fromList(samples); - - SherpaOnnxBindings.destroyOfflineTtsGeneratedAudio?.call(p); - - return GeneratedAudio(samples: newSamples, sampleRate: sampleRate); - } - - int get sampleRate => SherpaOnnxBindings.offlineTtsSampleRate?.call(ptr) ?? 0; - - int get numSpeakers => - SherpaOnnxBindings.offlineTtsNumSpeakers?.call(ptr) ?? 0; - - Pointer ptr; - OfflineTtsConfig config; -} diff --git a/sherpa-onnx/flutter/lib/src/vad.dart b/sherpa-onnx/flutter/lib/src/vad.dart deleted file mode 100644 index 6c36cd8f0..000000000 --- a/sherpa-onnx/flutter/lib/src/vad.dart +++ /dev/null @@ -1,212 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'dart:ffi'; -import 'dart:typed_data'; -import 'package:ffi/ffi.dart'; - -import './sherpa_onnx_bindings.dart'; - -class SileroVadModelConfig { - const SileroVadModelConfig( - {this.model = '', - this.threshold = 0.5, - this.minSilenceDuration = 0.5, - this.minSpeechDuration = 0.25, - this.windowSize = 512}); - - @override - String toString() { - return 'SileroVadModelConfig(model: $model, threshold: $threshold, minSilenceDuration: $minSilenceDuration, minSpeechDuration: $minSpeechDuration, windowSize: $windowSize)'; - } - - final String model; - final double threshold; - final double minSilenceDuration; - final double minSpeechDuration; - final int windowSize; -} - -class VadModelConfig { - VadModelConfig( - {this.sileroVad = const SileroVadModelConfig(), - this.sampleRate = 16000, - this.numThreads = 1, - this.provider = 'cpu', - this.debug = true}); - - @override - String toString() { - return 'VadModelConfig(sileroVad: $sileroVad, sampleRate: $sampleRate, numThreads: $numThreads, provider: $provider, debug: $debug)'; - } - - final SileroVadModelConfig sileroVad; - final int sampleRate; - final int numThreads; - final String provider; - final bool debug; -} - -class SpeechSegment { - SpeechSegment({required this.samples, required this.start}); - final Float32List samples; - final int start; -} - -class CircularBuffer { - CircularBuffer._({required this.ptr}); - - /// The user has to invoke CircularBuffer.free() on the returned instance - /// to avoid memory leak. - factory CircularBuffer({required int capacity}) { - assert(capacity > 0, 'capacity is $capacity'); - final p = - SherpaOnnxBindings.createCircularBuffer?.call(capacity) ?? nullptr; - - return CircularBuffer._(ptr: p); - } - - void free() { - SherpaOnnxBindings.destroyCircularBuffer?.call(ptr); - ptr = nullptr; - } - - void push(Float32List data) { - final n = data.length; - final Pointer p = calloc(n); - - final pList = p.asTypedList(n); - pList.setAll(0, data); - - SherpaOnnxBindings.circularBufferPush?.call(ptr, p, n); - - calloc.free(p); - } - - Float32List get({required int startIndex, required int n}) { - final Pointer p = - SherpaOnnxBindings.circularBufferGet?.call(ptr, startIndex, n) ?? - nullptr; - - if (p == nullptr) { - return Float32List(0); - } - - final pList = p.asTypedList(n); - final Float32List ans = Float32List.fromList(pList); - - SherpaOnnxBindings.circularBufferFree?.call(p); - - return ans; - } - - void pop(int n) { - SherpaOnnxBindings.circularBufferPop?.call(ptr, n); - } - - void reset() { - SherpaOnnxBindings.circularBufferReset?.call(ptr); - } - - int get size => SherpaOnnxBindings.circularBufferSize?.call(ptr) ?? 0; - int get head => SherpaOnnxBindings.circularBufferHead?.call(ptr) ?? 0; - - Pointer ptr; -} - -class VoiceActivityDetector { - VoiceActivityDetector._({required this.ptr, required this.config}); - - // The user has to invoke VoiceActivityDetector.free() to avoid memory leak. - factory VoiceActivityDetector( - {required VadModelConfig config, required double bufferSizeInSeconds}) { - final c = calloc(); - - final modelPtr = config.sileroVad.model.toNativeUtf8(); - c.ref.sileroVad.model = modelPtr; - - c.ref.sileroVad.threshold = config.sileroVad.threshold; - c.ref.sileroVad.minSilenceDuration = config.sileroVad.minSilenceDuration; - c.ref.sileroVad.minSpeechDuration = config.sileroVad.minSpeechDuration; - c.ref.sileroVad.windowSize = config.sileroVad.windowSize; - - c.ref.sampleRate = config.sampleRate; - c.ref.numThreads = config.numThreads; - - final providerPtr = config.provider.toNativeUtf8(); - c.ref.provider = providerPtr; - - c.ref.debug = config.debug ? 1 : 0; - - final ptr = SherpaOnnxBindings.createVoiceActivityDetector - ?.call(c, bufferSizeInSeconds) ?? - nullptr; - - calloc.free(providerPtr); - calloc.free(modelPtr); - calloc.free(c); - - return VoiceActivityDetector._(ptr: ptr, config: config); - } - - void free() { - SherpaOnnxBindings.destroyVoiceActivityDetector?.call(ptr); - ptr = nullptr; - } - - void acceptWaveform(Float32List samples) { - final n = samples.length; - final Pointer p = calloc(n); - - final pList = p.asTypedList(n); - pList.setAll(0, samples); - - SherpaOnnxBindings.voiceActivityDetectorAcceptWaveform?.call(ptr, p, n); - - calloc.free(p); - } - - bool isEmpty() { - final int empty = - SherpaOnnxBindings.voiceActivityDetectorEmpty?.call(ptr) ?? 0; - - return empty == 1; - } - - bool isDetected() { - final int detected = - SherpaOnnxBindings.voiceActivityDetectorDetected?.call(ptr) ?? 0; - - return detected == 1; - } - - void pop() { - SherpaOnnxBindings.voiceActivityDetectorPop?.call(ptr); - } - - void clear() { - SherpaOnnxBindings.voiceActivityDetectorClear?.call(ptr); - } - - SpeechSegment front() { - final Pointer segment = - SherpaOnnxBindings.voiceActivityDetectorFront?.call(ptr) ?? nullptr; - if (segment == nullptr) { - return SpeechSegment(samples: Float32List(0), start: 0); - } - - final sampleList = segment.ref.samples.asTypedList(segment.ref.n); - final start = segment.ref.start; - - final samples = Float32List.fromList(sampleList); - - SherpaOnnxBindings.destroySpeechSegment?.call(segment); - - return SpeechSegment(samples: samples, start: start); - } - - void reset() { - SherpaOnnxBindings.voiceActivityDetectorReset?.call(ptr); - } - - Pointer ptr; - final VadModelConfig config; -} diff --git a/sherpa-onnx/flutter/lib/src/wave_reader.dart b/sherpa-onnx/flutter/lib/src/wave_reader.dart deleted file mode 100644 index 200da4055..000000000 --- a/sherpa-onnx/flutter/lib/src/wave_reader.dart +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'dart:ffi'; -import 'dart:typed_data'; -import 'package:ffi/ffi.dart'; - -import './sherpa_onnx_bindings.dart'; - -class WaveData { - WaveData({required this.samples, required this.sampleRate}); - - /// normalized to [-1, 1] - Float32List samples; - int sampleRate; -} - -WaveData readWave(String filename) { - final Pointer str = filename.toNativeUtf8(); - Pointer wave = - SherpaOnnxBindings.readWave?.call(str) ?? nullptr; - calloc.free(str); - - if (wave == nullptr) { - return WaveData(samples: Float32List(0), sampleRate: 0); - } - - final samples = wave.ref.samples.asTypedList(wave.ref.numSamples); - - final newSamples = Float32List.fromList(samples); - int sampleRate = wave.ref.sampleRate; - SherpaOnnxBindings.freeWave?.call(wave); - - return WaveData(samples: newSamples, sampleRate: sampleRate); -} diff --git a/sherpa-onnx/flutter/lib/src/wave_writer.dart b/sherpa-onnx/flutter/lib/src/wave_writer.dart deleted file mode 100644 index bd6c0bbad..000000000 --- a/sherpa-onnx/flutter/lib/src/wave_writer.dart +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) 2024 Xiaomi Corporation -import 'dart:ffi'; -import 'dart:typed_data'; -import 'package:ffi/ffi.dart'; - -import './sherpa_onnx_bindings.dart'; - -bool writeWave( - {required String filename, - required Float32List samples, - required int sampleRate}) { - final Pointer filenamePtr = filename.toNativeUtf8(); - - final n = samples.length; - final Pointer p = calloc(n); - - final pList = p.asTypedList(n); - pList.setAll(0, samples); - - int ok = - SherpaOnnxBindings.writeWave?.call(p, n, sampleRate, filenamePtr) ?? 0; - - calloc.free(p); - calloc.free(filenamePtr); - - return ok == 1; -} diff --git a/sherpa-onnx/flutter/linux/CMakeLists.txt b/sherpa-onnx/flutter/linux/CMakeLists.txt deleted file mode 100644 index f0e8b876b..000000000 --- a/sherpa-onnx/flutter/linux/CMakeLists.txt +++ /dev/null @@ -1,31 +0,0 @@ -# The Flutter tooling requires that developers have CMake 3.10 or later -# installed. You should not increase this version, as doing so will cause -# the plugin to fail to compile for some customers of the plugin. -cmake_minimum_required(VERSION 3.10) - -# Project-level configuration. -set(PROJECT_NAME "sherpa_onnx") -project(${PROJECT_NAME} LANGUAGES CXX) - -# Invoke the build for native code shared with the other target platforms. -# This can be changed to accommodate different builds. -# add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/../src" "${CMAKE_CURRENT_BINARY_DIR}/shared") - -# List of absolute paths to libraries that should be bundled with the plugin. -# This list could contain prebuilt libraries, or libraries created by an -# external build triggered from this build file. -set(sherpa_onnx_bundled_libraries - "${CMAKE_CURRENT_SOURCE_DIR}/libsherpa-onnx-c-api.so" - "${CMAKE_CURRENT_SOURCE_DIR}/libsherpa-onnx-core.so" - "${CMAKE_CURRENT_SOURCE_DIR}/libkaldi-decoder-core.so" - "${CMAKE_CURRENT_SOURCE_DIR}/libsherpa-onnx-kaldifst-core.so" - "${CMAKE_CURRENT_SOURCE_DIR}/libsherpa-onnx-fstfar.so" - "${CMAKE_CURRENT_SOURCE_DIR}/libsherpa-onnx-fst.so" - "${CMAKE_CURRENT_SOURCE_DIR}/libkaldi-native-fbank-core.so" - "${CMAKE_CURRENT_SOURCE_DIR}/libpiper_phonemize.so" - "${CMAKE_CURRENT_SOURCE_DIR}/libespeak-ng.so" - "${CMAKE_CURRENT_SOURCE_DIR}/libucd.so" - "${CMAKE_CURRENT_SOURCE_DIR}/libonnxruntime.so" - "${CMAKE_CURRENT_SOURCE_DIR}/libssentencepiece_core.so" - PARENT_SCOPE -) diff --git a/sherpa-onnx/flutter/macos/sherpa_onnx.podspec b/sherpa-onnx/flutter/macos/sherpa_onnx.podspec deleted file mode 100644 index e5daf264e..000000000 --- a/sherpa-onnx/flutter/macos/sherpa_onnx.podspec +++ /dev/null @@ -1,27 +0,0 @@ -# -# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html. -# Run `pod lib lint hello.podspec` to validate before publishing. -# -Pod::Spec.new do |s| - s.name = 'sherpa_onnx' - s.version = '0.0.1' - s.summary = 'sherpa-onnx Flutter FFI plugin project.' - s.description = <<-DESC -sherpa-onnx Flutter FFI plugin project. - DESC - s.homepage = 'https://github.com/k2-fsa/sherpa-onnx' - s.license = { :file => '../LICENSE' } - s.author = { 'Your Company' => 'email@example.com' } - - # This will ensure the source files in Classes/ are included in the native - # builds of apps using this FFI plugin. Podspec does not support relative - # paths, so Classes contains a forwarder C file that relatively imports - # `../src/*` so that the C sources can be shared among all target platforms. - s.source = { :path => '.' } - s.dependency 'FlutterMacOS' - s.vendored_libraries = '*.dylib' - - s.platform = :osx, '10.11' - s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } - s.swift_version = '5.0' -end diff --git a/sherpa-onnx/flutter/pubspec.yaml b/sherpa-onnx/flutter/pubspec.yaml deleted file mode 100644 index 2944a9a27..000000000 --- a/sherpa-onnx/flutter/pubspec.yaml +++ /dev/null @@ -1,43 +0,0 @@ -name: sherpa_onnx - -description: > - Speech recognition, speech synthesis, and speaker recognition using next-gen Kaldi - with onnxruntime without Internet connection. - -repository: https://github.com/k2-fsa/sherpa-onnx/tree/master/sherpa-onnx/flutter - -issue_tracker: https://github.com/k2-fsa/sherpa-onnx/issues -documentation: https://k2-fsa.github.io/sherpa/onnx/ - -topics: - - speech-recognition - - speech-synthesis - - speaker-identification - - audio-tagging - - voice-activity-detection - -# remember to change the version in macos/sherpa_onnx.podspec -version: 1.9.29 - -homepage: https://github.com/k2-fsa/sherpa-onnx - -environment: - sdk: '>=3.4.0 <4.0.0' - flutter: '>=3.3.0' - -dependencies: - ffi: ^2.1.0 - flutter: - sdk: flutter - - -# The following section is specific to Flutter packages. -flutter: - plugin: - platforms: - macos: - ffiPlugin: true - windows: - ffiPlugin: true - linux: - ffiPlugin: true diff --git a/sherpa-onnx/flutter/windows/CMakeLists.txt b/sherpa-onnx/flutter/windows/CMakeLists.txt deleted file mode 100644 index a6a262ee4..000000000 --- a/sherpa-onnx/flutter/windows/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -# The Flutter tooling requires that developers have a version of Visual Studio -# installed that includes CMake 3.14 or later. You should not increase this -# version, as doing so will cause the plugin to fail to compile for some -# customers of the plugin. -cmake_minimum_required(VERSION 3.14) - -# Project-level configuration. -set(PROJECT_NAME "sherpa_onnx") -project(${PROJECT_NAME} LANGUAGES CXX) - -# Invoke the build for native code shared with the other target platforms. -# This can be changed to accommodate different builds. -# add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/../src" "${CMAKE_CURRENT_BINARY_DIR}/shared") - -# List of absolute paths to libraries that should be bundled with the plugin. -# This list could contain prebuilt libraries, or libraries created by an -# external build triggered from this build file. -set(sherpa_onnx_bundled_libraries - "${CMAKE_CURRENT_SOURCE_DIR}/sherpa-onnx-c-api.dll" - "${CMAKE_CURRENT_SOURCE_DIR}/sherpa-onnx-core.dll" - "${CMAKE_CURRENT_SOURCE_DIR}/kaldi-decoder-core.dll" - "${CMAKE_CURRENT_SOURCE_DIR}/sherpa-onnx-kaldifst-core.dll" - "${CMAKE_CURRENT_SOURCE_DIR}/sherpa-onnx-fstfar.dll" - "${CMAKE_CURRENT_SOURCE_DIR}/sherpa-onnx-fst.dll" - "${CMAKE_CURRENT_SOURCE_DIR}/kaldi-native-fbank-core.dll" - "${CMAKE_CURRENT_SOURCE_DIR}/piper_phonemize.dll" - "${CMAKE_CURRENT_SOURCE_DIR}/espeak-ng.dll" - "${CMAKE_CURRENT_SOURCE_DIR}/ucd.dll" - "${CMAKE_CURRENT_SOURCE_DIR}/onnxruntime.dll" - "${CMAKE_CURRENT_SOURCE_DIR}/ssentencepiece_core.dll" - PARENT_SCOPE -)