import 'dart:io'; import 'dart:typed_data'; import 'package:flutter_test/flutter_test.dart'; import 'package:kouyu_english/core/sherpa_stt_service.dart'; import 'package:sherpa_onnx/sherpa_onnx.dart' as sherpa_onnx; void main() { TestWidgetsFlutterBinding.ensureInitialized(); test('SherpaSttService transcribes WAV audio file accurately', () async { const macosDir = '/Users/shen/.pub-cache/hosted/pub.dev/sherpa_onnx_macos-1.13.8/macos'; // Test direct Sherpa ASR initialization and decoding with bundled test audio sherpa_onnx.initBindings(macosDir); final modelConfig = sherpa_onnx.OfflineModelConfig( transducer: const sherpa_onnx.OfflineTransducerModelConfig( encoder: 'assets/models/sherpa/encoder-epoch-99-avg-1.int8.onnx', decoder: 'assets/models/sherpa/decoder-epoch-99-avg-1.int8.onnx', joiner: 'assets/models/sherpa/joiner-epoch-99-avg-1.int8.onnx', ), tokens: 'assets/models/sherpa/tokens.txt', numThreads: 2, debug: false, ); final recognizerConfig = sherpa_onnx.OfflineRecognizerConfig( model: modelConfig, feat: const sherpa_onnx.FeatureConfig(sampleRate: 16000, featureDim: 80), ); final recognizer = sherpa_onnx.OfflineRecognizer(recognizerConfig); const testWave = '/tmp/sherpa_test/sherpa-onnx-zipformer-small-en-2023-06-26/test_wavs/0.wav'; if (File(testWave).existsSync()) { final wave = sherpa_onnx.readWave(testWave); expect(wave.samples.isNotEmpty, isTrue); final stream = recognizer.createStream(); stream.acceptWaveform(samples: wave.samples, sampleRate: wave.sampleRate); recognizer.decode(stream); final result = recognizer.getResult(stream); print("Transcribed result: ${result.text}"); expect(result.text.contains("NIGHTFALL"), isTrue); stream.free(); } recognizer.free(); }); }