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.

[Konkurs] Rysowanie dźwiękiem po oscyloskopie

Dżyszla 27 Lip 2008 21:23 10281 7
  • [Konkurs] Rysowanie dźwiękiem po oscyloskopie

    Zgodnie z prośbą pragnę opisać sposób, jakim osiągnąłem wynik zaprezentowany w wątku KONKURS -elektroda.pl na oscyloskopie.

    Zacznijmy więc od początku, a w zasadzie od końca (zgodnie z chronologią prac nad poszczególnymi częściami tematu).

    1. Animacja jako AVI
    Do stworzenia samej animacji posłużyłem się programem Macromedia (obecnie przejęta przez Adobe) Flash 5. Jako program przeznaczony do animacji wektorowych posiada opcję eksportu jej do formatu AVI (nieskompresowanego), z której to skorzystałem do otrzymania wyniku poddawanego dalszej obróbce. Animacja z założenia była monochromatyczna, choć unikałem wszelkich tonacji przejściowych faworyzując wyłącznie stan [0,1].
    Głównymi problemami była tu ilość pikseli na ekranie, która i tak w późniejszych testach okazywała się zbyt duża, co pociągało pewne konsekwencje dla punku 2.

    2. Założenia generowania obrazu
    Proste rozwiązania są najskuteczniejsze, prawda? Dlatego postanowiłem "przerobić" oscyloskop w typowy ekran kineskopowy. Sterowanie odchyleniem w każdym kierunku odbywa się prawie tak jak w tradycyjnym telewizorze. Zaszły jednakże pewne różnice:
    - Głównym kierunkiem odchylania jest odchylanie poziome a nie pionowe. Oznacza to, że rysowane są kolejne kolumny, a nie jak w telewizorze kolejne linie obrazu.
    - Przebieg odchylania w każdym kierunku ma charakter trójkątny (lub też prostokątny) a nie piłokształtny. Oznacza to, że wiązka po osiągnięciu krańcowego punktu ekranu nie powraca na punkt startowy, lecz rozpoczyna rysowanie od punktu danego. To założenie miało na celu wyeliminowanie jakichkolwiek linii powrotu, które można dostrzec czasami w źle wystrojonych telewizorach.
    Podsumowując przebieg wiązki wygląda następująco:
    0. zaczynamy od lewego górnego rogu
    1. lecimy w dół
    2. przesuwamy w prawo o jedną działkę (rozdzielczość sygnału)
    3. lecimy w górę
    4. przesuwamy w prawo o jedną działkę
    5. powtarzamy 1-4 aż do momentu osiągnięcia prawego krańca zakresu
    6. po osiągnięciu prawego krańca powtarzamy punkty 1-4 aż do momentu osiągnięcia lewego końca z tą różnicą, że w punktach 2 i 4 przesunięcie następuje w lewo, a nie w prawo.

    Co prawda takie postępowanie powoduje nierównomierność rozświetlenia, ale - jak wcześniej wspomniałem - eliminuje problem linii powrotu.

    Na koniec ostatnie założenie. Wynika ono z faktu, że wiązki nie można wygasić. Stąd konieczne jest stworzenie innego sposobu na narysowanie obrazu. Dlatego też szybkość przemieszczania się wiązki nie jest równomierna. Tam, gdzie obraz ma być rysowany przesuwa się po ekranie wolniej (lub nawet stoi przez pewien czas w miejscu), zaś w miejscach wygaszonych jest przesuwana tak szybko, na ile pozwala częstotliwość próbkowania karty dźwiękowej/mierzonego sygnału oraz częstotliwość próbkowania oscyloskopu. Niestety na oscyloskopach cyfrowych także wygaszone miejsca niestety mają zaznaczone kropki wynikające zapewne z pewnego uwypuklenia sygnału mierzonego i częstotliwości próbkowania oscyloskopu. Na oscyloskopie programowym efekt ten nie jest widoczny i myślę, że podobnie zachowałby się oscyloskop analogowy.





    3. Konwersja AVI na WAV
    To chyba główny punkt całej pracy. Jako programista oczywiście stworzyłem własny program do tego zadania (wkrótce myślę, że opublikuje go na własnej stronie). Program działa następująco: wyświetla kolejne klatki filmu animacji AVI. Każda klatka badana jest pod kątem wystąpienia w niej koloru innego niż czarnego (a ściślej - niezerowej składowej zielonej piksela). W zależności od ustawień programu oraz stopnia "zieloności" (0-255) piksela wyliczane jest prawdopodobieństwo narysowania punktu, to znaczy - im bardziej jasny punkt, tym prawdopodobieństwo stworzenia próbki sygnału odpowiadającej temu punktowi jest większe. Cały obraz jest badany zgodnie z kierunkami opisanymi w punkcie 2. Jeśli program tworzy próbkę (czyli punkt odpowiadający punktowi na ekranie), to tym samym dokonuje zapisu "współrzędnych" tego punktu do pliku WAV. Zmiana klatek animacji źródłowej następuje oczywiście wtedy, gdy zostanie zapisanych tyle próbek, ile odpowiada trwaniu danego obrazu.

    Dla przykładu, jeśli plik WAV ma próbkowanie 48kHz (z takim właśnie były tworzone), zaś animacja charakteryzuje się szybkością 2 klatek na sekundę, to po zapisaniu 24k próbek, następuje zmiana klatki niezależnie od analizowanego miejsca i kontynuacja analizy.

    Wracając do kwestii prawdopodobieństwa - upraszczając, że punkt o jasności 255 jest rysowany zawsze (z prawdopodobieństwem zero) to dla zbioru punktów o jasności 127 rysowany będzie co drugi punkt, ergo prędkość przemierzania wiązki wzrośnie dwukrotnie, ergo jasność linii spadnie o połowę. Oczywiście lepszy efekt uzyska się z pewnością na oscyloskopie analogowym niż cyfrowym lub programowym, na których zostały wykonane filmiki.

    4. Dlaczego nie inaczej?
    Podczas tworzenia wytycznych rozpatrywany był jeszcze jeden sposób tworzenia obrazów. Mianowicie nie traktowania oscyloskopu jak monitora CRT, lecz faktyczne sterowanie wiązką odpowiadające kształtom obrazu. Choć w ten sposób z pewnością uzyskuje się dużo wyraźniejsze i czystsze efekty, to jednak zadanie wektoryzacji obrazu nie jest prostym nawet, jeśli na samym początku właśnie obraz wektorowy był wyjściowym. Konieczność albo zagłębiania się w specyfikacje plików fla (Flash) i być może także ttf (TrueType Font), albo wektoryzacji obrazu rastrowego niestety została przekreślona zbyt małą ilością dostępnego czasu na realizację takiego zadania.

    5. Epilog
    Z pewnością cały algorytm można jeszcze ulepszyć. Podczas opracowywania programu poszedłem, jak to się mówi, "na łatwiznę". Ale myślę, że i w taki sposób można uzyskać już całkiem ciekawe efekty. Jeśli ktoś czegoś nie zrozumiał z mojego przydługiego wywodu, to z chęcią wyjaśnię w tym wątku. Zapraszam więc wszystkich czytających do wzięcia udziału w konkursie i głosowanie na... rywali :) Tak, tak, im wyszło to znacznie lepiej :) Może też przez fakt, że sam nie miałem dostępu do oscyloskopu, dlatego w tym miejscu raz jeszcze gorąco dziękuję użytkownikowi __Grzegorz__ za pomoc, jaką udzielił podczas trwania konkursu oraz za wykonywanie filmików mojej animacji.


    Link


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • #2 29 Lip 2008 00:13
    Bogdan58
    Poziom 32  

    Moim zdaniem uzyskany efekt jest bardzo dobry. Zwróciłem uwagę na doskonały opis, który pozwala od podstaw poznać założenia i problemy związane z tą pracą. Mimo, że nie ma schematów, ani fotek z elektroniką, prawie wszystko jest jasne. Przyznam się, że wyszedłbym z podobnych założeń do takiego projektu.

    Pozdrowienia.

  • #4 29 Lip 2008 19:28
    bolek
    Specjalista - oświetlenie sceniczne

    Szkoda że nie wyczaiłem tego konkursu. Robiłem coś takiego w asm na 51. Tablica z punktami obrazu, trochę sinusów i cosinusów...
    Obrazek można było obracać w trzech osiach, skalować, przesuwać. Dodatkowo byla jeszcze obsługa DMX512

    Nie mogę znaleźć fotek z oscyloskopu, ale wstawiam wyświetlone przez laser- zasada ta sama co oscyl w trybie XY.
    Tam gdzie widać wypunktowanie to efekt dużej zwłoki czasowej pomiedzy pobieraniem kolejnych współrzędnych. W zasadzie na oscyloskopie było widać tylko punkty

    Na yo tubie film nie działa, załączam tutaj

  • #5 30 Lip 2008 23:47
    darrrrek
    Poziom 22  

    bolek, moglbys dokladniej opisac zasade wyswietlania obrazów laserem ktore przedstawiles ?? bardzo ciekawi mnie to.

    Pozdrawiam

  • #6 05 Sie 2008 08:08
    bolek
    Specjalista - oświetlenie sceniczne

    a co by dokładniej interesowało? Pobrany i obrobiony punkt wysyłany jest do DACa i z niego idzie do galv

  • #7 05 Sie 2008 20:50
    213996
    Użytkownik usunął konto  
  • #8 05 Sie 2008 22:52
    bolek
    Specjalista - oświetlenie sceniczne

    nie trzeba oglądać (i się zastanawiać) żeby sie tego dowiedzieć- można przeczytać. Mówiłem że zasada wyświetlania jest ta sama, a zdjecia ekranu oscyloskopu sie potraciły.

    Wracajac do tematu, obracanie obrazu (punktu) o jakiś kąt, można zrobić wg wzoru:
    x'=xcos α -ysin α
    y'=xsin α +ycos α

    Wg tego wzoru można sobie np obracać wskazówki analogowego zegara na EKRANIE OSCYLOSKOPU. Ciekawe efekty uzyskuje się zamieniajac znaki we wzorze. Polecam lektury basica na temat przekształcania punktów