2009-03-20 20 views
29

W pierwszej klasie programowania oprogramowania musieliśmy napisać program, który symulowałby dźwięk gitary.Jak wygenerować notatkę gitary

Mogę robić fale czystego grzechu przez cały dzień, ale staram się pamiętać, jak zrobić dźwięk jak gitarowy zryw. Pamiętam, że miało to coś wspólnego z użyciem random() i stałą falloff dodaną do fali grzechu, ale nie pamiętam szczegółów.

+0

Można nagrywać i wizualizować fale dźwiękowe za pomocą oprogramowania. To może dać ci kilka pomysłów. –

+2

Palec wybrany lub z piciem? ;) –

+0

Pomocne może być również oprogramowanie do analizy za pomocą dft. Może matlab. – Vasil

Odpowiedz

21

To naprawdę trudny problem z generowaniem syntetycznych dźwięków, które brzmią naturalnie. Istnieje wiele technik - niektóre proste, niektóre naprawdę skomplikowane. Aby uzyskać dobre wyniki, będziesz musiał użyć jednego z bardziej złożonych algorytmów.

  • syntezy subtraktywna
  • dodatku synteza
  • syntezy Granulat
  • WAVETABLE
  • częstotliwości syntezy modulacji
  • etap syntezy zniekształcenia
  • syntezy modelowanie fizyczne
  • Synteza próbki oparte
  • Synteza subharmoniczna

Oto niektóre metody syntezy zaczerpnięte z Wikipedia. Modelowanie fizyczne może generować naprawdę dobre dźwięki, ale to pokazuje złożoność metody - pomysł jest prosty, a wdrożenie trudne.

Powinieneś prawdopodobnie zacząć od syntezy dodatków. Do tego wystarczy dodać fale sinusoidalne podstawowej częstotliwości i liczby całkowitej mnożonej. Na przykład 440 Hz, 880 Hz, 1320 Hz, ... Amplituda powinna spadać wykładniczo wraz z częstotliwością. Informacje na temat struktury komponentów można znaleźć w materiałach naukowych dotyczących analizy instrumentów muzycznych. Na koniec należy modulować amplitudę sygnału za pomocą obwiedni czasowej. Strukturę gitary można znaleźć również w wymienionych artykułach.


linków z cdonner (Plucking a Guitar String - Karplus-Strong algorithm) i Dervin Thunk (Physical modeling) brzmią obiecująco. Naprawdę proste przybliżenie pełnego modelowania fizycznego za pomocą równań różniczkowych. Może dość ograniczone do strun gitarowych i podobnych instrumentów, ale dokładnie tego, czego szukasz i na pewno łatwiejsze niż dostrajanie modelu addytywnego. Sam spróbuję, jeśli znajdę jakiś czas w ciągu weekendu; naprawdę wyszedł z tego, co można uzyskać z algorytmu.

2

Jako punkt wyjścia, warto przyjrzeć się niektórym falom dźwięków gitary. Chciałbym sprawdzić this posting przez Bob Sturm na MathWorks File Exchange. Wygląda na to, że zawiera kilka demonów przetwarzania sygnałów, a niektóre pliki .wav są dołączone do wielu instrumentów, w tym gitary. Możesz załadować je do MATLAB-a za pomocą WAVREAD, a następnie rozpocząć ustalanie, w jaki sposób można replikować kształt fali (tj. Jakiego rodzaju zaniku z czasem użyjesz itp.).

4

Synteza gitary jest szczególnie trudnym problemem z powodu niemal nieskończonej liczby sposobów gryzienia podstrunnicy i ekscytowania sznurka.

Zasadniczo struna będzie oscylować na swojej podstawowej częstotliwości plus liczba harmonicznych ze znacznie mniejszą energią. Zalecałbym oglądanie wykresu Fouriera pojedynczego nieobciążonego pick stringiem.

Dźwięk w stabilnym stanie szumu można uzyskać całkiem blisko, dodając prawidłowe harmoniczne, ale trzeba również pamiętać, aby prawidłowo symulować ataki, podtrzymać i zanikać okresy: amplituda wzrośnie gwałtownie (i prawdopodobnie szczyt) po wybraniu łańcucha. Spadnie trochę i utrzyma się (utrzymaj w większości stałą) przez krótki okres i ostatecznie rozpadnie się na dłuższy okres. Musisz to zrobić, aby brzmiał jak gitara, a nie coś innego.

2

Biorąc pod uwagę, że była to klasa 1-letnia (musiałem wyszukać klasę "Freshman"), moim założeniem byłoby, że szukały prostego filtru ze szarpanymi strunyami, a nie dokładnej fizycznej symulacji gitary (chociaż to prawdopodobnie może dać ci dodatkowy kredyt). Jest to typowe zadanie podczas badania cyfrowego przetwarzania sygnałów.

Filtr składa się z pętli opóźniającej, która zasila filtr dolnoprzepustowy i jest mieszana z wejściem. Aby zagrać nutę, wysyłasz krótki sygnał o szerokim spektrum do wejścia (np. Seria białego szumu). To porusza się wokół pętli opóźnienia, za każdym razem tracąc część swoich składowych wysokich częstotliwości. Długość pętli opóźniającej określa częstotliwość rezonansową struny.

1

W systemie Windows, należy użyć funkcji API Win32 mm (5 linii kodu)

2

Jest to stary pytanie, ale tutaj jest to bardziej praktyczne rozwiązanie dla tych, którzy nie chcą/muszą nurkować w głąb teorii syntezy itp

Faceci z CCRMA w Stanford stworzyli zestaw klas C++ do syntezy audio i audio I/O oraz klas plucked i twang, które emulują skubane łańcuchy.