getPitchFromAudioData method
Implementation
Future<double> getPitchFromAudioData(Uint8List audioData) async {
_accumulatedData.addAll(audioData);
const int bytesPerSample = 2;
double pitch = 0;
int neededBytes = NeomGeneratorConstants.neededSamples * bytesPerSample;
while (_accumulatedData.length >= neededBytes) {
// Extraemos los primeros neededBytes
final chunk = _accumulatedData.sublist(0, neededBytes);
// Los removemos del acumulado para postearior analisis del buffer
_accumulatedData.removeRange(0, neededBytes);
final pitchDetectorDart = PitchDetector(
audioSampleRate: NeomGeneratorConstants.sampleRate.toDouble(),
bufferSize: NeomGeneratorConstants.neededSamples,
);
try {
final chunkAsUint8List = Uint8List.fromList(chunk);
PitchDetectorResult pitchResult = await pitchDetectorDart.getPitchFromIntBuffer(chunkAsUint8List);
pitch = pitchResult.pitch.roundToDouble();
} catch (e) {
AppConfig.logger.e("Pitch detector error: $e");
}
}
return pitch;
}