-
Notifications
You must be signed in to change notification settings - Fork 0
/
whisper.dart
46 lines (31 loc) · 1.38 KB
/
whisper.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:wav/wav.dart';
import 'package:flutter/services.dart';
import 'package:ailia_speech/ailia_speech.dart' as ailia_speech_dart;
import 'package:ailia_speech/ailia_speech_model.dart';
class AudioProcessingWhisper {
final AiliaSpeechModel _ailiaSpeechModel = AiliaSpeechModel();
void _intermediateCallback(String text){
}
Future<String> transcribe(Wav wav, File onnx_encoder_file, File onnx_decoder_file, int env_id) async{
_ailiaSpeechModel.create(false, false, env_id);
_ailiaSpeechModel.open(onnx_encoder_file, onnx_decoder_file, null, "auto", ailia_speech_dart.AILIA_SPEECH_MODEL_TYPE_WHISPER_MULTILINGUAL_TINY);
List<double> pcm = List<double>.empty(growable: true);
for (int i = 0; i < wav.channels[0].length; ++i) {
for (int j = 0; j < wav.channels.length; ++j){
pcm.add(wav.channels[j][i]);
}
}
//_ailiaSpeechModel.setIntermediateCallback(_intermediateCallback);
_ailiaSpeechModel.pushInputData(pcm, wav.samplesPerSecond, wav.channels.length);
_ailiaSpeechModel.finalizeInputData();
String transcribe_result = "";
List<SpeechText> texts = _ailiaSpeechModel.transcribeBatch();
for (int i = 0; i < texts.length; i++){
transcribe_result = transcribe_result + texts[i].text;
}
_ailiaSpeechModel.close();
return transcribe_result;
}
}