Próbuję wdrożyć grę śpiewającą, która będzie analizować dane wejściowe mikrofonu i mówić graczowi, jak dobrze śpiewa. To musi być zrobione w czasie rzeczywistym.
Natknąłem się na wiele wątków zadających to samo pytanie, ale wciąż nie jestem w stanie tego zrobić, prawdopodobnie z powodu mojego braku doświadczenia w tej dziedzinie i małej wiedzy matematycznej. Wdrożyłem algorytm oparty na artykule DSPDimension w artykule dotyczącym zmiany wysokości boiska: http://www.dspdimension.com/admin/pitch-shifting-using-the-ft/
Wyodrębniam prawdziwą częstotliwość i wielkość, tak jak wyjaśnia to artykuł, ale nie wiem, jak znaleźć częstotliwość podstawową. Próbowałem uzyskać bin z największą wielkością, ale to daje mi tylko dobre wyniki dla sygnałów o wyższej częstotliwości, nie ma znaczenia, którego współczynnika nadpróbkowania używam Nadal otrzymuję złe dane dla sygnałów o niskiej częstotliwości. Czy to podejście jest całkowicie niewłaściwe, czy jestem na dobrej drodze, ale czegoś brakuje?
Z góry dziękuję,
EDYCJA: Zapomniałem wspomnieć, że interesuję się tylko klasą boiska, więc nie ma problemu, jeśli brakuje podstawy, ale mam silną nutę w próbce.
EDIT2: Dzięki wszystkim właśnie ukończyłem wersję algorytmu, która działa jak urok. Problem z oszacowaniem niskiej częstotliwości wynikał z mojego testu wejściowego. Kiedy zaśpiewałem notatkę, pasowała ona poprawnie. Rozważam teraz wszystkie harmoniczne, a nie tylko najwyższy szczyt.