Odtwarzanie utworu muzycznego z mniejszą prędkością obniżyłoby jego wysokość (częstotliwość). Czy istnieje narzędzie i teoria spowalniająca odtwarzanie utworu, przy jednoczesnym utrzymaniu tej samej częstotliwości? Podejrzewam, że można wykonać okienkową transformatę Fouriera lub falkę. Wydaje się, że trzeba albo wstępnie wybrać rozmiar okna, albo dynamicznie wybrać podstawę falki. Czy istnieje jakaś konkretna i szczegółowa teoria i zastosowanie do tego?
10
Odpowiedzi:
Tak, niektórzy z nas mogą to zrobić, możesz przyspieszyć lub zwolnić bez wpływu na wysokość, niektórzy nazywają to aplikacjami Time Stretch, istnieją różne sposoby, możesz to zrobić w dziedzinie częstotliwości lub dziedzinie czasu, będziesz musiał wybrać co jest dla Ciebie najlepsze, znajdziesz wady i zalety każdego z nich.
Domena czasu:
W domenie czasu możesz wypróbować kilka technik, takich jak:
Plusy: Jest szybki, niektóre algorytmy są łatwe do zrozumienia, dobra jakość w dźwiękach monofonicznych.
Minusy: Ogólnie rzecz biorąc, potrzebujesz bardzo dobrej ścieżki do łączenia w odpowiedniej pozycji, trudno to zrobić :-(, więc jeśli twoja ścieżka nie działa lub nie działa w dźwiękach polifonicznych, algorytmy te dają wiele błędów / artefaktów w dźwięku wyjściowym.
Domena częstotliwości:
Cały odcinek czasu, który znam w dziedzinie częstotliwości, oparty jest na wokoderze fazowym technikach .
Plusy: będą działać przy dźwiękach polifonicznych lub monofonicznych.
Minusy: Może być bolesne zrozumienie całej matematyki, implementacja jest nieco trudna, nie jest tak szybka jak kody w dziedzinie czasu, dla głosu wolę wyniki w dziedzinie czasu, niektóre sztuczki w celu poprawy wyniku standardowego wokodera fazy nie są wspólne.
Mogę powiedzieć, że rozmiar okna i przeskoku jest jednym z kluczowych parametrów jakości wokodera fazowego, generalnie wybieramy
4x
nakładanie się na resyntezę, jedno okno wielkości hann4096
jest wystarczające dla moich uszu (oczywiście jeśli masz moc przetwarzania dla tych rozmiarów) , standardowy wokoder fazy może dodać efekty pogłosu, aby uniknąć tego rodzaju problemów, które mogą być potrzebne do zablokowania fazy.Dla datailed spojrzeć w Miller Puckette i Portnoff papieru
źródło
44100 * 60 = 2646000
punktach na raz i przetworzyć, więc zapomnij o wszelkich próbach przetwarzania takich informacji w czasie rzeczywistym tę ,Narzędzie / teoria, którą opisujesz, to tak naprawdę duży obszar badań w dziedzinie technologii muzycznej, szeroko nazywany dźwiękową modyfikacją skali czasu. Dużym elementem tego pola jest sposób zapobiegania słyszalnym zmianom częstotliwości po rozciągnięciu czasu. Można do tego podejść zarówno metodami w dziedzinie częstotliwości, jak i w dziedzinie czasu, w zależności od ograniczeń lub celów aplikacji. Wpis w Wikipedii dotyczący modyfikacji skali czasu / wysokości dźwięku jest dobrym punktem wyjścia.
Jeśli chcesz zastosować podejście oparte na częstotliwości / falce, rozmiar okna i wybór podstawy wpłynie na to, jak dobrze jesteś w stanie zlokalizować sygnał. Aby użyć STFT jako przykładu, długie okno będzie działać dobrze dla stacjonarnych sinusoid, ale zniszczy twoje transjenty. Krótsze okno zapewni preferowaną odpowiedź przejściową kosztem lokalizacji w dziedzinie częstotliwości. Wydajność innych baz falkowych będzie zależeć od charakteru projekcji twojego sygnału na podstawę.
źródło
Poniżej znajduje się link do prostej i wartościowej funkcji samouczka w C ++ (smbPitchShift.cpp) autorstwa Stephana M. Bernsee, która może spowalniać lub przyspieszać muzykę bez zmiany jej wysokości.
Wydał ten kod na licencji The Wide Open License (WOL). W mojej aplikacji mogłem dostosować jego funkcję do spowolnienia muzyki czasie rzeczywistym - to znaczy podczas odtwarzania pliku mp3 i dodatkowo wykrywania wysokości dźwięku na tym sygnale mp3 w tym samym czasie.
Zamieściłem również link do strony internetowej Bernsee, która zawiera jego szczegółowe opisy dotyczące rozciągania w czasie i zmiany wysokości sygnałów audio, takich jak muzyka.
https://github.com/AndyA/BatPhone/blob/master/pitchshift.c
http://blogs.zynaptiq.com/bernsee/time-pitch-overview/
źródło
time stretch
, oryginalny kod ma zastosowaniePitch Shift
, w tym przypadku, aby zastosować modyfikację skali czasu, którą musisz połączyćPitch Shifit + Resample (interpolation)
, kod Bernsee działa dobrze, używając okna o rozmiarze, w4096
którym będziesz mógł przesunąć tonację o jedną oktawę (powyżej lub poniżej) oznacza to, że odpowiednio będziesz w stanie wykonać skalę czasu tylko przy dobrej jakości, stosując współczynniki między 2,0x-0,5x, dobrze zbudowany wokoder fazowy może osiągnąć lepsze wyniki przy tym samym rozmiarze okna, i będziesz mógł ekstrapolować te czynniki o lepszej jakości8192
w kodach ze strony pobierania, więc musisz zrobić 4x więcej punktów do przetworzenia , Wracam do stwierdzenia, że przy rozmiarze połowy okna8192/2=4096
możesz zrobić to samo, używając kilku sekretów wokodera fazowego, chodzi tutaj o to, że możesz zachować jakość przy znacznie mniejszym przetwarzaniu.