Wysokiej jakości algorytm pogłosu

11

Przeprowadziłem trochę wyszukiwania na tej stronie, ale, co zaskakujące, nie znalazłem wielu istotnych informacji, a moja wiedza na temat DSP jest bardzo ograniczona.

Mój cel jest dość prosty: chcę zaprogramować pogłos algorytmiczny w C ++, który brzmi naprawdę dobrze. A dokładniej, najlepszą opcją byłoby pozwolenie użytkownikowi końcowemu na wybór kompromisu między jakością a użytkowaniem procesora.

Z tego, co do tej pory odkryłem, jest to, że aby stworzyć pogłos, musisz wprowadzić suchy sygnał do algorytmu wczesnych odbić, a następnie do algorytmu późnych odbić. Czy to jest poprawne ?

Teraz znalazłem obszerny artykuł na temat części późnych refleksji, używając sieci opóźnień od sprzężenia zwrotnego ( REDUKUJĄC WYMAGANIA ODWIEDZANIA SZTUCZNEGO PRZY WYKORZYSTANIU SIECI OPÓŹNIANIA OPÓŹNIONEGO CZASEM ). Z tego, co przeczytałem, FDN jest wysokiej jakości, niezbyt ekspansywnym (pod względem procesora) sposobem symulowania późnych refleksów. Co więcej, myślę, że możesz kontrolować kompromis jakości / opłaty procesora, zmieniając liczbę linii opóźniających.

Jednak absolutnie nie mam pojęcia, jak zaprogramować algo wczesnych refleksów (pamiętasz? Naprawdę jestem ignorantem w dziedzinie DSP).

Logiczne byłoby dla mnie zastosowanie pewnego rodzaju opóźnień, które mają tę zaletę, że są łatwe w programowaniu i niedrogie obliczeniowo. Ale to brzmi zbyt prosto, aby mogło być prawdziwe.

Co więcej, mój instynkt podpowiada mi, że jeden lub kilka filtrów musi znajdować się gdzieś na ścieżce sygnału.

Czy ktoś mógłby mi wyjaśnić ten temat?

Dwie notatki:

  • W ogóle nie chcę pogłosu konwolucji. Tak naprawdę nie dbam o realizm pogłosu, ale zamiast tego chcę dobrze brzmiącego, dostrajalnego, nie pogłębiającego procesora pogłosu.
  • Również część kodująca nie jest tym, co mnie martwi, w przeciwnym razie zapytałbym o przepełnienie stosu. To naprawdę część DSP, i właśnie ta część, której szukam :)
Dinaiz
źródło

Odpowiedzi:

10

Musisz wygenerować wczesne refleksje z kilkoma dotknięciami opóźnień (= splot z sumą garści diraków); oraz „ogon” z tym, co zwykle jest realizowane za pomocą sieci filtrów All-Pass (AP) i grzebieniowych.

Pierwsza część jest łatwa do zaimplementowania, ale trudno ją zabrzmieć poprawnie. Pomocne może być spojrzenie na położenie szczytów na początku wcześniej zarejestrowanych odpowiedzi impulsowych, aby dowiedzieć się, jakie odpowiedzi są „naturalne”. Trudno jest łatwo sparametryzować go za pomocą kilku ustawień, choć można to zrobić, oferując kilka ustawień wstępnych dla tej części, aby uzyskać „hybrydowy” pogłos à la Virsyn Reflect.

Na ogonie świecą algorytmiczne pogłosy (bez zamierzonej gry słów), ponieważ można go łatwo parametryzować. Dziadek algorytmicznych pogłosów należy do Schroederaalgorytm. Pamiętaj, że generuje tylko „ogon”, a nie wczesne odbicia - możesz go powiększyć kilkoma dotknięciami opóźnień, aby nadać mu głowę. Nie brzmi to zbyt dobrze (bardzo „ziarniście”), ale jest przyzwoitym początkiem - z tym masz coś do zepsucia i pomaga zrozumieć wpływ każdego parametru. Wiele chwalonych pogłosów algorytmicznych, szczególnie tych z lat 80. (Leksykon, Eventide, Publison), to właśnie dokładnie dostrojone topologie filtrów wieloprzebiegowych i filtrów grzebieniowych. Podejrzewam, że wiązało się to z wieloma próbami i błędami wyszkolonych uszu, którzy bardzo dobrze potrafili dowiedzieć się, jak będą brzmiały zmiany parametrów lub topologii, a nie jakiekolwiek podejście naukowe. Oto kolejna interesująca lektura- pokazując ulubioną topologię pogłosu Keitha Barra. Oryginalna midiverb może nie być twoją definicją „wysokiej jakości pogłosu algorytmicznego”, ale brzmiał słodko i daje perspektywę, aby wiedzieć, że został wykonany z „dsp” zdolnym tylko do MAC o współczynnikach 0,5 ...

Pokój Valhalla to mój ulubiony programowy pogłos algorytmiczny - poświęć trochę czasu na przeczytanie bloga dewelopera, aby znaleźć inspirację na temat tego, co pomaga w jego poprawnym wykonaniu.

fenenety
źródło
2
Zapomniałem wspomnieć o Freeverb jako bardziej nowoczesnym wariancie (z dostępnym kodem, można go znaleźć np. W csound lub w bazie kodu ladspa) algorytmu Schroedera.
fenenety
Bardzo interesujące ! Uwielbiam też produkty Valhalla (ValhallaShimmer świeci, nie ma też zamiaru gry słów :)). Dlaczego wspominasz splot dla wczesnej refleksji? Czy wystarczy zwykłe opóźnienie przy wielokrotnym naciśnięciu?
Dinaiz
1
Wspomniałem o splotie, ponieważ „opóźnienie wielozadaniowe” jest tylko szczególnym rodzajem splotu (z kilkoma niezerowymi współczynnikami, więc można go obliczyć naiwnie i bez artylerii związanej z „gęstymi” splotami). W każdym razie, jak wskazał Hilmar, opóźnienie multitap może być nieco zbyt naiwne i po kilku odbiciach, więc czasowo rozprzestrzeniające się (= filtrowanie dolnoprzepustowe) echo zabrzmi bardziej naturalnie. Można to zrobić z opóźnieniem wielu dotknięć z prostym LP dla każdego dotknięcia; lub bezpośrednio obliczając całą część pogłosu z wczesnym odbiciem za pomocą silnika splotu i zaprogramowanych IR.
fenenety
8

Wykonanie dobrze brzmiącego pogłosu wcale NIE jest łatwe. Sieci opóźniające sprzężenie zwrotne są zdecydowanie najlepszym rozwiązaniem. Oryginalne algorytmy Schroedera ze wszystkimi przepustami i filtrami grzebieniowymi cierpią na „przerzedzenie spektralne”, co sprawia, że ​​brzmi metalicznie. Musisz wybrać tłumienie zależne od częstotliwości na różnych liniach opóźniających, które są reprezentatywne dla czasu pogłosu (jako funkcja częstotliwości). Wczesne odbicia można wykonać za pomocą linii opóźnionego podsłuchu, również z pewnym tłumieniem zależnym od częstotliwości i kilkoma rozpraszaczami, aby je skorelować. Wykonanie stereo wymaga również pewnych środków dekorelacji.

Istnieje dość dobra implementacja open source, nazywa się GVerb i jest używana na przykład w Audacity. Wyszukiwarka Google powinna doprowadzić do (legalnej) kopii kodu źródłowego.

Hilmar
źródło
Z Twojego postu brzmi łatwo! Przynajmniej mogę to zrozumieć, z wyjątkiem części dotyczącej dekorelacji. Co dokładnie przez to rozumiesz? Także jeśli chodzi o zależność od częstotliwości, myślę, że masz na myśli wyrzucenie niektórych filtrów i dostrajanie przez ucho to częstotliwości dla każdej linii. O jakim filtrze mówimy? HP? LP? BP? Dzięki !
Dinaiz