Gambas 2 – szybko prosto i przyjemnie

Nowy projekt
Nowy projekt

Witam wszystkich stawiających pierwsze kroki w fascynującym świecie programowania. W tym artykule postaram się przedstawić kilka porad oraz pomysłów na rozpoczęcie programowania w środowisku Gambas 2 dostępnym w większości popularnych dystrybucji Linuksa. Środowisko programistyczne Gambas 2 pozwala na zapoznanie się z programowaniem w języku? No właśnie – jest to swego rodzaju visual basic dla Linuksa. Wszyscy, którzy już zetknęli się z visual basic – poczują się w Gambas 2 jak U siebie w domu. Gwoli sprawiedliwości jedno trzeba przyznać, że nie wszystko jest tak samo jak w visual basic to jednak nawet początkujący programista nie powinien mieć żadnego problemu z opanowaniem tego przyjaznego środowiska programistycznego.

Zatem do dzieła. Na początek trzeba zainstalować Gambas 2 – no to chyba już wszyscy wiedzą, że w Ubuntu (jednej z najpopularniejszych dystrybucji Linuksa) zainstalowanie Gambas 2 sprowadza się do uruchomienia programu „Dodaj/Usuń programy” – znalezienia we wbudowanej wyszukiwarce „Gambas 2” , zaznaczenie pakietu do instalacji – no i jak kto woli, na szybką kawkę, albo na herbatkę. Można oczywiście użyć Synaptica, lub „apt-get install….”, jak kto woli. Skrót do Gambas 2 po zainstalowaniu powinien znaleźć się w menu głównym w sekcji „Programowanie”.

I już możemy przystąpić do uruchomienia środowiska. Po uruchomieniu i określeniu miejsca katalogu projektów dla środowiska możemy przystąpić do utworzenia pierwszej aplikacji okienkowej w Gambas Do wyboru mamy kilka rodzajów aplikacji.

Proponuję na początek wybrać GTK+ (środowisko przyjazne dla GNOME), a po prawej stronie możemy dołączyć do nowo tworzonego projektu dodatkowe biblioteki. Klikając „Next” przechodzimy do następnego okna określamy miejsce na dysku dla dla nowo tworzonego projektu (np. nasz katalog domowy – próba utworzenia katalogu projektu w domyślnej lokalizacji – skończy się wyświetleniem błędu o niemożliwości utworzenia projektu – wiadomo brak uprawnień do lokalizacji). Przechodząc dalej, w ostatnim okienku dialogowym określamy Nazwę projektu, oraz tytuł. Proponuję inne nazwy dla projektu i tytułu.

 

Ukazuje się naszym oczom okno nowego projektu. Po lewej stronie jest „browser zasobów projektu” – na środku okna widzimy formularz „Fmain” w trybie edycji, a po  prawej stronie znajdują się okna „Właściwości wybranej kontrolki”, oraz zasobnik kontrolek – których będziemy używać w naszym pierwszym projekcie.

Wybieramy typ projektu

Warto przyjrzeć się jeszcze pozycjom w menu programu oraz paskom narzędziowym widocznym w górnej części okna. Oferują one różne funkcjonalności, o których powiem w dalszej części artykułu przy okazji tworzenia projektu.

Teraz możemy już przejść do tego co chcemy sobie oprogramować , jaki temat wybierzemy, co chcemy sprawdzić? No cóż tutaj już każdy ma pełną dowolność a ograniczeniem jest tylko nasza kreatywność i  wyobraźnia. Ja tym razem przejdę w rejony mediów – a właściwie manipulacji klasami zawartymi w bibliotece gb.sdl.sound. Dostarcza ona kilku ciekawych rozwiązań umożliwiających manipulację plikami dźwiękowymi.

W naszym projekcie domyślnie biblioteka gb.sdl.sound nie jest włączona – zatem trzeba samodzielnie włączyć ją do projektu, tak aby móc korzystać z klas i metod tej biblioteki. W tym celu z menu programu wybieramy „Projekt → Właściwości” i w zakładce „Komponenty” – zaznaczamy bibliotekę „gb.sdl.sound” oraz zatwierdzamy nasz wybór klikając na przycisk „OK”. Teraz już możemy w pełni korzystać z tej biblioteki w naszym projekcie.

Zaczynamy zatem przygodę z Gambasem.

Proponuję abyśmy stworzyli wirtualny instrument muzyczny, który będzie posiadał klawiaturę i będzie umożliwiał granie z użyciem różnych barw instrumentów.

Żeby przygotować sobie roboczo nazwane przeze mnie banki barw będziemy również potrzebować jakiegoś programu do tego celu. Ja korzystam z LMMS – Linux MultiMedia Studio. No cóż w tym momencie powinienem opisać sposób przygotowywania próbek brzmień w LMMS – ale temat ten pozostawiam osobom zainteresowanym do „rozgryzienia we własnym zakresie”. Można również poszukać sampli dźwiękowych we własnym zakresie – korzystając z internetu lub wydawnictw i pism o tematyce muzycznej, które załączają często próbki dźwiękowe na płytach DVD lub CD.

Przejdźmy do naszego projektu. Na początek utworzymy klawiaturę muzyczną oferująca na przykład 3 oktawy. Użyjemy do zbudowania klawiatury przycisków dostępnych w zasobniku jako kontrolki typu „Button”. Przeciągając odpowiednią ilośc przycisków na formularz zbudujemy klawiaturę naszego wirtualnego instrumentu. Przykładowo może to wyglądać tak jak na obrazku poniżej.

Wirtualna klawiatura

Bo zbudowaniu wirtualnej klawiatury powinniśmy zastanowić się nad tym jak ją oprogramować aby klikając w poszczególne klawisze usłyszeć realne dźwięki? W tym celu w kodzie naszego formularza zbudujemy odpowiedni kod.

Teraz proponuję zadeklarowanie kilku zmiennych. Zmiennej „dzwiek”, która będzie przechowywać ścieżkę do pliku dźwiękowego. Zmiennej „kanalOdtwarzania” ,jest to zmienna typu Channel, dzięki której będziemy mogli skorzystać z metod odtwarzających w swobodny sposób nasze dźwięki (dokładniejszy opis działania i korzyści płynących z zastosowania klasy Channel – znajdziecie w dokumentacji Gambas 2 dostępnej po naciśnięciu przycisku F1 w otwartym oknie projektu).

Kolejna zmienna to „uzytkownik” – zmienna będzie pobierać dynamicznie nazwę konta użytkownika – oraz zmienna „sciezkadopliku” odpowiedzialna za wskazanie miejsca fizycznego położenia pliku, który ma być odtworzony przez klawiaturę.

PRIVATE dzwiek
AS Sound

PRIVATE
kanalOdtwarzania AS Channel

PRIVATE
uzytkownik AS String

PRIVATE
sciezkadopliku AS String

PUBLIC SUB
Form_Open()

uzytkownik = User.Name

END

 Kilka słów wyjaśnienia na temat kodu. U góry projektu podajemy deklarację zmiennych jako zmienne prywatne (dostępne tylko w zakresie formularza – klasy FMain). Niżej znajduje się kod metody wykonywanej po zdarzeniu „Otwarcia formularza” – zmiennej „uzytkownik”  przypisywana jest nazwa realnego użytkownika systemu. Teraz proponuję zaprojektować proste menu naszego projektu, które pozwoli na zmianę barw instrumentów, oraz doda dwie dodatkowe funkcjonalności. Aby zaprojektować menu naszej aplikacji, należy kliknąć prawym klawiszem myszki w widoku formularza i z widocznego menu kontekstowego wybierać pozycję „Edytor menu”. Otwiera się okno w którym możemy dodawać elementy menu – edytować je, dodawać ikony menu, przypisywać skróty klawiaturowe, zmieniać kolejność elementów, tak jak na obrazku poniżej.

Edytor menu

Dla każdego z elementów menu – powinniśmy oprogramować możliwość ustawiania nowej ścieżki do pliku z dźwiękiem. Można zrobić to tak:

PUBLIC SUB
Piano_Click()

sciezkadopliku = “/home/” & user & “/Test/Piano/”

END

PUBLIC SUB
Trabka_Click()

sciezkadopliku = “/home/” & user & “/Test/Trąbka/”

END

Dla każdej pozycji z Menu „Barwy” należy zapisać taki sam kod – tak aby po wywołaniu zdarzenia „Click” zmienna „sciezkadopliku” zawierała prawidłową ścieżkę.

Oczywiście wcześniej należy utworzyć odpowiednie katalogi w katalogu głównym programu lub w innym dowolnym katalogu 🙂

Teraz przejdźmy do oprogramowania naszej „Wirtualnej klawiatury” tak
aby można było już na niej cokolwiek zagrać!

Proponuję wykorzystać do tego celu metodę „Click” dla każdego klawisza naszej klawiatury. Wszystkie buttony wcześniej przemianowałem tak, aby odzwierciedlały swoją nazwą dźwięk który będzie odtwarzany w momencie kliknięcia danego klawisza, a więc klawisz C z pierwszej oktawy to C1, kalwisz C z drugiej oktawy to C2 i analogicznie pozostałe klawisze. Co się dzieje kiedy klikniemy na klawisz C1?

PUBLIC SUB
C1_Click()

dzwiek = NEW Sound(sciezkadopliku & C1.ogg)

kanalOdtwarzania = dzwiek.Play

END

Otóż w metodzie „Click” klawisza C1 umieściliśmy metodę która tworzy nowy dźwięk – w konstruktorze podajemy ścieżkę wraz z operatorem konkatenacji czyli łączenia łańcuchów i nazwę dźwięku jaki ma być odtworzony, wraz z rozszerzeniem – w tym wypadku ogg (format natywnie obsługiwany przez Ubuntu). Następnie korzystamy z wcześniej zdeklarowanego w klasie obiektu “kanalOdtwarzania” i za jego pomocą uruchamiamy metodę Play() dla obiektu typu sound, nazwanego jako „dźwięk”. I to wszystko w zasadzie jeśli chodzi o sposób oprogramowania naszej „Wirtualnej klawiatury”. Oczywiście możecie powiedzieć – chcę grać dźwięki za pomocą klawiatury komputera i jak to zrobić? Podpowiem że można to zrobić bardzo szybko i prosto.

Wykorzystajmy w tym celu zdarzenie naszego formularza – nazwane „Key press”. Otwórz zdarzenie to jest wywoływane zawsze wtedy kiedy naciskamy dowolnie wybrany klawisz klawiatury naszego komputera – teraz tylko wystarczy „powiązać” odpowiedni klawisz z odpowiednim dźwiękiem, jak to zrobić pokażę poniżej.

PUBLIC SUB
Form_KeyPress()

IF Key.code = key[“Q”] THEN

C1_Click()

ELSE IF

…………………………..

END IF

END

Na początku sprawdzamy jaki klawisz jest wciskany na formularzu, w naszym przypadku jest to klawisz „Q” , wówczas wywołujemy metodę C1_Click – jak wiadomo służy ona do odtworzenia konkretnie wybranego dźwięku! Do każdego z klawiszy klawiatury komputera możemy w analogiczny sposób „przypisać” wybrany plik dźwiękowy.

Pamiętajmy jednak o tym iż w całym projekcie należy podawać bardzo dokładnie ścieżki do plików gdyż można spowodować błąd programu! Wróćmy na chwilkę do metody odtwarzającej dźwięk i dopiszmy do metody polecenie „Catch” – jest to polecenie po którym możemy wyświetlić komunikat, że wystąpił błąd programu – to po prostu obsługa potencjalnych błędów. Może to wyglądać tak:

PUBLIC SUB
C1_Click()

dzwiek = NEW
Sound(sciezka & C1.ogg)

kanalOdtwarzania = dzwiek.Play

CATCH

Message.Error(“Błąd odtwarzania – nie znalazłem pliku!”)

END

Tak napisana metoda-funkcja (jak zwał – tak zwał 🙂 ) pozwala w kontrolowany sposób przerwać działanie wybranej funkcji programu!

Obsługa błędu

Pozostały nam jeszcze do oprogramowania dwie funkcje z naszego menu. Chodzi o funkcję „Dźwięki” i „Klawisze”. Pierwsza będzie wyświetlać dźwięki skali muzycznej na klawiaturze, druga będzie wyświetlać symbole klawiszy klawiatury komputera na naszej wirtualnej
klawiaturze instrumentu.

Jak oprogramować te funkcje? Bardzo prosto!!! Należy skorzystać z właściwości każdego Buttona klawiatury – właściwość – Text. Jeśli ktokolwiek miałby z tym trudności podpowiem że można to zrobić tak:

PUBLIC
SUB Dzwieki_Click()

IF ME.Dzwieki.Value = “T” THEN

ME.C1.Text = “C1”

ME.C2.Text = “C2”

ME.C3.Text = “C3”

ME.C4.Text = “C4”

ME.Cis1.Text = “Cis1”

ME.Cis2.Text = “Cis2”

ME.Cis3.Text = “Cis3”

ME.D1.Text = “D1”

………………………………………………….
🙂 i tak dalej

ELSE

ME.C1.Text = “”

ME.C2.Text = “”

ME.C3.Text = “”

ME.C4.Text = “”

ME.Cis1.Text = “”

ME.Cis2.Text = “”

ME.Cis3.Text = “”

ELSE

ME.C1.Text = “”

ME.C2.Text = “”

ME.C3.Text = “”

ME.C4.Text = “”

ME.Cis1.Text = “”

ME.Cis2.Text = “”

ME.Cis3.Text = “”

ME.D1.Text = “”

………………………………………
🙂 i tak dalej

END
IF

Lecz jest tutaj jeden mały „haczyk” o którym wcześniej nie wspomniałem. Przy budowaniu menu w pozycjach odpowiedzialnych za uruchamianie metod„Dzwieki” i „Klawisze”, należy przy pozycjach tych zaznaczyć właściwość „Toogle”, pozwala ona na to że menu będzie miało dwa tzw „Stany” – czyli włącz i wyłącz.

Edycja menu

I tak doszliśmy do końca lekcji o programowaniu w środowisku Gambas 2 – Środowisko to jest w moim przekonaniu bardzo „przyjazne deweloperom”. Gambas 2 oferuje również inne funkcjonalności takie jak np.: Utworzenie z naszego projektu – archiwum źródłowego lub tez pliku wykonywalnego , bądź pakietu instalacyjnego! Wspaniałe możliwości!!!! I to wszystko za darmo!!! Naprawdę warto zainteresować się środowiskiem Gambas 2. Pozdrawiam i polecam lekturę artykułu!

W razie pytań lub wątpliwości proszę pisać komentarze – będę się starał wyjaśnić wszystko w miarę możliwości.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

Poprzedni post

Kontrola limitów transferu – modem GSM

Następny post

Wieloprzyciskowa mysz pod Linuksem

Powiązane posty
Lokalizacja pliku ikony w katalogu projektu

Start z Javą i Eclipse. Część trzecia

Szlifowanie interfejsu”

Jak wspomniałem w drugiej części artykułu, tym razem zajmiemy się poprawieniem wyglądu komponentów i działaniem całej aplikacji. Proponuję aby na początek zamienić wszystkie komponenty „AWT” wykorzystane w programie, na komponenty z biblioteki „Swing”. Aby to zrobić trzeba na początek przedefiniować tzw: „opakowanie” aplikacji. Zaczniemy od zmiany klasy „Frame” na „JFrame”.

Więcej...