2012-05-07 10 views
5

Próbuję zrobić prosty "wirtualny scratcher", ale nie znam teorii, która za tym stoi. Ponieważ nie znalazłem nic przydatnego w google, pytam tutaj:Jak naśladować efekt Scratch Vinyl w Audio Processing?

  • Co stanie się, gdy się podrapię (przesunę ścieżkę do przodu)? Czy podnoszę wysokość i/lub szybkość próbki?
  • Jak mogę emulować to zjawisko za pomocą algorytmów przetwarzania dźwięku?

Przykładowy kod/samouczki byłyby reeeally docenione :-)

+0

P: Jak teraz edytujesz swoje ścieżki audio? Z jakiego oprogramowania korzystasz? W razie potrzeby połączyłem efekty "scratch", "siss" lub "pop". Na przykład: http://free-loops.com/5174-short-record-scratch.html – paulsm4

+0

Używam języka Java, ponieważ rozwijam go jako aplikację dla systemu Android. Nadal nie wiem, czy powinienem użyć domyślnego przetwarzania dźwięku Java lub OpenSL. To zależy, czy emulacja "scratch" oznacza zmianę pitch/rate lub innych funkcji, których Java nie ma. EDYCJA: moja aplikacja pozwoli użytkownikowi kontrolować utwór jak prawdziwy winyl. Pozwalając mu przesuwać go w przód/w tył podczas gry i uzyskać efekt "zadrapania" – user1118094

+0

Może to być nieco trudne, ponieważ Android nie pozwoli ci uzyskać bezpośredniego dostępu do próbek audio (uwaga: nie jestem programistą Androida, to jest to, co słyszałem, może się mylić o to). Powiedział, że konkretny efekt, którego szukasz, nazywa się "Varispeed", co powinno dać ci wystarczającą ilość informacji, by rozpocząć badanie. Prawdopodobnie będziesz chciał dodać dodatkowy hałas, aby dokończyć efekt. – admsyn

Odpowiedz

5

Co się dzieje, gdy drapię (przesuń ścieżkę do przodu)? Czy podniosę rytm i/lub szybkość próbki ?

Pomyśl o tym, co się faktycznie dzieje: Rekord zawiera dane audio. Igła rekordowa odczytuje dane audio z rekordu. Gdy rekord się obróci, zmieni się pozycja odtwarzania. (Jest to bardzo podobne do oglądania ruchów głowicy przez plik audio w cyfrowym edytorze audio.)

Kiedy fizycznie obrócisz płytę szybciej, zwiększasz szybkość odtwarzania. Dźwięk jest zarówno szybszy, jak i wyższy. Zwiększ szybkość odtwarzania o dwa, a dźwięk będzie odtwarzany o oktawę wyżej.

Kiedy fizycznie obrócisz wolniej, zmniejszasz szybkość odtwarzania. Dźwięk jest zarówno wolniejszy, jak i mniejszy. Zmniejsz szybkość odtwarzania o dwa, a dźwięk zostanie odtworzony o oktawę niżej.

Rekordy mogą modyfikować odtwarzanie audio jedynie poprzez przyspieszenie lub spowolnienie fizycznego zapisu, co wpływa zarówno na wysokość, jak i częstotliwość odtwarzania. Niektóre programy audio mogą niezależnie zmieniać wysokość i tempo. Rekordzący gracze nie mogą.

(Get gramofon i eksperymentować, aby usłyszeć, co brzmi jak.)

Jak mogę naśladować to zjawisko z algorytmami przetwarzania dźwięku?

Aby emulować utwór nagrany przez DJ, należy ustawić częstotliwość odtwarzania dźwięku, gdy użytkownik "drapie".

Gdy użytkownik przyspiesza nagrywanie, zwiększ szybkość odtwarzania. Gdy użytkownik spowalnia zapis, spowalnia szybkość odtwarzania.

Gdy użytkownik zatrzyma nagrywanie, całkowicie zatrzymaj odtwarzanie.

Gdy użytkownik obróci nagranie do tyłu, odwróć odtwarzanie.

Nie trzeba zmieniać wysokości dźwięku. Zmiana szybkości odtwarzania zrobi to automatycznie. Wszelkie dalsze korekty pitch będą brzmiały nieprawidłowo.

Nie mam żadnej porady w odniesieniu do bibliotek, ale coś takiego nie jest zbyt trudne do wdrożenia, jeśli nie spiesz się.

1

Kiedy porysować, jesteś po prostu przesuwając rekord iz powrotem pod igłą. Odpowiada to pętli do przodu i do tyłu wielokrotnie w tej samej części pliku audio. Sądzę, że prędkość jest gdzieś pomiędzy falą sinusoidalną a falą trójkąta. Będziesz musiał wykonać interpolację liniową na próbce.

W przypadku aplikacji mobilnej zacznę od odwzorowania jednej osi ekranu na zakres czasowy w pliku audio. Zachowaj bufor zawierający ostatnie MotionEvent. Gdy nadejdzie następny MotionEvent, oblicz odwzorowane pozycje początkową i końcową na podstawie współrzędnych (X,Y). Następnie obliczyć upływ czasu między dwoma MotionEvents. Daje to wystarczającą ilość informacji do odtworzenia z pliku we właściwej pozycji i prędkości, stale aktualizując przy każdym zdarzeniu ruchu.

Być może trzeba będzie wygładzić dane, ale to jest punkt wyjścia.

1

Może okazać się, że potrzebny jest resampler o zmiennej szybkości. Przyspieszy to szybkość gry i zwiększy skok o taki sam współczynnik.

Użytkownik może śledzić stosunek prędkości kątowej ruchu "zarysowania" do normalnej prędkości obracania talerza i używać go jako lokalnego współczynnika resampling.

Istnieje dużo lepsza (wyższa jakość dźwięku) metody DSP do wykonywania resamplingu niż interpolacja liniowa, np. Przy użyciu jądra interpolacji o zmiennej szerokości.