Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Generowanie brzmień instrumentów muzycznych

lukash90 28 Sty 2014 18:52 3168 4
  • #1 28 Sty 2014 18:52
    lukash90
    Poziom 16  

    Witam, przygotowuję w ramach dyplomu aplikację mającą poruszyć temat przetwarzania sygnałów audio na stm32. Jako, że dostałem zupełnie wolną rękę w interpretacji tego tematu, chciałbym spróbować generowania dźwięków instrumentów muzycznych - coś w stylu syntezatora. Póki co potrafię wygenerować sinusoidę za pomocą niestabilnego filtru i dalej nie wiem jak temat ugryźć. Może ktoś zna tajniki cyfrowego generowania dźwięków instrumentów? Chodzi o mechanizmy, które są wykorzystywane w keyboardach czy pianinach cyfrowych. Najbardziej zależało by mi na brzmieniach instrumentów strunowych, czyli wyraźny impuls związany z szarpnięciem struny (uderzeniem młoteczka w pianinie) charakterystyczny dla danego instrumentu i potem wyciszający się dźwięk o czasie trwania zależnym od częstotliwości dźwięku.
    Nie proszę oczywiście o gotowy kod w C, ale o wskazówki, literaturę gdzie bym mógł znaleźć jakieś informacje, no cokolwiek co pozwoliło by ruszyć z tematem.

    0 4
  • #2 03 Lut 2014 00:56
    cwieek
    Poziom 12  

    Cześć!
    Proponowałbym na początek odtworzyć typowy "moogowy" schemat syntezatora tzn. oscylator, filtr i generator obwiedni. Takie względnie proste rozwiązanie da Ci duże możliwości kształtowania brzmienia.
    1. Na początek podajesz na oscylator częstotliwość nutki
    2. Później przez filtr np. dolnoprzepustowy 24db/oktawę.
    3. Na koniec modulujesz głośność sygnałem z generatora obwiedni.

    ad.1 Na tym etapie możesz np. zmiksować 2 oscylatory ze sobą. W momencie kiedy lekko je rozstroisz (max kilka Hz) dźwięk wzbogaci, zacznie wibrować i wyda się bardziej "przestrzenny". W jednym możesz dać pilę a drugim, prostokąt i ogólnie eksperymentować z mieszaniem różnych fal w tym szumu. Dobrze w tym momencie pomyśleć nad szerokim zagospodarowaniem pasma, żeby filtr miał co usuwać :)

    ad.2 Filtr to w syntezatorach element najbardziej wpływający na charakterystykę brzmienie danego instrumentu. Bardzo ważne jest, żeby w dużym stopniu miał regulowaną dobroć i oczywiście częstotliwość. Niektóre syntezatory mają możliwość podbicia Q aż do momentu wzbudzenia i oscylacji które niektórych momentach daje super efekty. Samo przejeżdżanie po spektrum z podbitym Q daje efekt który na pewno wszyscy znają z trzech czwartych piosenek dyskotekowych.

    ad.3 To teraz o samym generatorze obwiedni. Najczęściej wykorzystuje się obwiednie ADSR. A w najbardziej podstawowym przypadku używa się do kontrolowania głośności sygnału wychodzącego z filtra.
    Generowanie brzmień instrumentów muzycznych
    Ciekawy efekt i wielkie możliwości w kształtowaniu brzmienia daje np. wygenerowanie dwóch obwiedni przez adsr i kontrolowanie zarówno głośności, jak i częstotliwością odcięcia filtru. W taki sposób można bardzo łatwo wykręcić dźwięk stopy od perkusji (z charakterystycznym klikiem na początku spowodowanym właśnie obwiednią na filtrze).

    Częstym modułem w syntezatorach jest LFO - oscylator niskich częstotliwości. Tak samo jak generatorem obwiedni modulujesz np. częstotliwość filtra, albo rozstrojenie drugiego oscylatora. Mógłbyś też pobawić się syntezą FM, czyli np. modulowaniem częstotliwości pierwszego oscylatora sygnałem z drugiego.

    Ja najbardziej się wkręcam w taką właśnie syntezę, imitującą analogowy "work flow". Jeśli chodzi o skrzypce to algorytm Karplus–Strong jest super prosty do zaimplementowania ale na pewno nie będzie miał idealnego brzmienia. Mógłbyś pomyśleć o samplach z karty sd - na pewno uzyskasz najbardziej zbliżone brzmienie do instrumentów akustycznych a i projekt się tobie prawdopodobnie uprości. Masz już wybrany jakiś dac?
    Trzymam kciuki za projekt, powodzenia!

    0
  • #3 03 Lut 2014 08:10
    lukash90
    Poziom 16  

    Hej, dzięki za taką wyczerpującą wypowiedź. Zobaczmy czy dobrze zrozumiałem:
    1. Generuję przebieg o częstotliwości np te 440 Hz ale nie sinus tylko? Np prostokąt?
    2. Filtruję ten generowany prostokąt filtrem LP o częstotliwości odcięcia równej..no właśnie, ile?
    3. ADSR załatwia mi sprawę, o której wspomniałem post wcześniej, tj charakterystyczna zmiana głośności, opadanie amplitudy itp. Tylko jak? Jakiś konkretny algorytm jest jak rozumiem?

    Co do sampli z karty SD to wolałbym nie. To takie pójście na łatwiznę a mi zależy właśnie na tym, żeby obadać temat generacji dźwięków a nie ich odtwarzania nawet kosztem znacznie gorszej jakości. No a dac to standardowy montowany w stm32f4 discovery. Akurat tą płytkę wykorzystuję do projektu i póki co musi mi ten przetwornik starczyć.


    EDIT:
    Doczytałem, ściągnąłem przykładowy program z synthschool.com i to co opisałeś wyżej jest już jakoś bardziej klarowne. To ja się tym pobawię, ale temat dalej otwarty, bo zależy mi na brzmieniu pianina i gitary. Różną kombinacją generatorów, filtrów i nastaw ADSR udało mi się wygenerować kilka fajnych brzmień (na razie w tym programie gotowym) ale to mnie dalej nie zadowala, więc będę wdzięczny za wszelkie dalsze propozycje.

    0
  • Pomocny post
    #4 12 Lut 2014 20:04
    cwieek
    Poziom 12  

    Cześć! Wyżej w trzech podpunktach opisałem syntezę subtraktywną, gdzie "usuwając" harmoniczne z sygnałów oscylatorów kształtujesz brzmienie. Jeśli rzeczywiście zależy Ci na brzmieniu naturalnych instrumentów powinieneś zainteresować się syntezą "physical modeling". Jednym z algorytmów jest właśnie ten Karplus–Strong i od niego pewnie będzie najłatwiej tobie zacząć. http://www.soundonsound.com/sos/aug01/articles/synthsecrets28.asp - tutaj troche ciekawostek. Generalnie mógłbyś się zainteresować MATLABEM, wiem, ze dużo osób symuluje tam algorytmy związane z syntezą. Dodatkowo ostatnio czytałem, ze jest coś takiego jak Embedded Coder, który generuje Ci z tego wszystkiego czyste C.
    http://www.musicdsp.org/archive.php?classid=1 tutaj dużo algorytmów do syntezy.
    Dawaj tutaj jakieś update'y, jestem bardzo ciekawy co Tobie z tego wyjdzie.
    Pozdrowienia!

    0
  • #5 12 Lut 2014 22:45
    lukash90
    Poziom 16  

    Za ten drugi link to ci pomnik postawie chyba :) Dzięki wielkie, dokładnie o takie konkretne przykłady mi chodziło. A postępy będą opisane na pewno. Koło września (jeśli wybronię magistra w terminie) w dziale DIY pojawi się artykuł a do tego czasu tutaj na pewno jeszcze nie jeden post się pojawi

    0