inference method
Implementation
AiliaVoiceResult inference(String inputFeature) {
AiliaVoiceResult result = AiliaVoiceResult(
sampleRate: 0,
nChannels: 0,
pcm: List<double>.empty(),
);
if (!available) {
print("Model not opened");
return result;
}
if (debug){
print("ailiaVoiceInference");
}
int status = ailiaVoice.ailiaVoiceInference(ppAilia!.value, inputFeature.toNativeUtf8().cast<ffi.Char>());
throwError("ailiaVoiceInference", status);
if (debug){
print("ailiaVoiceGetWaveInfo");
}
final ffi.Pointer<ffi.UnsignedInt> samples = malloc<ffi.UnsignedInt>();
final ffi.Pointer<ffi.UnsignedInt> channels = malloc<ffi.UnsignedInt>();
final ffi.Pointer<ffi.UnsignedInt> samplingRate = malloc<ffi.UnsignedInt>();
status = ailiaVoice.ailiaVoiceGetWaveInfo(
ppAilia!.value,
samples,
channels,
samplingRate,
);
throwError("ailiaVoiceGetWaveInfo", status);
if (debug){
print("ailiaVoiceGetWaves");
}
final ffi.Pointer<ffi.Float> buf =
malloc<ffi.Float>(samples.value * channels.value);
int sizeofFloat = 4;
status = ailiaVoice.ailiaVoiceGetWave(
ppAilia!.value,
buf,
samples.value * channels.value * sizeofFloat,
);
throwError("ailiaVoiceGetWaves", status);
List<double> pcm = List<double>.empty(growable: true);
for (int i = 0; i < samples.value * channels.value; i++) {
pcm.add(buf[i]);
}
AiliaVoiceResult resultPcm = AiliaVoiceResult(
sampleRate: samplingRate.value,
nChannels: channels.value,
pcm: pcm,
);
if (debug){
print(
"ailiaVoice output ${samples.value} ${samplingRate.value} ${channels.value}");
}
malloc.free(buf);
malloc.free(samples);
malloc.free(channels);
malloc.free(samplingRate);
return resultPcm;
}