Je rencontre des problèmes lors de l'implémentation FFTPitchDetector
. Ce que je veux réellement faire est d'obtenir la fréquence en temps réel de la guitare, je ne sais pas comment utiliser les fonctions dans FftPitchDetector.cs
. Une idée?IndexOutOfRangeException lors de l'exécution FFTPitchDetector
private void sourceStream_DataAvailable(object sender, NAudio.Wave.WaveInEventArgs e)
{
if (waveWriter == null) return;
byte[] buffer = e.Buffer;
float[] floats = new float[buffer.Length];
float sample32 = 0;
int bytesRecorded = e.BytesRecorded;
waveWriter.Write(buffer, 0, bytesRecorded);
for (int index = 0; index < e.BytesRecorded; index += 2)
{
short sample = (short)((buffer[index + 1] << 8) |
buffer[index + 0]);
sample32 = sample/32768f;
sampleAggregator.Add(sample32);
}
floats = bytesToFloats(buffer);
FftPitchDetector PitchDetect = new FftPitchDetector(sample32);
PitchDetect.DetectPitch(floats, bytesRecorded);
Console.WriteLine("{0}",sample32);
}
private static float[] bytesToFloats(byte[] bytes)
{
float[] floats = new float[bytes.Length/2];
for (int i = 0; i < bytes.Length; i += 2)
{
floats[i/2] = bytes[i] | (bytes[i + 1] << 8);
}
return floats;
}
Lorsque j'exécute le code, il y a une erreur IndexOutOfRangeException was unhandled
qui pointe vers la ligne
fftBuffer[n * 2] = buffer[n-inFrames] * window(n, frames);
dans fftPitchDetector.cs
. Quel est le problème dans mon code?
Y at-il un code source libre de C# Guitar Tuner? Je souhaite l'externaliser dans mon projet.
à partir du code ci-dessus pouvez-vous comprendre les problèmes? Je ne peux pas trouver lequel est le problème :( –