logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Generowanie dźwięków instrumentów strunowych na STM32 - wskazówki i literatura

lukash90 28 Sty 2014 18:52 3528 4
  • #1 13231881
    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.
  • #2 13255333
    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 dźwięków instrumentów strunowych na STM32 - wskazówki i literatura
    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!
  • #3 13255531
    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.
  • Pomocny post
    #4 13294322
    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!
  • #5 13295143
    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
REKLAMA