Unify sherpa-onnx init API for Flutter and Dart CLI (#3875)

This commit is contained in:
Fangjun Kuang authored and GitHub committed 2026-08-13 16:53:14 +08:00
1 parent e1edbfee66
commit 8c0c1b02ca
139 files changed
+919 -758

No files matched your search

+12 -12
View File
@@ -11,6 +11,18 @@ popd
pushd non-streaming-asr
echo '----------Moonshine v2----------'
./run-moonshine-v2.sh
rm -rf sherpa-onnx-*
echo '----------Wenet CTC----------'
./run-wenet-ctc.sh
rm -rf sherpa-onnx-*
echo '----------Zipformer CTC----------'
./run-zipformer-ctc.sh
rm -rf sherpa-onnx-*
echo '----------Cohere Transcribe----------'
./run-cohere-transcribe.sh
rm -rf sherpa-onnx-*
@@ -19,10 +31,6 @@ echo '----------Qwen3 ASR----------'
./run-qwen3-asr.sh
rm -rf sherpa-onnx-*
echo '----------Moonshine v2----------'
./run-moonshine-v2.sh
rm -rf sherpa-onnx-*
echo '----------FireRedASR CTC----------'
./run-fire-red-asr-ctc.sh
rm -rf sherpa-onnx-*
@@ -39,14 +47,6 @@ echo '----------Omnilingual ASR CTC----------'
./run-omnilingual-asr-ctc.sh
rm -rf sherpa-onnx-*
echo '----------Wenet CTC----------'
./run-wenet-ctc.sh
rm -rf sherpa-onnx-*
echo '----------Zipformer CTC----------'
./run-zipformer-ctc.sh
rm -rf sherpa-onnx-*
echo '----------SenseVoice----------'
./run-sense-voice-with-hr.sh
./run-sense-voice.sh
+3 -3
View File
@@ -29,7 +29,7 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, ubuntu-24.04-arm] #, windows-2022]
os: [ubuntu-latest, macos-latest, ubuntu-24.04-arm, windows-2022]
steps:
- uses: actions/checkout@v4
@@ -125,9 +125,9 @@ jobs:
- name: Copy xcframework
shell: bash
run: |
cp -av build-macos-shared-sherpa-with-static-onnxruntime/sherpa-onnx.xcframework flutter/sherpa_onnx_macos/macos/sherpa_onnx_macos/SherpaOnnxC.xcframework
cp -av build-macos-shared-sherpa-with-static-onnxruntime/sherpa-onnx.xcframework flutter/sherpa_onnx_macos/macos/sherpa_onnx_macos/sherpa-onnx.xcframework
ls -lh flutter/sherpa_onnx_macos/macos/sherpa_onnx_macos/SherpaOnnxC.xcframework/
ls -lh flutter/sherpa_onnx_macos/macos/sherpa_onnx_macos/sherpa-onnx.xcframework/
- name: Run tests
shell: bash
+50 -6
View File
@@ -20,13 +20,42 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, ubuntu-24.04-arm] #, windows-2022]
os: [ubuntu-latest, macos-latest, ubuntu-24.04-arm, windows-2022]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Clean stale onnxruntime (Windows)
if: matrix.os == 'windows-2022'
shell: bash
run: |
echo "Searching for stale onnxruntime.dll..."
search_dirs=(
"/c/Windows/System32"
"/c/Program Files"
"/c/Program Files (x86)"
"/c/Users"
"/c/hostedtoolcache"
)
count=0
for dir in "${search_dirs[@]}"; do
if [ -d "$dir" ]; then
while IFS= read -r f; do
[ -z "$f" ] && continue
echo "Deleting: $f"
rm -f "$f" || true
count=$((count + 1))
done < <(find "$dir" -name "onnxruntime.dll" -type f 2>/dev/null || true)
fi
done
if [ "$count" -eq 0 ]; then
echo "No stale onnxruntime.dll found"
else
echo "Deleted $count onnxruntime.dll file(s)"
fi
- name: Update version
shell: bash
run: |
@@ -34,6 +63,7 @@ jobs:
git diff .
- name: ccache
if: matrix.os != 'windows-2022'
uses: hendrikmuhs/ccache-action@v1.2
with:
key: ${{ matrix.os }}-dart
@@ -58,11 +88,13 @@ jobs:
- name: Build sherpa-onnx
shell: bash
run: |
export CMAKE_CXX_COMPILER_LAUNCHER=ccache
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
if [[ "${{ matrix.os }}" != "windows-2022" ]]; then
export CMAKE_CXX_COMPILER_LAUNCHER=ccache
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
fi
cmake --version
if [[ ${{ matrix.os }} == macos-latest ]]; then
if [[ "${{ matrix.os }}" == macos-latest ]]; then
./build-macos-shared-sherpa-with-static-onnxruntime.sh
else
mkdir build
@@ -96,9 +128,13 @@ jobs:
echo "os: $os"
if [[ $os == macos ]]; then
cp -av build-macos-shared-sherpa-with-static-onnxruntime/sherpa-onnx.xcframework flutter/sherpa_onnx_macos/macos/sherpa_onnx_macos/SherpaOnnxC.xcframework
cp -av build-macos-shared-sherpa-with-static-onnxruntime/sherpa-onnx.xcframework flutter/sherpa_onnx_macos/macos/sherpa_onnx_macos/sherpa-onnx.xcframework
elif [[ $os == windows ]]; then
cp -fv build/install/lib/*.dll ./flutter/sherpa_onnx_$os/$os
echo "Contents of flutter/sherpa_onnx_windows/windows/:"
ls -lh ./flutter/sherpa_onnx_windows/windows/
echo "Checking DLL dependencies with objdump:"
objdump -p ./flutter/sherpa_onnx_windows/windows/sherpa-onnx-c-api.dll | grep -i "DLL Name" || true
elif [[ $os == linux-x64 ]]; then
cp -fv build/install/lib/lib* ./flutter/sherpa_onnx_linux/linux/x64
elif [[ $os == linux-aarch64 ]]; then
@@ -110,7 +146,7 @@ jobs:
if [[ $os == linux-x64 || $os == linux-aarch64 ]]; then
ls -lh ./flutter/sherpa_onnx_linux/linux/*
elif [[ $os == macos ]]; then
ls -lh ./flutter/sherpa_onnx_macos/macos/sherpa_onnx_macos/SherpaOnnxC.xcframework/
ls -lh ./flutter/sherpa_onnx_macos/macos/sherpa_onnx_macos/sherpa-onnx.xcframework/
else
ls -lh ./flutter/sherpa_onnx_$os/$os
fi
@@ -118,6 +154,14 @@ jobs:
- name: Run tests
shell: bash
run: |
# Add DLL directory to PATH on Windows so onnxruntime.dll is found
if [[ "${{ matrix.os }}" == "windows-2022" ]]; then
export PATH="$PWD/flutter/sherpa_onnx_windows/windows:$PATH"
echo "PATH includes: $PWD/flutter/sherpa_onnx_windows/windows"
echo "Checking DLLs in flutter/sherpa_onnx_windows/windows/:"
ls -lh flutter/sherpa_onnx_windows/windows/
fi
cp scripts/dart/vad-pubspec.yaml dart-api-examples/vad/pubspec.yaml
cp scripts/dart/non-streaming-asr-pubspec.yaml dart-api-examples/non-streaming-asr/pubspec.yaml
cp scripts/dart/streaming-asr-pubspec.yaml dart-api-examples/streaming-asr/pubspec.yaml
+125 -23
View File
@@ -1,37 +1,139 @@
# Introduction
# Dart API Examples
This directory contains examples for Dart API.
This directory contains examples for the [sherpa_onnx](https://pub.dev/packages/sherpa_onnx) Dart API.
You can find the package at
https://pub.dev/packages/sherpa_onnx
All examples can also be used in Flutter apps, even though they are pure Dart
CLI programs here.
## Description
> **Start here:** Read the [`version/`](./version) example first. It
> demonstrates all initialization patterns (sync, async, and isolate) that
> every other example depends on.
> **For Flutter users:** Read [`hello_world`](../flutter-examples/hello_world)
> for initialization, then [`vad-from-microphone`](../flutter-examples/vad-from-microphone)
> or [`vad-from-file`](../flutter-examples/vad-from-file) for how to copy
> model files from assets to a writable directory and build a complete app.
## Initialization
All examples use the same simple initialization — no extra files needed:
```dart
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
// Sync (Flutter and Dart CLI):
sherpa_onnx.initBindings();
// Or async (Flutter, Dart CLI, and web):
await sherpa_onnx.initBindingsAsync();
```
No path argument is required. The library auto-resolves the native library
location for both Flutter apps and pure Dart CLI programs.
**Isolates:** If you use Dart isolates, you must call `initBindings()` or
`initBindingsAsync()` in every isolate that uses sherpa-onnx. See
[`version/`](./version/) for examples.
## Using in Flutter apps
These examples use model files from disk directly (e.g., `./model.onnx`).
In Flutter apps, model files must be bundled as assets and copied to a
writable location before use, because Flutter apps run in a sandbox and
cannot access arbitrary file paths.
**Steps to use a model in Flutter:**
1. Add the model file to your `pubspec.yaml`:
```yaml
flutter:
assets:
- assets/model.onnx
```
2. Copy the model from the asset bundle to a writable directory at runtime:
```dart
import 'dart:io';
import 'package:flutter/services.dart' show rootBundle;
import 'package:path_provider/path_provider.dart';
Future<String> copyAsset(String assetPath, String fileName) async {
final dir = await getApplicationDocumentsDirectory();
final file = File('${dir.path}/$fileName');
if (!await file.exists()) {
final data = await rootBundle.load(assetPath);
await file.writeAsBytes(data.buffer.asUint8List());
}
return file.path;
}
```
3. Pass the copied file path to the sherpa-onnx config:
```dart
final modelPath = await copyAsset('assets/model.onnx', 'model.onnx');
final config = sherpa_onnx.OfflineRecognizerConfig(
model: sherpa_onnx.OfflineModelConfig(
paraformer: sherpa_onnx.OfflineParaformerModelConfig(model: modelPath),
),
);
```
For concrete Flutter examples, see
[`flutter-examples/`](../flutter-examples/) in the repository.
## Examples
| Directory | Description |
|-----------|-------------|
| [./speaker-diarization](./speaker-diarization)| Example for speaker diarization.|
| [./add-punctuations](./add-punctuations)| Example for adding punctuations to text.|
| [./audio-tagging](./audio-tagging)| Example for audio tagging.|
| [./keyword-spotter](./keyword-spotter)| Example for keyword spotting|
| [./non-streaming-asr](./non-streaming-asr)| Example for non-streaming speech recognition|
| [./speaker-identification](./speaker-identification)| Example for speaker identification and verification.|
| [./streaming-asr](./streaming-asr)| Example for streaming speech recognition|
| [./tts](./tts)| Example for text to speech|
| [./vad-with-non-streaming-asr](./vad-with-non-streaming-asr)| Example for voice activity detection with non-streaming speech recognition. You can use it to generate subtitles.|
| [./vad](./vad)| Example for voice activity detection|
| [./speech-enhancement-gtcrn](./speech-enhancement-gtcrn)| Example for speech enhancement/denoising with GTCRN.|
| [./speech-enhancement-dpdfnet](./speech-enhancement-dpdfnet)| Example for speech enhancement/denoising with DPDFNet, including the 16 kHz family (`dpdfnet_baseline`, `dpdfnet2`, `dpdfnet4`, `dpdfnet8`).|
| [./streaming-speech-enhancement-gtcrn](./streaming-speech-enhancement-gtcrn)| Example for streaming speech enhancement/denoising with GTCRN.|
| [./streaming-speech-enhancement-dpdfnet](./streaming-speech-enhancement-dpdfnet)| Example for streaming speech enhancement/denoising with DPDFNet.|
| [version](./version) | Version info — demonstrates sync, async, and isolate initialization |
| [vad](./vad) | Voice activity detection |
| [vad-with-non-streaming-asr](./vad-with-non-streaming-asr) | VAD with non-streaming speech recognition (useful for subtitles) |
| [non-streaming-asr](./non-streaming-asr) | Non-streaming (offline) speech recognition |
| [streaming-asr](./streaming-asr) | Streaming (online) speech recognition |
| [tts](./tts) | Text to speech |
| [speaker-diarization](./speaker-diarization) | Speaker diarization |
| [speaker-identification](./speaker-identification) | Speaker identification and verification |
| [spoken-language-identification](./spoken-language-identification) | Spoken language identification |
| [audio-tagging](./audio-tagging) | Audio tagging |
| [keyword-spotter](./keyword-spotter) | Keyword spotting |
| [add-punctuations](./add-punctuations) | Adding punctuations to text |
| [speech-enhancement-gtcrn](./speech-enhancement-gtcrn) | Speech enhancement/denoising with GTCRN |
| [speech-enhancement-dpdfnet](./speech-enhancement-dpdfnet) | Speech enhancement/denoising with DPDFNet (16 kHz family) |
| [streaming-speech-enhancement-gtcrn](./streaming-speech-enhancement-gtcrn) | Streaming speech enhancement with GTCRN |
| [streaming-speech-enhancement-dpdfnet](./streaming-speech-enhancement-dpdfnet) | Streaming speech enhancement with DPDFNet |
## How to create an example in this folder
## Running an example
```bash
dart create vad
cd vad
dart pub get
dart run ./bin/vad.dart --help
```
# Edit pubspec.yaml and add sherpa_onnx to dependencies
## Creating a new example
```bash
dart create my-example
cd my-example
# Add sherpa_onnx to pubspec.yaml:
# dependencies:
# sherpa_onnx: ^1.13.5
# path: ^1.9.0
dart pub get
dart run
```
In your `main.dart`:
```dart
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main() async {
await sherpa_onnx.initBindingsAsync();
// Use sherpa-onnx APIs here...
}
```
@@ -1 +0,0 @@
../../vad/bin/init.dart
@@ -3,10 +3,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to model.onnx')
@@ -3,10 +3,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()..addOption('model', help: 'Path to model.onnx');
@@ -6,7 +6,7 @@ description: >
version: 1.0.0
environment:
sdk: ">=3.0.0 <4.0.0"
sdk: ">=3.2.0 <4.0.0"
dependencies:
sherpa_onnx: ^1.13.5
+2 -2
View File
@@ -3,10 +3,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the zipformer model')
@@ -1 +0,0 @@
../../vad/bin/init.dart
@@ -3,10 +3,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the zipformer model')
+1 -1
View File
@@ -6,7 +6,7 @@ description: >
version: 1.0.0
environment:
sdk: ">=3.0.0 <4.0.0"
sdk: ">=3.2.0 <4.0.0"
dependencies:
sherpa_onnx: ^1.13.5
@@ -1 +0,0 @@
../../vad/bin/init.dart
@@ -5,10 +5,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('encoder', help: 'Path to the encoder model')
@@ -6,7 +6,7 @@ description: >
version: 1.0.0
environment:
sdk: ">=3.0.0 <4.0.0"
sdk: ">=3.2.0 <4.0.0"
dependencies:
sherpa_onnx: ^1.13.5
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('encoder', help: 'Path to the encoder model')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the Dolphin CTC model')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the FireRedASR CTC model')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('encoder', help: 'Path to the FireRedAsr encoder model')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('encoder-adaptor', help: 'Path to the encoder adaptor model')
@@ -1 +0,0 @@
../../vad/bin/init.dart
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the MedASR CTC model')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('preprocessor',
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('encoder', help: 'Path to the moonshine v2 encoder model')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('encoder', help: 'Path to the NeMo Canary encoder model')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the NeMo CTC model')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('encoder', help: 'Path to the encoder model')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the Omnilingual ASR CTC model')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the paraformer model')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the paraformer model')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('conv-frontend', help: 'Path to the conv frontend model')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
print('sherpa-onnx version: ${sherpa_onnx.getVersion()}');
print('sherpa-onnx gitSha1: ${sherpa_onnx.getGitSha1()}');
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the SenseVoice model')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the telespeech CTC model')
@@ -5,10 +5,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('silero-vad', help: 'Path to silero_vad.onnx')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the Wenet CTC model')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('encoder', help: 'Path to the whisper encoder model')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the Zipformer CTC model')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('encoder', help: 'Path to the encoder model')
@@ -6,7 +6,7 @@ version: 1.0.0
# repository: https://github.com/my_org/my_repo
environment:
sdk: ">=3.0.0 <4.0.0"
sdk: ">=3.2.0 <4.0.0"
# Add regular dependencies here.
dependencies:
@@ -1 +0,0 @@
../../vad/bin/init.dart
@@ -4,10 +4,10 @@ import 'dart:typed_data';
import 'dart:ffi';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
/* Please use the following commands to download files used in this file
Step 1: Download a speaker segmentation model
@@ -5,7 +5,7 @@ description: >
version: 1.0.0
environment:
sdk: ">=3.0.0 <4.0.0"
sdk: ">=3.2.0 <4.0.0"
dependencies:
sherpa_onnx: ^1.13.5
@@ -1 +0,0 @@
../../vad/bin/init.dart
@@ -4,7 +4,7 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
Float32List computeEmbedding(
{required sherpa_onnx.SpeakerEmbeddingExtractor extractor,
@@ -27,7 +27,7 @@ Float32List computeEmbedding(
}
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()..addOption('model', help: 'Path to model.onnx');
@@ -6,7 +6,7 @@ description: >
version: 1.0.0
environment:
sdk: ">=3.0.0 <4.0.0"
sdk: ">=3.2.0 <4.0.0"
dependencies:
sherpa_onnx: ^1.13.5
@@ -1 +0,0 @@
../../vad/bin/init.dart
@@ -3,10 +3,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to a DPDFNet onnx model')
@@ -6,7 +6,7 @@ description: >
version: 1.0.0
environment:
sdk: ">=3.0.0 <4.0.0"
sdk: ">=3.2.0 <4.0.0"
dependencies:
sherpa_onnx: ^1.13.5
@@ -1 +0,0 @@
../../vad/bin/init.dart
@@ -3,10 +3,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to a GTCRN onnx model')
@@ -6,7 +6,7 @@ description: >
version: 1.0.0
environment:
sdk: ">=3.0.0 <4.0.0"
sdk: ">=3.2.0 <4.0.0"
# Add regular dependencies here.
dependencies:
@@ -1 +0,0 @@
../../vad/bin/init.dart
@@ -3,10 +3,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('encoder', help: 'Path to the whisper encoder model')
@@ -6,7 +6,7 @@ description: >
version: 1.0.0
environment:
sdk: ">=3.0.0 <4.0.0"
sdk: ">=3.2.0 <4.0.0"
# Add regular dependencies here.
dependencies:
@@ -1 +0,0 @@
../../vad/bin/init.dart
@@ -5,10 +5,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('encoder', help: 'Path to the encoder model')
@@ -5,10 +5,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the model')
@@ -5,10 +5,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the model')
@@ -5,10 +5,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the model')
@@ -5,10 +5,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('encoder', help: 'Path to the encoder model')
+1 -1
View File
@@ -7,7 +7,7 @@ version: 1.0.0
# repository: https://github.com/my_org/my_repo
environment:
sdk: ">=3.0.0 <4.0.0"
sdk: ">=3.2.0 <4.0.0"
# Add regular dependencies here.
dependencies:
@@ -1 +0,0 @@
../../vad/bin/init.dart
@@ -4,10 +4,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to a DPDFNet onnx model')
@@ -6,7 +6,7 @@ description: >
version: 1.0.0
environment:
sdk: ">=3.0.0 <4.0.0"
sdk: ">=3.2.0 <4.0.0"
# Add regular dependencies here.
dependencies:
@@ -1 +0,0 @@
../../vad/bin/init.dart
@@ -4,10 +4,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to a GTCRN onnx model')
@@ -6,7 +6,7 @@ description: >
version: 1.0.0
environment:
sdk: ">=3.0.0 <4.0.0"
sdk: ">=3.2.0 <4.0.0"
# Add regular dependencies here.
dependencies:
+2 -2
View File
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the ONNX model')
-1
View File
@@ -1 +0,0 @@
../../vad/bin/init.dart
+2 -2
View File
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the onnx model')
+2 -2
View File
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the onnx model')
+2 -2
View File
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the onnx model')
+2 -2
View File
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('acoustic-model', help: 'Path to the acoustic model')
+2 -2
View File
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('acoustic-model', help: 'Path to the acoustic model')
+2 -2
View File
@@ -5,10 +5,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the ONNX model')
+2 -2
View File
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('lm-flow', help: 'Path to the lm flow model')
+2 -2
View File
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('duration-predictor',
+2 -2
View File
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('model', help: 'Path to the ONNX model')
@@ -4,10 +4,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('tokens', help: 'Path to tokens.txt')
+1 -1
View File
@@ -4,7 +4,7 @@ version: 1.0.0
# repository: https://github.com/my_org/my_repo
environment:
sdk: ">=3.0.0 <4.0.0"
sdk: ">=3.2.0 <4.0.0"
# Add regular dependencies here.
dependencies:
@@ -5,10 +5,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('silero-vad', help: 'Path to silero_vad.onnx')
@@ -1 +0,0 @@
../../vad/bin/init.dart
@@ -5,10 +5,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('silero-vad', help: 'Path to silero_vad.onnx')
@@ -5,10 +5,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('silero-vad', help: 'Path to silero_vad.onnx')
@@ -6,10 +6,10 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('silero-vad', help: 'Path to silero_vad.onnx')
@@ -5,10 +5,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('silero-vad', help: 'Path to silero_vad.onnx')
@@ -5,10 +5,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('silero-vad', help: 'Path to silero_vad.onnx')
@@ -5,10 +5,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('silero-vad', help: 'Path to silero_vad.onnx')
@@ -5,10 +5,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('silero-vad', help: 'Path to silero_vad.onnx')
@@ -5,10 +5,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('silero-vad', help: 'Path to silero_vad.onnx')
@@ -7,7 +7,7 @@ description: >
version: 1.0.0
environment:
sdk: ">=3.0.0 <4.0.0"
sdk: ">=3.2.0 <4.0.0"
dependencies:
sherpa_onnx: ^1.13.5
-38
View File
@@ -1,38 +0,0 @@
// Copyright (c) 2024 Xiaomi Corporation
import 'dart:io';
import 'dart:isolate';
import 'package:path/path.dart' as p;
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
Future<void> initSherpaOnnx() async {
String platform = '';
if (Platform.isMacOS) {
platform = 'macos';
} else if (Platform.isLinux) {
platform = 'linux';
} else if (Platform.isWindows) {
platform = 'windows';
} else {
throw UnsupportedError('Unknown platform: ${Platform.operatingSystem}');
}
var uri = await Isolate.resolvePackageUri(
Uri.parse('package:sherpa_onnx_$platform/any_path_is_ok_here.dart'));
if (uri == null) {
print('File not found');
exit(1);
}
var libPath = p.join(p.dirname(p.fromUri(uri)), '..', platform);
if (platform == 'linux') {
final arch = Platform.version.contains('arm64') ||
Platform.version.contains('aarch64')
? 'aarch64'
: 'x64';
libPath = p.join(p.dirname(p.fromUri(uri)), '..', platform, arch);
}
sherpa_onnx.initBindings(libPath);
}
+2 -2
View File
@@ -4,10 +4,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('ten-vad', help: 'Path to ten-vad.onnx')
+2 -2
View File
@@ -4,10 +4,10 @@ import 'dart:typed_data';
import 'package:args/args.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
import './init.dart';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main(List<String> arguments) async {
await initSherpaOnnx();
await sherpa_onnx.initBindingsAsync();
final parser = ArgParser()
..addOption('silero-vad', help: 'Path to silero_vad.onnx')
-96
View File
@@ -1,96 +0,0 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
args:
dependency: "direct main"
description:
name: args
sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a"
url: "https://pub.dev"
source: hosted
version: "2.5.0"
characters:
dependency: transitive
description:
name: characters
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
url: "https://pub.dev"
source: hosted
version: "1.3.0"
collection:
dependency: transitive
description:
name: collection
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.dev"
source: hosted
version: "1.18.0"
ffi:
dependency: transitive
description:
name: ffi
sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
flutter:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
lints:
dependency: "direct dev"
description:
name: lints
sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290
url: "https://pub.dev"
source: hosted
version: "3.0.0"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
url: "https://pub.dev"
source: hosted
version: "0.8.0"
meta:
dependency: transitive
description:
name: meta
sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
url: "https://pub.dev"
source: hosted
version: "1.12.0"
path:
dependency: "direct main"
description:
name: path
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
url: "https://pub.dev"
source: hosted
version: "1.9.0"
sherpa_onnx:
dependency: "direct main"
description:
name: sherpa_onnx
sha256: e45894f81e7c854ca96d678bcab5303036e884a7c90e9a6c4ec04c7b1ee215a8
url: "https://pub.dev"
source: hosted
version: "1.9.29"
sky_engine:
dependency: transitive
description: flutter
source: sdk
version: "0.0.99"
vector_math:
dependency: transitive
description:
name: vector_math
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
sdks:
dart: ">=3.4.0 <4.0.0"
flutter: ">=3.3.0"
+1 -1
View File
@@ -6,7 +6,7 @@ description: >
version: 1.0.0
environment:
sdk: ">=3.0.0 <4.0.0"
sdk: ">=3.2.0 <4.0.0"
dependencies:
sherpa_onnx: ^1.13.5
+136
View File
@@ -0,0 +1,136 @@
# Version Example
This example shows how to initialize sherpa-onnx and print version information.
It demonstrates four different ways to initialize the library.
## Prerequisites
- [Dart SDK](https://dart.dev/get-dart) (3.0.0 or later)
- sherpa-onnx native library (installed automatically via pub dependencies)
## Quick Start
```bash
cd dart-api-examples/version
./run.sh
```
This runs all four examples below.
## Examples
### 1. Sync Init (`main_sync.dart`)
The simplest way to initialize sherpa-onnx. Calls `initBindings()` which
blocks until the native library is loaded.
```dart
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main() {
sherpa_onnx.initBindings();
print('version: ${sherpa_onnx.getVersion()}');
}
```
**When to use:** Simple scripts, command-line tools, and Flutter apps where
you don't need async initialization.
**Does NOT work on web.** Use `initBindingsAsync()` for web support.
### 2. Async Init (`main_async.dart`)
Calls `initBindingsAsync()` which returns a `Future`. This is the recommended
approach because it works on all platforms including web.
```dart
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main() async {
await sherpa_onnx.initBindingsAsync();
print('version: ${sherpa_onnx.getVersion()}');
}
```
**When to use:** Anywhere. This is the safest choice that works on Flutter,
Dart CLI, and web.
### 3. Isolate with Sync Init (`main_isolate_sync.dart`)
Demonstrates using sherpa-onnx in a Dart isolate with synchronous
initialization.
**Key concept:** Each isolate has its own memory space and FFI bindings.
You MUST call `initBindings()` or `initBindingsAsync()` in every isolate
that uses sherpa-onnx. Calling it in one isolate does NOT make sherpa-onnx
available in other isolates.
```dart
import 'dart:isolate';
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void worker(SendPort sendPort) {
// MUST initialize in this isolate too!
sherpa_onnx.initBindings();
sendPort.send(sherpa_onnx.getVersion());
}
void main() async {
// Initialize in the main isolate.
sherpa_onnx.initBindings();
print('main: ${sherpa_onnx.getVersion()}');
// Spawn a worker isolate.
final receivePort = ReceivePort();
await Isolate.spawn(worker, receivePort.sendPort);
final version = await receivePort.first;
print('worker: $version');
}
```
**When to use:** Background processing (e.g., TTS generation, model loading)
where you want synchronous initialization in each isolate.
### 4. Isolate with Async Init (`main_isolate_async.dart`)
Same as above but uses `initBindingsAsync()` in both isolates.
```dart
void worker(SendPort sendPort) async {
await sherpa_onnx.initBindingsAsync(); // async init
sendPort.send(sherpa_onnx.getVersion());
}
void main() async {
await sherpa_onnx.initBindingsAsync(); // async init
// ... spawn isolate as before
}
```
**When to use:** Same as the sync isolate example, but when you prefer
async initialization (e.g., in Flutter apps or web-compatible code).
## How Initialization Works
When you call `initBindings()` or `initBindingsAsync()`:
1. The library detects the current platform (macOS, Linux, Windows, iOS,
Android, or web).
2. It locates the native `sherpa-onnx-c-api` library:
- **Flutter apps:** The library is linked into the app bundle by the
build system. `DynamicLibrary.process()` loads it directly.
- **Dart CLI:** The library is located in the pub cache via
`Isolate.resolvePackageUri()`. `DynamicLibrary.open()` loads it
from disk.
- **Web:** The WASM module is loaded from bundled assets.
3. Once loaded, all sherpa-onnx APIs become available in that isolate.
## API Reference
| Function | Sync/Async | Flutter | Dart CLI | Web |
|---|---|---|---|---|
| `initBindings()` | Sync | ✅ | ✅ | ❌ |
| `initBindingsAsync()` | Async | ✅ | ✅ | ✅ |
Both functions accept an optional path argument to override the auto-detected
native library location. In most cases you don't need to pass a path.
-1
View File
@@ -1 +0,0 @@
../../vad/bin/init.dart
@@ -0,0 +1,16 @@
// Copyright (c) 2026 Xiaomi Corporation
//
// Example: async initialization using initBindingsAsync().
//
// initBindingsAsync() works on all platforms (Flutter, Dart CLI, Web).
// It auto-resolves the native library path on Dart CLI and loads WASM on web.
import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx;
void main() async {
await sherpa_onnx.initBindingsAsync();
print('sherpa-onnx version: ${sherpa_onnx.getVersion()}');
print('sherpa-onnx git sha1: ${sherpa_onnx.getGitSha1()}');
print('sherpa-onnx git date: ${sherpa_onnx.getGitDate()}');
print('onnxruntime version: ${sherpa_onnx.getOnnxruntimeVersion()}');
}
Loaded 100 of 139 files, more files were not shown because too many files have changed in this diff. Show more