Praca dyplomowa. Automatyczna harmonizacja melodii

Wielkość: px
Rozpocząć pokaz od strony:

Download "Praca dyplomowa. Automatyczna harmonizacja melodii"

Transkrypt

1 Bielska Wyższa Szkoła im. Józefa Tyszkiewicza w Bielsku-Białej Praca dyplomowa Filip Łakomik Automatyczna harmonizacja melodii Opiekun pracy: dr Maciej Smołka Ocena pracy: Numer albumu: 2077 Numer ewidencyjny pracy Bielsko - Biała, 2008

2 Bielsko-Biała dn Imię i nazwisko: Filip Łakomik Nr albumu: 2077 Wydział: Zarządzania i Informatyki Kierunek: Informatyka OŚWIADCZENIE Świadom odpowiedzialności prawnej oświadczam, że złożona praca inżynierska pt.: Automatyczna harmonizacja melodii została napisana przeze mnie samodzielnie. Równocześnie oświadczam, że praca ta nie narusza prawa autorskiego w rozumieniu ustawy z dnia 4 lutego 1994 roku o prawie autorskim i prawach pokrewnych (Dz.U.1994 nr 24 poz. 83) oraz dóbr osobistych chronionych prawem cywilnym. Ponadto praca nie zawiera informacji i danych uzyskanych w sposób nielegalny i nie była wcześniej przedmiotem innych procedur urzędowych związanych z uzyskaniem dyplomów lub tytułów zawodowych uczelni wyższej. Podpis:

3 Spis treści 1 Informacje wstępne Cele projektu Opis problemu harmonizacji melodii Istniejące rozwiązania Rozwiązanie problemu Wybór narzędzi Ogólny schemat rozwiązania Wtyczka Wizard Wtyczka Harmonizer Wtyczka RuleChecker Podsumowanie Test wydajności Możliwości rozwoju Wnioski Bibliografia

4 4

5 1 Informacje wstępne 1.1 Cele projektu Celem projektu jest stworzenia narzędzia: przeznaczonego dla muzyków (szczególnie aranżerów i kompozytorów) pozwalającego w automatyczny sposób zharmonizować zadaną melodię napisaną w dowolnej tonacji, a nawet atonalną; umożliwiającego harmonizację według reguł określonych przez użytkownika, pozwalając na uzyskanie efektów dostosowanych do jego upodobań i potrzeb; generującego rozwiązania w których dopuszczalne są błędy, które użytkownik będzie musiał poprawić ręcznie, jednak ilość koniecznych zmian musi być na tyle mała żeby zaoszczędzić czas w stosunku do ręcznego harmonizowania melodii. Celem projektu nie jest: Stworzenie narzędzia generującego rozwiązania bezbłędne w rozumieniu teorii muzyki (jakiejkolwiek teorii muzyki). Komentarz: Chociaż projekt tworzony będzie w oparciu o wybrane reguły harmonii (głównie klasycznej) ma on pozostawiać użytkownikowi możliwość eksperymentowania z regułami. Użytkownik ma mieć możliwość konfiguracji w jakim stopniu to, czy połączenie harmoniczne jest zgodne/niezgodne z daną regułą, ma wpływać na to, czy zostanie ono zastosowane w rozwiązaniu. Istnieją w harmonii reguły bardzo szczegółowe np. dotyczące łączenia konkretnych dwóch akordów ze sobą, które stanowią wyjątki od bardziej ogólnych reguł. Implementacja wszystkich istniejących reguł (o ile możliwe jest w ogóle ich zebranie) byłaby bardzo czasochłonna dla programisty, a ich konfiguracja dla użytkownika. Dlatego w ra- 5

6 mach projektu zakłada się implementację tylko reguł dotyczących łączenia akordów w ogóle, a nie w szczególnych przypadkach jednocześnie pozostawiając użytkownikowi miejsce na definiowanie własnych reguł. Celem reguł ogólnych (zaimplementowanych w programie) ma być zminimalizowanie liczby błędów w rozwiązaniu generowanym przez program. Ewentualnych pojedynczych niepożądanych przez użytkownika błędów użytkownik będzie mógł uniknąć definiując własne reguły lub po prostu ręcznie zmodyfikować rozwiązanie. 6

7 1.2 Opis problemu harmonizacji melodii Rozdział ten definiuje kilka pojęć z dziedziny problemu. Definicje te są podane w sposób ogólny bez wchodzenia w szczegóły tak, żeby umożliwić osobie niezwiązanej z dziedziną zrozumienie problemu harmonizacji melodii. Szczegółowe definicje oraz związaną z nimi teorię można znaleźć w: [KSH184] oraz [KSH284]. Harmonizacja technika tworzenia współbrzmień akordowych towarzyszących jakiejś melodii (definicja z [JHSM77]) Żeby zrozumieć powyższą definicję należy zrozumieć czym jest melodia oraz współbrzmienie akordowe. Melodia (jeden z elementów dzieła muzycznego) to ciąg następujących kolejno dźwięków różnej wysokości (częstotliwości). Melodia najczęściej łączy się z innym elementem dzieła muzycznego jakim jest rytm. Podczas gdy melodia określa jakiej wysokości dźwięki mają być zagrane i w jakiej kolejności, rytm określa w jakim czasie te dźwięki mają brzmieć. Sama melodia i rytm nie tworzą jeszcze dzieła muzycznego. Z połączeniem wyłącznie tych dwóch elementów mamy do czynienia bardzo rzadko. Nawet pojedynczy muzyk grający solo np. na flecie, mimo iż nie jest w stanie wydać z tego instrumentu kilku dźwięków jednocześnie wzbogaci wykonywaną melodię o inne elementy takie jak np. dynamika (zróżnicowana głośność dźwięków), artykulacja (sposób wydobycia dźwięku) itp. Więcej na temat elementów dzieła muzycznego można przeczytać w [BDSEDM]. Przykładem połączenia wyłącznie melodii i rytmu może być tzw. PC speaker (głośniczek systemowy) najstarszy system dźwiękowy w komputerach PC, który umożliwiał wydawanie jednego dźwięku o określonej częstotliwości w określonym czasie. Często można było go posłuchać w pierwszych grach w systemie MS DOS. Współbrzmienie akordowe to jednoczesne brzmienie co najmniej trzech dźwięków o różnej wysokości oraz nazwie. Stosunki pomiędzy tymi dźwiękami określają zasady akustyki, harmonii i psychologii muzyki. O zasadach budowy akordów oraz ich podstawach akustycznych przeczytać można w [KSH184]. 7

8 Przykładem współbrzmienia akordowego może być np. naciśnięcie na fortepianie co najmniej trzech klawiszy jednocześnie albo szarpnięcie kilku strun gitary naraz. Harmonizacja melodii będzie więc polegała na dopisaniu do pojedynczych dźwięków melodii dźwięków współbrzmiących. Realizuje się to poprzez odnalezienie akordu zawierającego już dźwięk melodii i dopisanie pozostałych dźwięków tego akordu. Zgodnie z powyższym: przykładem utworu niezharmonizowanego będzie np. utwór śpiewany przez pojedynczą osobę, bez akompaniamentu; przykładem utworu zharmonizowanego może być utwór chóralny w którym członkowie chóru podzieleni są na grupy według skali głosów: bas, tenor, alt i sopran (od najniższego do najwyższego głosu) i każda grupa śpiewa inną melodię jednocześnie. Cztery osobne melodie tworzą współbrzmienia czterech różnych dźwięków, czyli współbrzmienia harmoniczne następujące po sobie. Przykład chóru ukazuje nieco inny sposób rozumienia harmonizacji: jako dopisania do istniejącej melodii wykonywanej np. przez soprany kilku (w tym przypadku trzech) dodatkowych melodii dla basów, tenorów i altów. Takie spojrzenie pozwala zauważyć że podczas zastępowania kolejnych dźwięków współbrzmieniami należy brać pod uwagę nie tylko to, czy współbrzmienie zawiera dany dźwięk (sopranu), ale również to czy jego pozostałe dźwięki (dźwięki pozostałych głosów) tworzą ładne melodie z poprzednimi dźwiękami tych głosów, czyli sprawdzać połączenia z poprzednimi współbrzmieniami. O zasadach łączenia współbrzmień akordowych można przeczytać w [KSH184] oraz [KSH284]. 8

9 1.3 Istniejące rozwiązania Jedynym istniejącym rozwiązaniem problemu harmonizacji melodii, jakie udało mi się odnaleźć jest wtyczka dostarczana z programem Sibelius 5 (rozbudowanym edytorem nut) o nazwie: Add Simple Harmony w grupie wtyczek: Composing Tools. Umożliwia ona automatyczne dodanie akompaniamentu do zaznaczonej melodii w postaci prostych akordów. Więcej o programie Sibelius przeczytać można na [SHP08]. Wady rozwiązania: brak możliwości konfiguracji harmonizując daną melodię za pomocą tej wtyczki nie mamy żadnego wpływu na wynik działania programu. Zawsze uzyskamy ten sam wynik, co uniemożliwia nam poszukiwania rozwiązania, które najlepiej nam odpowiada. Zadaną melodię zwykle można zharmonizować na wiele różnych sposobów zgodnie z regułami, a ta wtyczka tego nie umożliwia; brak możliwości definiowania własnych reguł; brak możliwości definicji własnych akordów; powtarzające się wyniki, schematyczne działanie jeżeli w harmonizowanej melodii występuje kilka razy ten sam motyw (fragment melodii) to za każdym razem do jego harmonizacji zostaną użyte dokładnie te same współbrzmienia akordowe do jego harmonizacji. Zalety rozwiązania: łatwa obsługa, szybkie działanie. Zalety wynikające ze zintegrowania wtyczki z rozbudowanym edytorem nut: dobra reprezentacja graficzna zapisu nutowego; możliwość szybkiej i łatwej modyfikacji rozwiązania za pomocą dostępnych w edytorze narzędzi; możliwość odsłuchania utworu; brak konieczności instalowania osobnego programu wspomagającego harmonizację. 9

10 10

11 2 Rozwiązanie problemu 2.1 Wybór narzędzi Harmonizacja jest tylko jedną z wielu czynności jakie należy wykonać podczas tworzenia czy aranżowania utworu muzycznego. Trudno wyobrazić sobie kompozytora, który włącza inny program żeby napisać melodię, potem kolejny w celu jej harmonizacji, jeszcze inny żeby ją przetransponować itd. To tak jakby napisać osobny program do sprawdzania pisowni w tekście, osobny do jego edycji, a jeszcze inny umożliwiający jego wydrukowanie. Dlatego tak, jak w edytorach tekstu integruje się wiele funkcjonalności umożliwiających i ułatwiających przygotowanie dokumentu, tak również w przypadku edytorów nut najlepszym rozwiązaniem wydaje się być zintegrowanie dodatkowych funkcjonalności w jednym programie. Na rynku istnieją dwa czołowe (komercyjne) edytory nut Sibelius oraz Finale [FM08]. Bardziej popularny jest Sibelius ze względu na łatwiejszą i bardziej intuicyjną obsługę. Najistotniejszym kryterium wyboru w przypadku opracowywanego projektu jest możliwość prostej rozbudowy edytora o dodatkowe funkcjonalności. Sibelius posiada wbudowany edytor do pisania wtyczek. Do tworzenia wtyczek używa się języka ManuScript specjalnie zaprojektowanego m.in. do automatyzacji technik kompozycji i aranżacji. Opis języka znajduje się w [UTMSL05]. Wersja demonstracyjna Sibeliusa w wersji 5, którą wybrałem do realizacji mojego projektu ograniczona jest jedynie brakiem możliwości pisania do plików, co w przypadku wykonania algorytmu harmonizacji nie jest niezbędne. 11

12 2.2 Ogólny schemat rozwiązania Chociaż ManuScript jest językiem obiektowym został on jednak stworzony do manipulacji istniejącymi obiektami. Skutkiem tego podejścia jest brak możliwości pisania własnych klas oraz tworzenia instancji istniejących klas. Istnieją jednak sposoby radzenia sobie z powyższym ograniczeniem. Wtyczka pisana w języku ManuScript sama przypomina klasę statyczną: Okno edytora wtyczek Sibelius 5 Jak widać na powyższym rysunku przedstawiającym okno edytora wtyczek programu Sibelius 5 Demo podobnie jak klasa, wtyczka składa się z danych (ang. data) oraz operujących na nich metod (ang. methods). Dodatkowo może zawierać i wyświetlać okna dialogowe (ang. dialogs), które tworzy się za pomocą prostego edytora graficznego. Podobnie jak w przypadku klas statycznych nie można tworzyć instancji wtyczek. Niemożliwe jest też we wtyczkach definiowanie pól prywatnych, agregacja oraz dziedziczenie. Mimo wyżej wymienionych ograniczeń na poziomie koncepcyjnym wtyczki podobnie jak obiekty (instancje klas) mogą być rozumiane jako byty o określonych odpowiedzialnościach i służyć do modularyzacji rozwiązania. W problemie harmonizacji melodii można wydzielić dwa główne cele, które realizowane będą przez dwie wtyczki. 12

13 Konfiguracja algorytmu harmonizacji wtyczka Wizard : odpowiedzialna za komunikację z użytkownikiem - za pomocą okien dialogowych odpyta użytkownika o parametry algorytmu harmonizacji; sprawdza poprawności podawanych przez użytkownika danych; uruchamia algorytm harmonizacji z określonymi parametrami. Wykonanie algorytmu harmonizacji wtyczka Harmonizer zawiera implementację algorytmu harmonizacji melodii, którego parametry określane są przez wtyczkę Wizard. Pseudokod algorytmu harmonizacji może wyglądać w następujący sposób: Dla każdego dźwięku D w zaznaczonej melodii wykonuj: begin 1. Wyszukaj akordy zawierające dźwięk D 2. Dla każdego akordu A2[i] z wyszukanych akordów oceń połączenie z poprzednim akordem A1 na podstawie zasad ogólnych oraz zdefiniowanych przez użytkownika 3. Zastąp dźwięk D akordem, którego połączenie z akordem A1 zostało najwyżej ocenione end. Drugi krok tego algorytmu jest najbardziej skomplikowany. Powtarzana jest w nim czynność od której sam algorytm harmonizacji jest niezależny: oceń połączenie z poprzednim akordem A1 na podstawie zasad ogólnych oraz zdefiniowanych przez użytkownika Kod odpowiedzialny za tę czynność należy więc umieścić w osobnej wtyczce. 13

14 Ocena połączenia pomiędzy dwoma akordami wtyczka RuleChecker : zawiera reguły łączenia akordów; ocenia jakość połączenia dwóch akordów w zależności od tego w jakim stopniu połączenie jest zgodne z regułami w niej zaimplementowanymi oraz zdefiniowanymi przez użytkownika. Poniższy diagram przedstawia schemat takiego rozwiązania: Diagram przypomina diagram klas w języku UML, jednak należy rozumieć go nieco inaczej. W sposób w jaki typowo przedstawiane są klasy przedstawiłem na nim wtyczki, natomiast strzałka pomiędzy dwiema wtyczkami oznacza, że wtyczka wskazująca uruchamia wtyczkę wskazywaną. W tym przypadku wtyczkę Wizard uruchamia użytkownik. Wizard odpyta go o parametry algorytmu, a następnie uruchomi wtyczkę Harmonizer z podanymi parametrami parametrami. Harmonizer wykona algorytm harmonizacji, a za każdym razem kiedy będzie potrzebował ocenić połączenie dwóch akordów uruchomi wtyczkę RuleChecker. Zalety takiego podziału odpowiedzialności: Oddzielenie wtyczki oceniającej połączenie akordów od algorytmu harmonizacji umożliwia jej wykorzystanie do oceny połączeń akordów w innych algorytmach harmonizacji. Oddzielenie sposobu oceny połączenia pozwala też na jego podmianę bez większych zmian w algorytmie harmonizacji. Oddzielenie wtyczki służącej do konfiguracji poza przejrzystością umożliwi też łatwe dostosowanie rozwiązania do systemu Mac OS, w którym nie działają okna dialogowe stworzone w wersji Sibeliusa pod system Windows, bo tylko ta wtyczka używa okien dialogowych więc wystarczy jej podmiana na napisaną w systemie Mac OS. Możliwość niezależnego testowania wtyczek. 14

15 2.3 Wtyczka Wizard Ponieważ program (Sibelius 5 Demo) nie jest dostępny w polskiej wersji językowej komunikaty wtyczki wyświetlane będą w języku angielskim. Budowa wtyczki Wtyczka składa się z sześciu okien dialogowych w których użytkownik wprowadza poszczególne parametry algorytmu harmonizacji: 1. okno powitalne (StartDlg); 2. okno wyboru ścieżki do pliku zawierającego bazę akordów (ChordsPathDlg); 3. okno wyboru interwału o jaki mają być przetransponowane akordy tak, by odpowiadały tonacji melodii (KeyDlg); 4. okno wyboru ścieżki do pliku zawierającego definicję reguł użytkownika (RulesPathDlg); 5. Okno konfiguracji parametrów reguł sprawdzanych przez wtyczkę RuleChecker (RulesDlg); 6. okno informujące o ukończeniu konfiguracji i gotowości do uruchomienia algorytmu harmonizacji (FinishDlg); Transponowanie to przenoszenie dźwięków z jednej tonacji do drugiej przez zmianę ich wysokości o zadany interwał (miarę odległości między dźwiękami). Dzięki temu można przygotować bazę akordów tylko dla jednej tonacji, a następnie w razie potrzeby transponować ją do innych. Wszystkie okna mają identyczne rozmiary, wyświetlane są pośrodku ekranu i zawierają następujące elementy interfejsu graficznego: przyciski nawigacyjne: Back (wszystkie oprócz pierwszego) i Next (wszystkie oprócz ostatniego) oraz przycisk: Cancel oraz związane z nimi metody; odpowiednie pola edycyjne służące do wpisania parametrów; etykiety tekstowe z podpowiedziami. 15

16 Działanie wtyczki Metoda Run() Działanie kodu metody Run() wtyczki Wizard (uruchamianej po kliknięciu na nazwę wtyczki w menu głównym programu Sibelius) polega na sprawdzeniu czy została zaznaczona melodia do harmonizacji. Jeśli tak, to wyświetlane są kolejne okna konfiguracyjne, jeżeli nie to użytkownik proszony jest o zaznaczenie melodii i ponowne uruchomienie wtyczki. Wyświetlanie okien realizowane jest za pomocą następującego kodu: ActDialog = "StartDlg"; while(actdialog!="end") { Sibelius.ShowDialog(@ActDialog,Self); } Kod jest podobny do kodu popularnych języków programowania jak Java czy C++, jednak jedna rzecz wymaga w nim wyjaśnienia. poprzedzający nazwę zmiennej powoduje odniesienie się nie do tej zmiennej ale do zmiennej, której nazwa jest jej wartością. W tym przypadku wartość zmiennej ActDialog to ciąg znaków StartDlg czyli zapis: Sibelius.ShowDialog(@ActDialog,Self); jest równoznaczny z zapisem: Sibelius.ShowDialog(StartDlg,Self); Zmienna ActDlg przechowuje informację o tym które okno ma zostać wyświetlone, a okna są wyświetlane do momentu aż przyjmie ona wartość End. 16

17 Metody Next() i Back() Kody metod związanych z przyciskami nawigacyjnymi okien są do siebie podobne, a ich działanie polega na sprawdzeniu poprawności danych i ustaleniu które okno dialogowe ma być wyświetlone jako następne. Np. kod metody ChordsPathDlgNext() związanej z przyciskiem: Next okna ChordsPathDlg wygląda następująco: if(sibelius.fileexists(_chordspath)) { ActDialog = "KeyDlg"; } else { Sibelius.MessageBox("Wrong Path!"); } Czyli jeśli plik o podanej ścieżce istnieje to po kliknięciu przycisku Next zostanie wyświetlone kolejne okno (KeyDlg), jeżeli nie program wyświetli ponownie okno ChordsPathDlg. Metody związane z przyciskami Back i Next pozostałych okien działają analogicznie. Ponieważ język ManuScript nie posiada mechanizmów pozwalających na wyrażenie przynależności metod do przycisków przyjęto konwencję nazywania metod tymi samymi nazwami co przycisków, poprzedzonymi nazwami okien dialogowych na których przyciski się znajdują. Metoda AnyDlgCancel() Związana jest z przyciskami Cancel wszystkich okien dialogowych jej wywołanie przerywa działanie wtyczki: Wizard. Kod metody: ActDialog = "End"; 17

18 Metoda FinishDlgHarmonize() Metoda ta kończy działanie wtyczki: Wizard i uruchamia metodę Run() wtyczki: Harmonizer wraz z ustalonymi parametrami, kod metody: ActDialog = "End"; Harmonizer.Run(_ChordsPath, _KeyValue, _RulesParameters, _RulesPath); 18

19 2.4 Wtyczka Harmonizer Wtyczka zbudowana jest z pięciu metod: Run(ChP,kv, _RulesParameters, path) - zawiera algorytm harmonizacji. Parametrami metody są kolejno: ścieżka do pliku z bazą akordów, interwał o jaki mają być przetransponowane akordy, tablica z parametrami reguł oraz ścieżka do pliku zawierającego reguły użytkownika; _LoadChords(ChP) wczytuje bazę akordów z pliku tekstowego, ścieżka do pliku jest parametrem metody; _FindPossibleChords(pitch, kv) tworzy listę akordów, które teoretycznie mogą być zastosowane do harmonizacji danego dźwięku nie biorąc pod uwagę reguł łączenia akordów (parametr pitch oznacza wysokość dźwięku, dla którego szukane są akordy, kv zawiera interwał o jaki akordy mają być transponowane); _FindName(ch) odnajduje nazwę akordu w bazie, parametrem jest akord; SetBestChord(x, ch) jeżeli akord został wyżej oceniony niż akord przechowywany w zmiennej globalnej _BestChord to jest wstawiany do tej zmiennej. Parametry metody to ocena akordu (x) i akord (ch). W języku ManuScript nie ma możliwości definiowania metod prywatnych i publicznych. Umownie dla zwiększenia czytelności kodu przyjęto następującą konwencję nazewnictwa metod metoda, której nazwa rozpoczyna się od znaku podkreślenia oznacza metodę prywatną, a metoda której nazwa nie jest poprzedzona tym znakiem jest metodą publiczną. W tym przypadku metody: Run() oraz SetBestChord() to metody publiczne, a pozostałe są metodami prywatnymi. 19

20 Działanie Metoda Run(ChP,kv, _RulesParameters, path) Odpowiada za wykonanie algorytmu harmonizacji i wprowadzenie zmian do zaznaczonej przez użytkownika melodii. Dodatkowo wyświetla okno z paskiem postępu informujące o stanie wykonywanego zadania. Początkowymi krokami algorytmu są: wczytanie bazy akordów z pliku o podanej ścieżce: _LoadChords(ChP); inicjalizacja generatora liczb pseudolosowych: Sibelius.RandomSeedTime(); wyłączenie odrysowywania nut przy każdej zmianie (gdyż znacznie spowalnia to działanie programu): thisscore = Sibelius.ActiveScore; thisscore.redraw = false; ustawienie wskaźnika na obiekt zaznaczenia reprezentujący zaznaczoną przez użytkownika melodię: selection = thisscore.selection; obliczenie ilości nut w zaznaczonej melodii żeby możliwe było określanie postępu harmonizacji na potrzeby okna postępu: length=0; for each NoteRest nr in selection { length = length+1; } 20

21 stworzenie okna postępu: Sibelius.CreateProgressDialog("Harmonizing melody (please wait)",0,length); Pseudokod samego algorytmu harmonizacji wygląda następująco: Dla każdego z zaznaczonych taktów T wykonuj: Begin Dla każdego obiektu NR reprezentującego pojedynczy dźwięk, lub współbrzmienie w takcie T wykonuj: Begin Jeżeli NR jest pojedynczym dźwiękiem: begin Znajdź możliwe do zastosowania akordy MA Wybierz najbardziej odpowiedni akord A2 z MA przez sprawdzenie połączeń MA[i] z poprzednio zastosowanym akordem A1 Dopisz dźwięki akordu do NR i podpisz NR nazwą akordu. A1 := A2; end; Jeżeli NR jest akordem: Begin Określ nazwę NR korzystając z bazy danych. A1 := NR; end; Aktualizuj okno postępu; end; End. Posłużono się tutaj pseudokodem, ponieważ kod algorytmu w języku ManuScript jest znacznie gorzej czytelny ze względu na konieczność reprezentacji akordów w postaci tablic. Kod w języku ManuScript tej i innych metod w przypadku których posłużono się pseudokodem dostępny jest w dokumentacji projektu. 21

22 Na koniec należy jeszcze włączyć z powrotem odrysowywanie nut, żeby zmiany dokonane w melodii się wyświetliły. Metoda _LoadChords(ChP) Używana jest w metodzie Run() w celu wczytania bazy akordów z pliku tekstowego. Sam kod metody w języku ManuScript jest trywialny: _Chords = Sibelius.ReadTextFile(ChP); Metoda ReadTextFile() klasy Sibelius zwraca reprezentację tablicową pliku w której kolejne rekordy odpowiadają kolejnym liniom pliku tekstowego. Należy jednak wyjaśnić budowę samego pliku przechowującego akordy. Pierwsza linia pliku zawiera informację o ilości akordów zapamiętanych w pliku. Następna oznacza ilość dźwięków w pierwszym akordzie, kolejne linie oznaczają wysokości tych dźwięków (ustawione rosnąco) podane w postaci liczb całkowitych zgodnie ze standardem MIDI. W tym standardzie np. dźwiękowi c¹ (czytaj c razkreślne ) odpowiada liczba 60, a kolejnym co do wysokości dźwiękom odpowiadają kolejne liczby całkowite. Linia kolejna po linii z najwyższym dźwiękiem akordu zawiera nazwę tego akordu w postaci ciągu znaków. W nazewnictwie akordów przyjęto następującą konwencję, która ułatwia późniejsze definiowanie reguł: 1 znak nazwy to pierwsza litera nazwy funkcji akordu 2 znak to cyfra oznaczająca dodany składnik np. 7 oznacza dodaną septymę, przy czym 0 oznacza brak dodanego składnika 3 znak to cyfra oznaczająca podstawę akordu np. 3 oznacza akord o podstawie tercji 4 znak to cyfra oznaczająca pozycję akordu np. 5 oznacza akord w pozycji kwinty 5 znak to cyfra oznaczająca stopień na którym zbudowany jest akord 6 znak oznacza układ akordu: S układ skupiony, R układ rozległy kolejne znaki to numer akordu (jeśli istnieje inny akord o tej samej nazwie) O pojęciach takich jak: funkcja, składnik, stopień oraz układ akordu można przeczytać w [KSH184]. 22

23 Kolejne linie zawierają informacje o kolejnych akordach przykładowa baza zawierająca dwa akordy toniki (na prymie i w pozycji prymy w układzie skupionym i rozległym) może wyglądać następująco: T0111S T0111R Baza powinna zawierać tylko akordy, których najwyższe dźwięki (dźwięki melodii) mieszczą się w oktawie razkreślnej w razie potrzeby zostaną one automatycznie przetransponowane do innych oktaw. 23

24 Metoda _FindPossibleChords(pitch, kv) Metoda wybiera ze wszystkich akordów (wczytanych do tablicy _Chords) te, które mają w sopranie dźwięk, którego wysokość jest parametrem metody. Drugi parametr mówi o jaki interwał akordy mają być transponowane. Pierwszym krokiem metody jest określenie o ile dodatkowych oktaw mają być transponowane akordy i realizuje go następujący kod w języku ManuScript: tkv = kv + 0; while(pitch+tkv<60) {tkv = tkv+12;} while(pitch+tkv>71) {tkv = tkv-12;} Żeby powyższy kod był zrozumiały należy wyjaśnić następujące kwestie: Nietypowy zapis + 0 wymusza skopiowanie do zmiennej tkv wartości zmiennej kv - bez tego tkv mogłoby być interpretowane jako wskaźnik na kv. Liczby 60 i 71 w pętlach while oznaczają zakres oktawy razkreślnej (wg. oznaczeń MIDI). Liczba 12 dodawana lub odejmowana od zmiennej tkv to odległość oktawy wyrażona w półtonach np. dźwięk c¹ ma wartość MIDI = 60, dźwięk c w kolejnej oktawie (dwukreślnej) c² będzie miał wartość = 72. Zmienna pitch oznacza wysokość harmonizowanego dźwięku. Zmienna kv to interwał o jaki mają być transponowane akordy do innej tonacji. Zmienna tkv uwzględnia dodatkowo przesunięcie akordów o odpowiednią ilość oktaw. Po ustaleniu wartości tkv pozostaje stworzenie listy akordów zawierającej akordy, które po przetransponowaniu o tkv będą miały w sopranie dźwięk o wysokości pitch. Pseudokod realizujący tą czynność jest następujący: Dla każdego akordu A z bazy _Chords: Jeśli wysokość najwyższego dźwięku w A przetransponowana o tkv = pitch dodaj akord do listy _PossibleChords 24

25 Metoda _FindName(ch, kv) Używana jest w algorytmie jeśli użytkownik zaznaczy fragment melodii, której część jest już zharmonizowana. Wtedy w celu prawidłowego połączenia istniejących akordów ze wstawianymi przydatne jest ustalenie ich nazw. Pseudokod metody jest następujący: Ustal czy i o ile dodatkowych oktaw akord był transponowany /* w sposób analogiczny do opisanego w przypadku metody _FindPossibleChords() */ Dla każdego akordu z _Chords Jeśli budowa akordu _Chords[i] jest taka sama jak danego akordu zwróć nazwę akordu Chords[i] Jeżeli nie znaleziono akordu o tej samej budowie zwróć ciąg znaków unknown chord. Dla akordów o nazwie unknown chord reguły wymagające analizy nazwy nie są sprawdzane. Metoda SetBestChord(x, ch) Używana jest przez wtyczkę RuleChecker i wywoływana za każdym razem, gdy wtyczka ta oceni zadane połączenie akordów. Jeśli ocena połączenia (x) jest wyższa niż ocena dotąd najwyżej ocenionego połączenia to akord (ch) i jego połączenia z poprzednim akordem ustawiane są jako najlepsze, kod metody jest następujący: if(x>_bestvalue) { _BestValue = x; _BestChord = ch; } 25

26 26

27 2.5 Wtyczka RuleChecker Wtyczka RuleChecker odpowiada za ocenę połączenia pomiędzy dwoma akordami. Ocena jest wynikiem sprawdzenia zgodności połączenia z regułami zaimplementowanymi w tej wtyczce oraz zapisanymi w pliku przez użytkownika. Na ocenę oprócz zgodności z daną regułą wpływa też waga nadana tej regule przez użytkownika. Powód nadania regułom wag dobrze ilustruje następujący przykład z życia codziennego: Weźmy pod uwagę kilka zasad, którymi kierujemy się w życiu codziennym: 1. Mężczyzna powinien ustępować pierwszeństwa kobiecie. 2. Osoby wchodzące powinny ustąpić pierwszeństwa osobom wychodzącym. 3. Należy ustąpić pierwszeństwa osobie jadącej samochodem z prawej strony. Każda z zasad z osobna nie sprawia problemów, ale możliwe są sytuacje w których pojawią się sprzeczności np.: Mężczyzna wychodzi z pomieszczenia w chwili gdy kobieta próbuje do niego wejść. Mężczyzna nadjeżdża z prawej strony. Mężczyzna dżentelmen prawdopodobnie ustąpi pierwszeństwa kobiecie mimo iż to on wychodzi z pomieszczenia, ale na drodze raczej uzna za ważniejsze przepisy o ruchu drogowym. Jego zachowanie można symulować nadając następujące wagi wymienionym wcześniej zasadom: Zasada 1 waga: 2 Zasada 2 waga: 1 Zasada 3 waga: 3 27

28 O ocenie każdego z możliwych rozwiązań zadecyduje ich zgodność z zasadami oraz wagi zasad np.: Ustąpienie pierwszeństwa kobiecie podczas wychodzenia z pomieszczenia jest zgodne z zasadą pierwszą i sprzeczne z zasadą drugą, a zasada 3 go nie dotyczy więc jego ocena będzie wynosić: = 1 Wyjście z pomieszczenia przed kobietą jest sprzeczne z zasadą 1, ale zgodne z zasadą drugą. Ocena więc wynosi: = -1 W ruchu drogowym dla przejechania przed kobietą ocena wynosi: = 1 Dla czekania aż kobieta przejedzie mimo że to mężczyzna ma pierwszeństwo: = -1 Aby symulować zachowanie mężczyzny, który nie jest dżentelmenem można by pierwszej zasadzie ustawić wagę 0, a jeśli chciałoby się symulować zachowanie mężczyzny przesadnie uprzejmego dla kobiet nadać jej najwyższą wagę. Można też dodając inne reguły symulować zachowanie mężczyzny, który ustępuje pierwszeństwa w zależności od tego na ile kobieta mu się podoba (dodając iloczyn oceny wyglądu i wagi tej reguły do całościowej oceny rozwiązania). Podsumowując, nadawanie wag zasadom pozwala: rozwiązać problem sprzecznych zasad; tworzyć różne schematy postępowania przez ustawianie różnych wag regułom; 28

29 Podobnie jak w powyższym przykładzie w harmonii istnieją reguły, które w pewnych sytuacjach są ze sobą sprzeczne. Stąd właśnie pomysł zastosowania wag w algorytmie oceniającym połączenia akordów. Jednym z założeń projektu jest też możliwość dostosowania algorytmu do specyficznych potrzeb użytkownika, a konfiguracja wag jest jednym ze sposobów realizacji tego założenia. Budowa wtyczki Wtyczka składa się z następujących metod: Run(ch1, ch2, RulesParameters, IsNewBar,path) realizującej algorytm oceny, której parametrami są kolejno: dwa akordy, których połączenie jest oceniane, tablica z wagami kolejnych reguł, zmienna logiczna informująca o tym czy połączenie występuje pomiędzy dwoma taktami oraz ścieżka do pliku zawierającego reguły użytkownika; Zbiór metod oceniających połączenie według kolejnych reguł: _Rule1(ch1, ch2, imp), _Rule2(ch1, ch2, imp) itd. Parametrami wszystkich tych reguł są dwa akordy oraz waga reguły; _CheckFileRules(ch1,ch2,path) ocenia połączenie według reguł zapisanych w pliku przez użytkownika. Parametrami są dwa akordy oraz ścieżka do pliku z regułami; _IsDifferentFunction(ch1,ch2) - pomocnicza metoda sprawdzająca czy dwa akordy pełnią różne funkcje; _CompareNames(n1,n2) pomocnicza metoda sprawdzająca czy dwa wzory nazw pasują do siebie. 29

30 Działanie wtyczki Metoda Run(ch1, ch2, RulesParameters, IsNewBar,path): Wtyczka najpierw inicjuje zmienne globalne: _Value reprezentującą łączną ocenę akordu na zero oraz _IsNewBar mówiącą o tym czy akordy łączone są pomiędzy dwoma taktami, czy znajdują się w jednym takcie zgodnie z podanym parametrem. Kod: _Value = 0; _IsNewBar = IsNewBar; Następnie wywołuje wszystkie funkcje sprawdzające reguły. Kod: rc = 8; //liczba zaimplementowanych reguł i = 1; while(i<rc) { x = RulesParameters[i]+0; myrule = "_Rule" & } i=i+1; Kolejnym krokiem jest wywołanie funkcji sprawdzającej reguły zapisane w pliku jeśli ścieżka do pliku została podana. Kod: if(path!="none") { _CheckFileRules(ch1,ch2,path); } 30

31 Na końcu wywoływana jest metoda wtyczki Harmonizer, która jeśli akord został najwyżej oceniony (z dotychczas ocenianych akordów) ustawia odpowiednie zmienne globalne we wtyczce Harmonizer. Kod: Harmonizer.SetBestChord(_Value, ch2); Metody sprawdzające reguły łączenia akordów Metoda _Rule1(ch1, ch2, imp) - Reguła losowa Jest to reguła, która nie ma nic wspólnego z zasadami harmonii i służy tylko do tego, żeby zróżnicować wyniki zwracane przez algorytm. Jej działanie polega na wylosowaniu liczby z przedziału od 0 do 100 i pomnożeniu przez nią wagi reguły oraz dodaniu wyniku do łącznej oceny połączenia. Kod: result = (Sibelius.RandomNumber() % 100) * imp; _Value = _Value + result; Największy sens ma zastosowanie w tej regule małej wagi (w stosunku do innych reguł). Wtedy spowoduje ona że jeśli kilka rozwiązań otrzyma identyczną ocenę to zamiast pierwszego napotkanego zostanie wylosowane jedno z najlepszych rozwiązań. Nieco większe wagi spowodują, że lepsze rozwiązania będą miały większe szanse na to by zostać zastosowane. Zbyt duże wagi spowodują uzyskanie losowych wyników. Metoda _Rule2(ch1, ch2, imp) - Reguła najkrótszej drogi Często pojawiającą się regułą w [KSH184] jest reguła mówiąca o tym, że dźwięki składowe pierwszego z akordów (oprócz dźwięku w basie) powinny dążyć najkrótszą drogą na dźwięki drugiego akordu, czyli przesuwać się o jak najmniejsze interwały. Metoda realizuje ten cel wyliczając sumę odległości o jaką przesuwają się dźwięki w trzech pierwszych głosach (im dalsza droga tym większa suma) następnie mnoży ją przez wagę reguły i odejmuje od łącznej oceny połączenia. Ustalając wagę dla tej reguły należy wziąć pod uwagę to, że regułę najbliższej drogi należy traktować na zasadzie wskazówki, ponieważ akordy mogą zostać połączone dalszą 31

32 drogą w sposób uznawany za prawidłowy. Dlatego reguła ta powinna mieć mniejszą wagę od reguł, których niestosowanie jest uznawane za błąd. Należy też pamiętać o tym, że waga zostanie przemnożona przez liczbę całkowitą (wyliczoną sumę odległości) czyli zwiększy się kilka lub kilkunastokrotnie. Metoda _Rule3(ch1, ch2, imp) - Zachowaj wspólny dźwięk To inna z często pojawiających się w [KSH184] reguł. Mówi ona o tym, że jeśli akordy posiadają wspólny dźwięk to należy go zachować w tym samym głosie. Zrealizować można to poprzez zwiększenie całościowej oceny połączenia o wagę reguły jeśli został w nim zachowany wspólny dźwięk w tym samym głosie. Podobnie jak w przypadku poprzedniej z opisywanych reguł ustalając wagę tej reguły należy pamiętać o tym że jej spełnienie nie jest konieczne do tego aby połączenie uznane było za prawidłowe, więc jej waga nie powinna być przesadnie wysoka. Metoda _Rule4(ch1, ch2, imp) - Równoległe prymy kwinty i oktawy Reguła (zaczerpnięta z [KSH184]) mówi o tym, że głosy nie mogą przesuwać się równoległymi prymami, kwintami oraz oktawami. Oznacza to, że jeśli w pierwszym z akordów występował któryś z tych interwałów pomiędzy dwoma głosami (pryma, kwinta lub oktawa) to nie może on wystąpić między nimi w kolejnym akordzie. Działanie tej metody polega na odnalezieniu wyżej wymienionych interwałów w pierwszym z akordów oraz sprawdzeniu czy w drugim z akordów występuje ten sam interwał pomiędzy tymi głosami. Ilość równoległych niedozwolonych interwałów pomnożona przez wagę reguły jest odejmowana od całościowej oceny połączenia. Połączenia niezgodne z tą regułą uznawane są za błędne, o czym powinno się pamiętać ustalając jej wagę tak, by była odpowiednio wysoka. Metoda _Rule5(ch1, ch2, imp) - Zmień funkcję jeśli sopran stoi, powtórz jeśli skacze na inny dźwięk tej samej funkcji Ponieważ do jednego dźwięku można dopasować akordy będące różnymi funkcjami, reguła (zaczerpnięta z [KSH184]) pomaga w decyzji o tym jaką funkcją powinien być akord, który zostanie zastosowany. Całościowa ocena akordów spełniających regułę jest zwiększana o jej wagę, natomiast ocena akordów niespełniających reguły jest o nią zmniejszana. 32

33 Reguła często jest sprzeczna z regułą mówiącą o tym że nie należy powtarzać funkcji przez kreskę taktową, co powinno być brane pod uwagę podczas dobierania wag do obu reguł. Metoda _Rule6(ch1, ch2, imp) - Niedozwolone skoki o septymę oraz więcej niż oktawę Reguła (zaczerpnięta z [KSH184]) mówi o tym, że w melodiach poszczególnych głosów nie mogą występować skoki o interwał septymy oraz interwały większe od oktawy. Metoda zlicza takie skoki, a ich liczbę pomnożoną przez wagę reguły odejmuje od całościowej oceny połączenia. Metoda _Rule7(ch1, ch2, imp) - Nie powtarzaj funkcji przez kreskę taktową Reguła (zaczerpnięta z [KSH184]) mówi o tym, że należy podkreślić to, że rozpoczął się nowy takt poprzez zmianę funkcji. Metoda sprawdza czy połączenie występuje pomiędzy dwoma taktami i jeśli tak, to całościowe oceny akordów będących powtórzeniami tej samej funkcji są obniżane o wagę reguły. Reguła często jest sprzeczna z regułą mówiącą o tym, że należy powtórzyć funkcję jeśli dźwięk w sopranie skacze na inny dźwięk tej samej funkcji, co powinno być brane pod uwagę podczas dobierania wag do obu reguł. Metoda _CheckFileRules(ch1,ch2,path) Po zaimplementowaniu wyżej wymienionych reguł w celu sprawdzenia czy udało się zminimalizować liczbę błędów (jako błąd rozumie się tutaj rozwiązanie, które nie odpowiada użytkownikowi) na podstawie [KSH184] opracowano przykładowe bazy akordów ( C major chords.sib oraz C minor chords.sib ) i w oparciu o te bazy poszukiwano najodpowiedniejszych parametrów metod sprawdzających reguły przez harmonizowanie różnych melodii z różnymi parametrami metod. Kiedy wyniki uznane zostały za satysfakcjonujące przesłano rozwiązanie jednego z zadań (nr 46 z [KSH184]) do osób studiujących na kierunkach związanych z muzyką (czyli potencjalnych użytkowników tworzonego programu) do analizy. Pierwszą osobą do której wysłano zharmonizowany przykład był student kierunku Jazz i Muzyka Estradowa. Ponieważ muzykę rozrywkową cechuje dość luźne podejście do zasad harmonii wywodzących 33

34 się jeszcze z epoki klasycyzmu uznał on otrzymane rozwiązanie za prawidłowe. Zwrócił jedynie uwagę na skok (o septymę), który udało się od razu wyeliminować poprzez zwiększenie wagi metody wyszukującej niepoprawne skoki. Drugą osobą do której wysłano program była studentka kierunku Pedagogika Poprzez Sztukę, która wcześniej ukończyła też średnią szkołę muzyczną oraz studium organowe. Zwróciła ona uwagę, że w rozwiązaniu funkcja toniki często łączy się z funkcją dominanty septymowej w pozycji septymy, co powoduje częste powtarzanie funkcji dominanty. Jej zdaniem w tych sytuacjach lepszym rozwiązaniem było by zastosowanie funkcji subdominanty w pozycji prymy, a dopiero potem ewentualnie dominanty. Tej uwagi nie dało się zrealizować za pomocą modyfikacji wag istniejących reguł, a dopisywanie nowej reguły dla tak szczególnego przypadku (prawdopodobnie nie jedynego) nie wydawało się dobrym rozwiązaniem. Lepszym rozwiązaniem wydaje się stworzenie możliwości definiowania dodatkowych reguł w pliku tekstowym tak, żeby użytkownik był w stanie samodzielnie je pisać. Dzięki przyjęciu odpowiedniej konwencji nazewnictwa akordów możliwe okazuje się definiowanie reguł na podstawie nazw akordów. Reguła może być reprezentowana jako dwie nazwy akordów których dotyczy oraz ocena ich połączenia. Z tym, że dla zmniejszenia liczby reguł w rozwiązaniu zastosowano wzorce nazw. Wzorce tworzyć można przez zastępowanie wybranych znaków znakiem X, który nie będzie brany pod uwagę podczas porównywania nazwy akordu z wzorcem. W ten sposób wzorzec: D7X7XX oznaczać będzie funkcję dominanty septymowej w pozycji septymy opartą na dowolnym składniku, w dowolnym układzie. A reguła zapisana w następujący sposób: TXXXXX D7X7XX

35 spowoduje, że od całościowej oceny połączeń toniki w dowolnym układzie z dominantą septymową w pozycji septymy zostanie odjęty tysiąc. Czyli takie połączenia nie będą występowały w rozwiązaniu. Samo działanie metody _CheckFileRules() jest dość oczywiste i polega na odszukaniu w pliku wzorców nazw pasujących do nazw akordów, które są parametrami metody oraz dodaniu odpowiednich wartości do całościowej oceny połączenia. Nazwy z wzorcami porównywane są za pomocą pomocniczej metody _CompareNames(). Po zaimplementowaniu wymienionych wyżej metod oraz zapisaniu w pliku reguły dotyczącej łączenia (a raczej nie łączenia) funkcji toniki z funkcją dominanty septymowej w pozycji septymy ponownie zharmonizowano zadanie (nr 46 z [KSH184]) z użyciem wcześniej używanych parametrów i posłano go do studentki mającej zastrzeżenia do poprzedniego rozwiązania. Tym razem stwierdziła, że sama by go rozwiązała w taki sam sposób, co potwierdza skuteczność proponowanego rozwiązania. Teoretycznie możliwe jest zapisanie w pliku reguł, które zostały wcześniej zaimplementowane, ale takie rozwiązanie wymagałoby zapisania osobnych reguł np. dla wszystkich par akordów (z bazy akordów), w których połączeniu występują równoległe prymy, kwinty lub oktawy. Takich reguł byłoby dużo, w dodatku ich ilość rosłaby wraz z powiększaniem się bazy akordów, dlatego lepszym rozwiązaniem wydaje się zastosowanie dwóch mechanizmów sprawdzających reguły. 35

36 36

37 3 Podsumowanie 3.1 Test wydajności Czas wykonania algorytmu harmonizacji zależy od następujących zmiennych czynników czynników: liczby dźwięków w danej melodii; liczby akordów zapisanych w pliku tekstowym; liczby reguł zapisanych w pliku tekstowym. Poniższy wykres przedstawia zależność pomiędzy liczbą dźwięków w danej melodii, a średnim czasem wykonania jej harmonizacji (średnia z 50 uruchomień algorytmu). Melodie dla których wykonane były pomiary składają się z losowych dźwięków z oktawy razkreślnej i dwukreślnej. Harmonizacja wykonywana była w oparciu o przygotowaną na podstawie [KSH184] bazę akordów C major chords.sib zawierającą 98 akordów oraz przykładową bazę reguł rules.sib zawierającą 6 reguł czas [ms] liczba dźwięków w melodii Z powyższego wykresu można wnioskować, że czas wykonania algorytmu rośnie w przybliżeniu liniowo w stosunku do liczby dźwięków w melodii, a czas harmonizacji 37

38 jednego dźwięku wynosi około 70 milisekund. Zależność liniową potwierdza poniższy wykres przedstawiający czas wykonania algorytmu dla wszystkich długości melodii z zakresu od 1 do 200 dźwięków z użyciem tej samej bazy akordów i reguł co w poprzednich pomiarach czas [ms] liczba dźwięków w melodii Poniższy wykres przedstawia średni czas harmonizacji jednego dźwięku melodii (5 prób po 100 dźwięków) przy niewielkiej zmianie rozmiarów bazy akordów. 80 czas harmonizacji jednego dźwięku [ms] liczba akordów w bazie 38

39 Test pokazał, że dopisanie jednego akordu do bazy akordów zwiększa czas harmonizacji jednego dźwięku o około 0,75 milisekundy. W bazie akordów nie są spodziewane duże zmiany jeśli chodzi o ilość akordów, a niewielkie zmiany nie mają dużego wpływu na szybkość działania algorytmu. Podobny pomiar wykonany przy zmianie wielkości bazy reguł pokazuje, że dodanie jednej reguły do bazy reguł zwiększa czas harmonizacji dla jednego dźwięku o około 2,72 milisekundy. Wszystkie testy przeprowadzone były na notebooku Toshiba Satellite A-135 z procesorem Intel Dual-Core T-2060 i 1,5 GB RAM. Z testów wydajności programu wynika, że działa on wystarczająco szybko żeby jego użytkowanie nie było uciążliwe dla użytkownika. Istnieją też rezerwy gwarantujące, że rozbudowa baz akordów oraz reguł nie spowolni działania programu w stopniu uciążliwym dla użytkownika. 39

40 40

41 3.2 Możliwości rozwoju Zaproponowane rozwiązanie może być rozwijane przez samych użytkowników (muzyków, aranżerów kompozytorów) poprzez tworzenie różnorodnych baz akordów oraz reguł ich łączenia. Narzędzie zaprojektowane było w taki sposób, żeby w razie potrzeby łatwo można było wprowadzić odpowiednie zmiany w kodzie. Dlatego wydzielono te części kodu, w których spodziewane są zmiany w przyszłości. Najbardziej prawdopodobnym miejscem, w którym należałoby spodziewać się zmian w przyszłości jest metoda Run() wtyczki Harmonizer zawierająca algorytm harmonizacji. Zaproponowany algorytm jest algorytmem liniowym, którego wynik opiera się na podjęciu szeregu suboptymalnych decyzji o tym, jakie współbrzmienie akordowe zastosować. Zaletą takiego rozwiązania jest szybkie działanie, jednak nie musi ono dawać optymalnego rozwiązania w sensie najwyższego stopnia zgodności sumy ocen wszystkich połączeń z zadanymi regułami. W celu uzyskania najwyższego stopnia zgodności z regułami należałoby ocenić wszystkie kombinacje możliwych do zastosowania współbrzmień. Taki algorytm charakteryzowałby się jednak bardzo dużym stopniem złożoności. Innym możliwym rozwiązaniem jest zastosowanie algorytmu genetycznego, w którym osobnikami mogłyby być rozwiązania tworzone za pomocą istniejącego algorytmu z ustawioną dużą wagą dla reguły losowej, a funkcja oceny przystosowania działałaby w oparciu o wtyczkę RuleChecker. Biorąc jednak pod uwagę dość długi czas wykonywania się zaproponowanego przeze mnie algorytmu liniowego to rozwiązanie również na chwilę obecną wydaje się zbyt wolne. Niezależnie od tego, które z wyżej wymienionych rozwiązań zostałoby zastosowane w przyszłości to zmiany w projekcie będą dotyczyły tylko metody Run() wtyczki Harmonizer. Dodatkowo poza modyfikacjami istniejącego rozwiązania dobrym pomysłem byłaby rozbudowa jego funkcjonalności o możliwość edycji bazy akordów w programie Sibelius, a nie w pliku tekstowym. Taki sposób edycji byłby dużo bardziej wygodny dla użytkownika, jednak ta funkcjonalność nie mogła zostać zrealizowana z powodu ograniczenia wersji demo jakim jest brak możliwości zapisywania plików. 41

42 42

43 3.3 Wnioski Zaproponowane rozwiązanie pokazuje, że proces harmonizacji melodii może być w dużym stopniu skutecznie zautomatyzowany. W projekcie udało się zrealizować stawiane cele z tym zastrzeżeniem, że zastosowany liniowy algorytm harmonizacji jest kompromisem pomiędzy wydajnością, a stopniem zgodności całego rozwiązania z zadanymi regułami. Rozwiązania generowane przez program są dobrze oceniane przez potencjalnych użytkowników. Wnioski z doboru narzędzi Istotne są też wnioski związane z doborem narzędzi, które sprawiały pewne nieoczekiwane problemy podczas realizacji projektu. Język ManuScript oprócz problemów spowodowanych ograniczeniami związanymi z brakiem możliwości definicji własnych typów i klas sprawia też problemy, których rozwiązania próżno szukać w [UTMSL05] (jedynej dokumentacji języka). Przykładem takiego problemu może być metoda: Sibelius.ResetStopWatch(timer number); Zgodnie z [UTMSL05] parametrem tej metody powinna być zmienna reprezentująca czas, a metoda powinna ten czas wyzerować. Z tym, że ManuScript jako język dynamicznie typowany nie umożliwia deklaracji zmiennej takiego typu. Próba użycia zmiennej wcześniej nie zainicjowanej powoduje komunikat błędu mówiący, że nie odnaleziono parametru, próba zainicjowania parametru wartością 0 lub dowolnym ciągiem znaków powoduje komunikat błędu mówiący, że nie odnaleziono metody. Rozwiązaniem okazuje się zainicjowanie parametru wartością 1. Dojść do takiego rozwiązania można jedynie metodą prób i błędów, ponieważ to czy zastosuje się wartość całkowitą 0, czy 1 do zainicjowania parametru nie powinno mieć wpływu na to, czy metoda zostanie odnaleziona, czy nie. Tego rodzaju nieudokumentowane, nietypowe zachowania znacznie utrudniają pracę nad projektem. Problemem oprócz samego języka jest też edytor kodu wbudowany w program Sibelius. Edytor ten w porównaniu z edytorami dedykowanymi do popularnych języków programowania jest bardzo ograniczony. 43

44 Wady edytora: Nie posiada tak podstawowych funkcjonalności jak kolorowanie składni, podpowiedzi, czy obsługa popularnych skrótów klawiszowych (np. ctrl+a). Kod każdej metody edytuje się w osobnym oknie, a okna te są oknami modalnymi i nie można otworzyć kilku naraz. Przypadkowe zamknięcie okna edycji metody powoduje utratę wszelkich zmian bez typowego w tym przypadku pytania o potwierdzenie. Wyżej wymienione ukryte wady języka ManuScript oraz wbudowanego w program Sibelius edytora kodu znacznie wydłużają czas pracy nad projektem i w przypadku większych projektów mogą być poważnymi argumentami za wyborem lub stworzeniem innych narzędzi. 44

45 4 Bibliografia [JHSM77] : Jerzy Habela, Słowniczek Muzyczny, PWM 1977 [KSH184]: Kazimierz Sikorski, Harmonia cz. I, PWM 1984 [KSH284]: Kazimierz Sikorski, Harmonia cz. II, PWM 1984 [BDSEDM]: Beata Drabik-Sowa, artykuł: Elementy Dzieła Muzycznego, data dostępu: [UTMSL05]: Jonathan Finn, James Larcombe, Yasir Assam, Simon Whiteside, Mike Copperwhite, Paul Walmsley and Graham, Using The ManuScript Language, Westlake, Edition , data dostępu: [SHP08]: Sibelius home page data dostępu: [FM08] Finale music and composing software data dostępu:

Add harmony Automatyczna harmonizacja melodii

Add harmony Automatyczna harmonizacja melodii Add harmony Automatyczna harmonizacja melodii DOKUMENTACJA Filip Łakomik Spis treści Wizard...2 Odpowiedzialności...2 Sposób realizacji odpowiedzialności...3 Pola...3 Okna...3 Metody...4 Publiczne...4

Bardziej szczegółowo

Add harmony Automatyczna harmonizacja melodii

Add harmony Automatyczna harmonizacja melodii Add harmony Automatyczna harmonizacja melodii PODRĘCZNIK UŻYTKOWNIKA Filip Łakomik Spis treści 1. Wstęp...2 1.1 Prawa autorskie...2 1.2 Zawartość dokumentu...3 2. Instalacja i usuwanie wtyczki...3 2.1

Bardziej szczegółowo

Narzędzie informatyczne wspomagające dokonywanie ocen pracowniczych w służbie cywilnej

Narzędzie informatyczne wspomagające dokonywanie ocen pracowniczych w służbie cywilnej Narzędzie informatyczne wspomagające dokonywanie ocen pracowniczych w służbie cywilnej elektroniczne formularze arkuszy ocen okresowych i pierwszej oceny Instrukcja użytkownika Wersja 1.0 DSC KPRM 2015

Bardziej szczegółowo

Tworzenie prezentacji w MS PowerPoint

Tworzenie prezentacji w MS PowerPoint Tworzenie prezentacji w MS PowerPoint Program PowerPoint dostarczany jest w pakiecie Office i daje nam możliwość stworzenia prezentacji oraz uatrakcyjnienia materiału, który chcemy przedstawić. Prezentacje

Bardziej szczegółowo

lekcja 8a Gry komputerowe MasterMind

lekcja 8a Gry komputerowe MasterMind lekcja 8a Gry komputerowe MasterMind Posiadamy już elementarną wiedzę w zakresie programowania. Pora więc zabrać się za rozwiązywanie problemów bardziej złożonych, które wymagają zastosowania typowych

Bardziej szczegółowo

Zawartość. Wstęp. Moduł Rozbiórki. Wstęp Instalacja Konfiguracja Uruchomienie i praca z raportem... 6

Zawartość. Wstęp. Moduł Rozbiórki. Wstęp Instalacja Konfiguracja Uruchomienie i praca z raportem... 6 Zawartość Wstęp... 1 Instalacja... 2 Konfiguracja... 2 Uruchomienie i praca z raportem... 6 Wstęp Rozwiązanie przygotowane z myślą o użytkownikach którzy potrzebują narzędzie do podziału, rozkładu, rozbiórki

Bardziej szczegółowo

Formularz pierwszej oceny w służbie cywilnej

Formularz pierwszej oceny w służbie cywilnej Narzędzie informatyczne wspomagające dokonywanie pierwszej oceny w służbie cywilnej przygotowane w ramach projektu pn. Strategia zarządzania zasobami ludzkimi w służbie cywilnej współfinansowanego przez

Bardziej szczegółowo

Otwórz i zamknij kilka dokumentów tekstowych, następnie sprawdź zawartość menu Plik.

Otwórz i zamknij kilka dokumentów tekstowych, następnie sprawdź zawartość menu Plik. tym rozdziale odnajdziesz użyteczne drobiazgi związane z programem Word, które z różnych względów nie zostały omówione szczegółowo w osobnych rozdziałach. Otwórz i zamknij kilka dokumentów tekstowych,

Bardziej szczegółowo

5.4. Tworzymy formularze

5.4. Tworzymy formularze 5.4. Tworzymy formularze Zastosowanie formularzy Formularz to obiekt bazy danych, który daje możliwość tworzenia i modyfikacji danych w tabeli lub kwerendzie. Jego wielką zaletą jest umiejętność zautomatyzowania

Bardziej szczegółowo

Ogranicz listę klasyfikacji budżetowych do powiązanych z danym kontem księgowym

Ogranicz listę klasyfikacji budżetowych do powiązanych z danym kontem księgowym Zależności i kontrola danych budżetowych w systemie Sz@rk FK 1. Wstęp Począwszy od wersji Sz@rk FK 2011 (11.03.30) wprowadzono do programu finansowoksięgowego nowe możliwości dotyczące kontrolowania poprawności

Bardziej szczegółowo

MS Word 2010. Długi dokument. Praca z długim dokumentem. Kinga Sorkowska 2011-12-30

MS Word 2010. Długi dokument. Praca z długim dokumentem. Kinga Sorkowska 2011-12-30 MS Word 2010 Długi dokument Praca z długim dokumentem Kinga Sorkowska 2011-12-30 Dodawanie strony tytułowej 1 W programie Microsoft Word udostępniono wygodną galerię wstępnie zdefiniowanych stron tytułowych.

Bardziej szczegółowo

CZĘŚĆ A PIERWSZE KROKI Z KOMPUTEREM

CZĘŚĆ A PIERWSZE KROKI Z KOMPUTEREM CZĘŚĆ A PIERWSZE KROKI Z KOMPUTEREM 1.1. PODSTAWOWE INFORMACJE PC to skrót od nazwy Komputer Osobisty (z ang. personal computer). Elementy komputera można podzielić na dwie ogólne kategorie: sprzęt - fizyczne

Bardziej szczegółowo

OBIEKTY TECHNICZNE OBIEKTY TECHNICZNE

OBIEKTY TECHNICZNE OBIEKTY TECHNICZNE OBIEKTY TECHNICZNE Klawisze skrótów: F7 wywołanie zapytania (% - zastępuje wiele znaków _ - zastępuje jeden znak F8 wyszukanie według podanych kryteriów (system rozróżnia małe i wielkie litery) F9 wywołanie

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

Przewodnik użytkownika (instrukcja) AutoMagicTest

Przewodnik użytkownika (instrukcja) AutoMagicTest Przewodnik użytkownika (instrukcja) AutoMagicTest 0.1.21.137 1. Wprowadzenie Aplikacja AutoMagicTest to aplikacja wspierająca testerów w testowaniu i kontrolowaniu jakości stron poprzez ich analizę. Aplikacja

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Zapisywanie algorytmów w języku programowania

Zapisywanie algorytmów w języku programowania Temat C5 Zapisywanie algorytmów w języku programowania Cele edukacyjne Zrozumienie, na czym polega programowanie. Poznanie sposobu zapisu algorytmu w postaci programu komputerowego. Zrozumienie, na czym

Bardziej szczegółowo

1 Moduł Inteligentnego Głośnika

1 Moduł Inteligentnego Głośnika 1 Moduł Inteligentnego Głośnika Moduł Inteligentnego Głośnika zapewnia obsługę urządzenia fizycznego odtwarzającego komunikaty dźwiękowe. Dzięki niemu możliwa jest konfiguracja tego elementu Systemu oraz

Bardziej szczegółowo

Ustawienia ogólne. Ustawienia okólne są dostępne w panelu głównym programu System Sensor, po kliknięciu ikony

Ustawienia ogólne. Ustawienia okólne są dostępne w panelu głównym programu System Sensor, po kliknięciu ikony Ustawienia ogólne Ustawienia okólne są dostępne w panelu głównym programu System Sensor, po kliknięciu ikony Panel główny programu System Sensor (tylko dla wersja V2, V3, V4) Panel główny programu System

Bardziej szczegółowo

Rozdział 5. Administracja kontami użytkowników

Rozdział 5. Administracja kontami użytkowników Rozdział 5. Administracja kontami użytkowników Ćwiczenia zawarte w tym rozdziale pozwolą przygotować oddzielne środowisko pracy dla każdego użytkownika komputera. Windows XP, w porównaniu do systemów Windows

Bardziej szczegółowo

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

Bardziej szczegółowo

Wprowadzenie do projektu QualitySpy

Wprowadzenie do projektu QualitySpy Wprowadzenie do projektu QualitySpy Na podstawie instrukcji implementacji prostej funkcjonalności. 1. Wstęp Celem tego poradnika jest wprowadzić programistę do projektu QualitySpy. Będziemy implementować

Bardziej szczegółowo

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS UNIWERSYTET ZIELONOGÓRSKI INSTYTUT INFORMATYKI I ELEKTROTECHNIKI ZAKŁAD INŻYNIERII KOMPUTEROWEJ Przygotowali: mgr inż. Arkadiusz Bukowiec mgr inż. Remigiusz Wiśniewski LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

Bardziej szczegółowo

Dokumentacja programu. Zoz. Uzupełnianie kodów terytorialnych w danych osobowych związanych z deklaracjami POZ. Wersja

Dokumentacja programu. Zoz. Uzupełnianie kodów terytorialnych w danych osobowych związanych z deklaracjami POZ. Wersja Dokumentacja programu Zoz Uzupełnianie kodów terytorialnych w danych osobowych związanych z deklaracjami POZ Wersja 1.40.0.0 Zielona Góra 2012-02-29 Wstęp Nowelizacja Rozporządzenia Ministra Zdrowia z

Bardziej szczegółowo

wagi cyfry 7 5 8 2 pozycje 3 2 1 0

wagi cyfry 7 5 8 2 pozycje 3 2 1 0 Wartość liczby pozycyjnej System dziesiętny W rozdziale opiszemy pozycyjne systemy liczbowe. Wiedza ta znakomicie ułatwi nam zrozumienie sposobu przechowywania liczb w pamięci komputerów. Na pierwszy ogień

Bardziej szczegółowo

INSTRUKCJA obsługi certyfikatów

INSTRUKCJA obsługi certyfikatów INSTRUKCJA obsługi certyfikatów dla użytkownika bankowości internetowej Pocztowy24 z wybraną metodą autoryzacji Certyfikat Spis treści 1. Wstęp... 3 1.1 Wymagania techniczne... 3 2. Certyfikat jako jedna

Bardziej szczegółowo

Maciej Piotr Jankowski

Maciej Piotr Jankowski Reduced Adder Graph Implementacja algorytmu RAG Maciej Piotr Jankowski 2005.12.22 Maciej Piotr Jankowski 1 Plan prezentacji 1. Wstęp 2. Implementacja 3. Usprawnienia optymalizacyjne 3.1. Tablica ekspansji

Bardziej szczegółowo

1 Moduł Inteligentnego Głośnika 3

1 Moduł Inteligentnego Głośnika 3 Spis treści 1 Moduł Inteligentnego Głośnika 3 1.1 Konfigurowanie Modułu Inteligentnego Głośnika........... 3 1.1.1 Lista elementów Modułu Inteligentnego Głośnika....... 3 1.1.2 Konfigurowanie elementu

Bardziej szczegółowo

Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych)

Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych) Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych) Funkcja uwikłana (równanie nieliniowe) jest to funkcja, która nie jest przedstawiona jawnym przepisem, wzorem wyrażającym zależność wartości

Bardziej szczegółowo

Kolejne osoby możemy wyświetlać naciskając przyciski do przesuwania rekordów.

Kolejne osoby możemy wyświetlać naciskając przyciski do przesuwania rekordów. Wskazówki do wykonania Ćwiczenia 7, Korespondencja seryjna (Word 2007) ze strony http://logika.uwb.edu.pl/mg/ Autor: dr Mariusz Giero Narzędzie korespondencji seryjnej warto użyć, gdy naszym zadaniem jest

Bardziej szczegółowo

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost; Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze

Bardziej szczegółowo

Krótki kurs obsługi środowiska programistycznego Turbo Pascal z 12 Opracował Jan T. Biernat. Wstęp

Krótki kurs obsługi środowiska programistycznego Turbo Pascal z 12 Opracował Jan T. Biernat. Wstęp Krótki kurs obsługi środowiska programistycznego Turbo Pascal 7.0 1 z 12 Wstęp Środowisko programistyczne Turbo Pascal, to połączenie kilku programów w jeden program. Środowisko to zawiera m.in. kompilator,

Bardziej szczegółowo

2.8. Algorytmy, schematy, programy

2.8. Algorytmy, schematy, programy https://app.wsipnet.pl/podreczniki/strona/38766 2.8. Algorytmy, schematy, programy DOWIESZ SIĘ co oznaczają pojęcia: algorytm, schemat blokowy, język programowania, jakie są sposoby obliczania największego

Bardziej szczegółowo

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na

Bardziej szczegółowo

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej. Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.

Bardziej szczegółowo

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery http://xqtav.sourceforge.net XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery dr hab. Jerzy Tyszkiewicz dr Andrzej Kierzek mgr Jacek Sroka Grzegorz Kaczor praca mgr pod

Bardziej szczegółowo

5.5. Wybieranie informacji z bazy

5.5. Wybieranie informacji z bazy 5.5. Wybieranie informacji z bazy Baza danych to ogromny zbiór informacji, szczególnie jeśli jest odpowiedzialna za przechowywanie danych ogromnych firm lub korporacji. Posiadając tysiące rekordów trudno

Bardziej szczegółowo

Słowa kluczowe Sterowanie klawiaturą, klawiatura, klawisze funkcyjne, przesuwanie obiektów ekranowych, wydawanie poleceń za pomocą klawiatury

Słowa kluczowe Sterowanie klawiaturą, klawiatura, klawisze funkcyjne, przesuwanie obiektów ekranowych, wydawanie poleceń za pomocą klawiatury Obsługa za pomocą klawiatury Różnego typu interfejsy wykorzystują różne metody reagowania i wydawania poleceń przez użytkownika. W środowisku graficznym najpopularniejsza jest niewątpliwie mysz i inne

Bardziej szczegółowo

VinCent Administrator

VinCent Administrator VinCent Administrator Moduł Zarządzania podatnikami Krótka instrukcja obsługi ver. 1.01 Zielona Góra, grudzień 2005 1. Przeznaczenie programu Program VinCent Administrator przeznaczony jest dla administratorów

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.

Bardziej szczegółowo

1. Operacje logiczne A B A OR B

1. Operacje logiczne A B A OR B 1. Operacje logiczne OR Operacje logiczne są operacjami działającymi na poszczególnych bitach, dzięki czemu można je całkowicie opisać przedstawiając jak oddziałują ze sobą dwa bity. Takie operacje logiczne

Bardziej szczegółowo

6.4. Efekty specjalne

6.4. Efekty specjalne 6.4. Efekty specjalne Ile wart byłby porządny film bez efektów specjalnych. Przecież to właśnie one nadają charakter dla filmu i przykuwają uwagę widza. Dlaczego nie wykorzystać by tego w prezentacjach?

Bardziej szczegółowo

I. Program II. Opis głównych funkcji programu... 19

I. Program II. Opis głównych funkcji programu... 19 07-12-18 Spis treści I. Program... 1 1 Panel główny... 1 2 Edycja szablonu filtrów... 3 A) Zakładka Ogólne... 4 B) Zakładka Grupy filtrów... 5 C) Zakładka Kolumny... 17 D) Zakładka Sortowanie... 18 II.

Bardziej szczegółowo

4. Rozliczenia [ Rozliczenia ] 1

4. Rozliczenia [ Rozliczenia ] 1 4. Rozliczenia [ Rozliczenia ] 1 4. Rozliczenia Moduł Rozliczenia umożliwia: - przeglądanie listy dokumentów w wybranym rejestrze VAT - automatyczne tworzenie i zapisywanie deklaracji VAT - definiowanie

Bardziej szczegółowo

Szybka instrukcja tworzenia testów dla E-SPRAWDZIAN-2 programem e_kreator_2

Szybka instrukcja tworzenia testów dla E-SPRAWDZIAN-2 programem e_kreator_2 Szybka instrukcja tworzenia testów dla E-SPRAWDZIAN-2 programem e_kreator_2 Spis treści: 1. Tworzenie nowego testu. str 2...5 2. Odczyt raportów z wynikami. str 6...7 3. Edycja i modyfikacja testów zapisanych

Bardziej szczegółowo

Test Umiejętności Muzycznych

Test Umiejętności Muzycznych Maria Juchniewicz rkusz odpowiedzi 2011 Wyniki I II III IV V W.S. Ocena Imię i Nazwisko... Wiek... Szkoła: OSM I st. / PSM I st. ykl: 6-letni / 4-letni Instrument główny... Miejscowość... ata... Instrukcja

Bardziej szczegółowo

FlowSoft02. Przeznaczenie programu

FlowSoft02. Przeznaczenie programu FlowSoft02 Przeznaczenie programu FlowSoft02 jest programem przeznaczonym do obsługi systemu zdalnych odczytów w systemach opartych o magistralę MBUS. Program jest przygotowany dla systemu Windows. Wymagania

Bardziej szczegółowo

Podstawy WINDOWS 9x, 2000, XP

Podstawy WINDOWS 9x, 2000, XP - 1 - Podstawy Windows & Zarządzanie zasobami komputera opr.m r Osa Podstawy WINDOWS 9x, 2000, XP 1. System Windows składa się z następujących podstawowych elementów: ikona pulpit okno pasek zadań folder

Bardziej szczegółowo

Currenda EPO Instrukcja Konfiguracji. Wersja dokumentu: 1.3

Currenda EPO Instrukcja Konfiguracji. Wersja dokumentu: 1.3 Currenda EPO Instrukcja Konfiguracji Wersja dokumentu: 1.3 Currenda EPO Instrukcja Konfiguracji - wersja dokumentu 1.3-19.08.2014 Spis treści 1 Wstęp... 4 1.1 Cel dokumentu... 4 1.2 Powiązane dokumenty...

Bardziej szczegółowo

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE WINDOWS 1 SO i SK/WIN 006 Wydajność systemu 2 SO i SK/WIN Najprostszym sposobem na poprawienie wydajności systemu, jeżeli dysponujemy zbyt małą ilością pamięci RAM

Bardziej szczegółowo

Wykaz stali z projektu.

Wykaz stali z projektu. Wykaz stali z projektu. Program służy do wykonywania wykazu stali z wielu rysunków. Może być również wykorzystywany do sprawdzania poprawności opisu stali na wykonywanym rysunku. Aby korzystać z programu

Bardziej szczegółowo

5.2. Pierwsze kroki z bazami danych

5.2. Pierwsze kroki z bazami danych 5.2. Pierwsze kroki z bazami danych Uruchamianie programu Podobnie jak inne programy, OO Base uruchamiamy z Menu Start, poprzez zakładkę Wszystkie programy, gdzie znajduje się folder OpenOffice.org 2.2,

Bardziej szczegółowo

dokumentacja Edytor Bazy Zmiennych Edytor Bazy Zmiennych Podręcznik użytkownika

dokumentacja Edytor Bazy Zmiennych Edytor Bazy Zmiennych Podręcznik użytkownika asix 4 Edytor Bazy Zmiennych Podręcznik użytkownika asix 4 dokumentacja Edytor Bazy Zmiennych ASKOM i asix to zastrzeżone znaki firmy ASKOM Sp. z o. o., Gliwice. Inne występujące w tekście znaki firmowe

Bardziej szczegółowo

Metoda Karnaugh. B A BC A

Metoda Karnaugh. B A BC A Metoda Karnaugh. Powszechnie uważa się, iż układ o mniejszej liczbie elementów jest tańszy i bardziej niezawodny, a spośród dwóch układów o takiej samej liczbie elementów logicznych lepszy jest ten, który

Bardziej szczegółowo

Nowy interfejs w wersji 11.0 C8 BETA

Nowy interfejs w wersji 11.0 C8 BETA Nowy interfejs w wersji 11.0 C8 BETA Copyright 2012 COMARCH Wszelkie prawa zastrzeżone Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione.

Bardziej szczegółowo

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego Arytmetyka cyfrowa Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego (binarnego). Zapis binarny - to system liczenia

Bardziej szczegółowo

INSTRUKCJA UŻYTKOWNIKA. Spis treści. I. Wprowadzenie... 2. II. Tworzenie nowej karty pracy... 3. a. Obiekty... 4. b. Nauka pisania...

INSTRUKCJA UŻYTKOWNIKA. Spis treści. I. Wprowadzenie... 2. II. Tworzenie nowej karty pracy... 3. a. Obiekty... 4. b. Nauka pisania... INSTRUKCJA UŻYTKOWNIKA Spis treści I. Wprowadzenie... 2 II. Tworzenie nowej karty pracy... 3 a. Obiekty... 4 b. Nauka pisania... 5 c. Piktogramy komunikacyjne... 5 d. Warstwy... 5 e. Zapis... 6 III. Galeria...

Bardziej szczegółowo

Formularz oceny okresowej arkusz B w służbie cywilnej Instrukcja użytkownika

Formularz oceny okresowej arkusz B w służbie cywilnej Instrukcja użytkownika Narzędzie informatyczne wspomagające dokonywanie ocen okresowych w służbie cywilnej przygotowane w ramach projektu pn. Strategia zarządzania zasobami ludzkimi w służbie cywilnej współfinansowanego przez

Bardziej szczegółowo

Typy, klasy typów, składnie w funkcji

Typy, klasy typów, składnie w funkcji Typy, klasy typów, składnie w funkcji Typy w Haskell Każde wyrażenie w Haskell posiada zdefiniowany typ. Dzięki temu już na etapie kompilacji kodu następuje sprawdzenie poprawności kodu i zabezpiecza nas

Bardziej szczegółowo

Po naciśnięciu przycisku Dalej pojawi się okienko jak poniżej,

Po naciśnięciu przycisku Dalej pojawi się okienko jak poniżej, Tworzenie wykresu do danych z tabeli zawierającej analizę rozwoju wyników sportowych w pływaniu stylem dowolnym na dystansie 100 m, zarejestrowanych podczas Igrzysk Olimpijskich na przestrzeni lat 1896-2012.

Bardziej szczegółowo

Pomorski Czarodziej 2016 Zadania. Kategoria C

Pomorski Czarodziej 2016 Zadania. Kategoria C Pomorski Czarodziej 2016 Zadania. Kategoria C Poniżej znajduje się 5 zadań. Za poprawne rozwiązanie każdego z nich możesz otrzymać 10 punktów. Jeżeli otrzymasz za zadanie maksymalną liczbę punktów, możesz

Bardziej szczegółowo

Ćwiczenie numer 4 JESS PRZYKŁADOWY SYSTEM EKSPERTOWY.

Ćwiczenie numer 4 JESS PRZYKŁADOWY SYSTEM EKSPERTOWY. Ćwiczenie numer 4 JESS PRZYKŁADOWY SYSTEM EKSPERTOWY. 1. Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z przykładowym systemem ekspertowym napisanym w JESS. Studenci poznają strukturę systemu ekspertowego,

Bardziej szczegółowo

Forte Zarządzanie Produkcją Instalacja i konfiguracja. Wersja B

Forte Zarządzanie Produkcją Instalacja i konfiguracja. Wersja B Forte Zarządzanie Produkcją Instalacja i konfiguracja Wersja 2013.1.B Forte Zarządzanie Produkcją - Instalacja i konfiguracja Strona 2 z 13 SPIS TREŚCI 1 Instalacja i konfiguracja Forte Zarządzanie Produkcją...

Bardziej szczegółowo

EXCEL Prowadzący: dr hab. inż. Marek Jaszczur Poziom: początkujący

EXCEL Prowadzący: dr hab. inż. Marek Jaszczur Poziom: początkujący EXCEL Prowadzący: dr hab. inż. Marek Jaszczur Poziom: początkujący Laboratorium 3: Macierze i wykresy Cel: wykonywanie obliczeń na wektorach i macierzach, wykonywanie wykresów Czas wprowadzenia 25 minut,

Bardziej szczegółowo

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1 Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem

Bardziej szczegółowo

0 + 0 = 0, = 1, = 1, = 0.

0 + 0 = 0, = 1, = 1, = 0. 5 Kody liniowe Jak już wiemy, w celu przesłania zakodowanego tekstu dzielimy go na bloki i do każdego z bloków dodajemy tak zwane bity sprawdzające. Bity te są w ścisłej zależności z bitami informacyjnymi,

Bardziej szczegółowo

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem. WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM NetBeans Wykonał: Jacek Ventzke informatyka sem. VI 1. Uruchamiamy program NetBeans (tu wersja 6.8 ) 2. Tworzymy

Bardziej szczegółowo

5.3. Tabele. Tworzenie tabeli. Tworzenie tabeli z widoku projektu. Rozdział III Tworzenie i modyfikacja tabel

5.3. Tabele. Tworzenie tabeli. Tworzenie tabeli z widoku projektu. Rozdział III Tworzenie i modyfikacja tabel 5.3. Tabele Tabela jest podstawowym elementem bazy danych. To właśnie w tabelach gromadzone są w bazie rekordy danych. Projektując tabelę, definiujemy, jakie pola będzie zawierał pojedynczy rekord informacji.

Bardziej szczegółowo

Dokumentacja Systemu INSEMIK II Podręcznik użytkownika część V Badania buhaja INSEMIK II. Podręcznik użytkownika Moduł: Badania buhaja

Dokumentacja Systemu INSEMIK II Podręcznik użytkownika część V Badania buhaja INSEMIK II. Podręcznik użytkownika Moduł: Badania buhaja INSEMIK II Podręcznik użytkownika Moduł: Badania buhaja ZETO OLSZTYN Sp. z o.o. czerwiec 2009 1 1. Badania buhaja... 3 1.1. Filtr... 3 1.2. Szukaj... 6 1.3. Wydruk... 6 1.4. Karta buhaja... 8 2. Badania...

Bardziej szczegółowo

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32 Analiza i projektowanie oprogramowania Analiza i projektowanie oprogramowania 1/32 Analiza i projektowanie oprogramowania 2/32 Cel analizy Celem fazy określania wymagań jest udzielenie odpowiedzi na pytanie:

Bardziej szczegółowo

Programowanie w języku C++ Grażyna Koba

Programowanie w języku C++ Grażyna Koba Programowanie w języku C++ Grażyna Koba Kilka definicji: Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i zasad

Bardziej szczegółowo

Konfiguracja oprogramowania w systemach MS Windows dla kont z ograniczonymi uprawnieniami

Konfiguracja oprogramowania w systemach MS Windows dla kont z ograniczonymi uprawnieniami Konfiguracja oprogramowania w systemach MS Windows dla kont z ograniczonymi uprawnieniami Dotyczy programów opartych na bazie BDE: Menedżer Pojazdów PL+ Ewidencja Wyposażenia PL+ Spis treści: 1. Wstęp...

Bardziej szczegółowo

UMOWY INSTRUKCJA STANOWISKOWA

UMOWY INSTRUKCJA STANOWISKOWA UMOWY INSTRUKCJA STANOWISKOWA Klawisze skrótów: F7 wywołanie zapytania (% - zastępuje wiele znaków _ - zastępuje jeden znak F8 wyszukanie według podanych kryteriów (system rozróżnia małe i wielkie litery)

Bardziej szczegółowo

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl Komputerowe Systemy Przemysłowe: Modelowanie - UML Arkadiusz Banasik arkadiusz.banasik@polsl.pl Plan prezentacji Wprowadzenie UML Diagram przypadków użycia Diagram klas Podsumowanie Wprowadzenie Języki

Bardziej szczegółowo

Podstawy Programowania 2

Podstawy Programowania 2 Podstawy Programowania 2 Laboratorium 7 Instrukcja 6 Object Pascal Opracował: mgr inż. Leszek Ciopiński Wstęp: Programowanie obiektowe a programowanie strukturalne. W programowaniu strukturalnym, któremu

Bardziej szczegółowo

Skanowanie OCR w aplikacji Kancelaria Komornika. Instrukcja dla użytkownika

Skanowanie OCR w aplikacji Kancelaria Komornika. Instrukcja dla użytkownika Skanowanie OCR w aplikacji Kancelaria Komornika Instrukcja dla użytkownika Spis treści 1. Zakładka Wyrażenia... 3 2. Zakładka Grupy wyrażeń... 5 3. Opcje Skanowania / OCR... 7 4. Rozpoznawanie Danych...

Bardziej szczegółowo

Opis metody pracy Komisji podczas Kwalifikacji TestingCup 2017

Opis metody pracy Komisji podczas Kwalifikacji TestingCup 2017 Opis metody pracy Komisji podczas Kwalifikacji TestingCup 2017 -------------------------MANIFEST------------------------- Komisja w ocenie prac kieruje się następującymi przesłankami: - defekty funkcjonalne

Bardziej szczegółowo

Instrukcja obsługi Zaplecza epk w zakresie zarządzania tłumaczeniami opisów procedur, publikacji oraz poradników przedsiębiorcy

Instrukcja obsługi Zaplecza epk w zakresie zarządzania tłumaczeniami opisów procedur, publikacji oraz poradników przedsiębiorcy Instrukcja obsługi Zaplecza epk w zakresie zarządzania tłumaczeniami opisów procedur, publikacji oraz poradników przedsiębiorcy Spis treści: 1 WSTĘP... 3 2 DOSTĘP DO SYSTEMU... 3 3 OPIS OGÓLNY SEKCJI TŁUMACZENIA...

Bardziej szczegółowo

Dodawanie grafiki i obiektów

Dodawanie grafiki i obiektów Dodawanie grafiki i obiektów Word nie jest edytorem obiektów graficznych, ale oferuje kilka opcji, dzięki którym można dokonywać niewielkich zmian w rysunku. W Wordzie możesz zmieniać rozmiar obiektu graficznego,

Bardziej szczegółowo

MS Excel 2007 Kurs zaawansowany Obsługa baz danych. prowadzi: Dr inż. Tomasz Bartuś. Kraków: 2008 04 25

MS Excel 2007 Kurs zaawansowany Obsługa baz danych. prowadzi: Dr inż. Tomasz Bartuś. Kraków: 2008 04 25 MS Excel 2007 Kurs zaawansowany Obsługa baz danych prowadzi: Dr inż. Tomasz Bartuś Kraków: 2008 04 25 Bazy danych Microsoft Excel 2007 udostępnia szereg funkcji i mechanizmów obsługi baz danych (zwanych

Bardziej szczegółowo

Scenariusz zajęć. Moduł VI. Projekt Gra logiczna zgadywanie liczby

Scenariusz zajęć. Moduł VI. Projekt Gra logiczna zgadywanie liczby Scenariusz zajęć Moduł VI Projekt Gra logiczna zgadywanie liczby Moduł VI Projekt Gra logiczna zgadywanie liczby Cele ogólne: przypomnienie i utrwalenie poznanych wcześniej poleceń i konstrukcji języka

Bardziej szczegółowo

PROLOG INNE PRZYKŁADY MACIEJ KELM

PROLOG INNE PRZYKŁADY MACIEJ KELM PROLOG INNE PRZYKŁADY MACIEJ KELM PREDYKAT RANDOM Funkcja random zwraca losową liczbę całkowitą w przedziale od 1 do X. Gdzie X jest parametrem funkcji random. Przed użyciem random należy zainicjować tak

Bardziej szczegółowo

Pierwszy moduł kursu, zwany także syalbusem, jest miejscem gdzie można

Pierwszy moduł kursu, zwany także syalbusem, jest miejscem gdzie można Umieszczanie dokumentów wewnątrzszkolnych Pierwszy moduł kursu, zwany także syalbusem, jest miejscem gdzie można umieścić dokumenty takie jak zasady oceniania wewnątrzszkolnego (wyciąg ze statutu szkoły)

Bardziej szczegółowo

3. Opracować program kodowania/dekodowania pliku tekstowego. Algorytm kodowania:

3. Opracować program kodowania/dekodowania pliku tekstowego. Algorytm kodowania: Zadania-7 1. Opracować program prowadzący spis pracowników firmy (max.. 50 pracowników). Każdy pracownik opisany jest za pomocą struktury zawierającej nazwisko i pensję. Program realizuje następujące polecenia:

Bardziej szczegółowo

Zastanawiałeś się może, dlaczego Twój współpracownik,

Zastanawiałeś się może, dlaczego Twój współpracownik, Kurs Makra dla początkujących Wiadomości wstępne VBI/01 Piotr Dynia, specjalista ds. MS Office Czas, który poświęcisz na naukę tego zagadnienia, to 15 20 minut. Zastanawiałeś się może, dlaczego Twój współpracownik,

Bardziej szczegółowo

Dokument Detaliczny Projektu

Dokument Detaliczny Projektu Dokument Detaliczny Projektu Dla Biblioteki miejskiej Wersja 1.0 Streszczenie Niniejszy dokument detaliczny projektu(ddp) przedstawia szczegóły pracy zespołu projektowego, nad stworzeniem aplikacji bazodanowej

Bardziej szczegółowo

Laboratorium 9 (Więcej Aktywności, w Androidzie)

Laboratorium 9 (Więcej Aktywności, w Androidzie) Dr Mirosław Łątka Informatyka dla medycyny Jesień 2012 Laboratorium 9 (Więcej Aktywności, w Androidzie) Aplikacje systemu Android składają się z luźnego zbioru aktywności (ang. activities), z których każda

Bardziej szczegółowo

LABORATORIUM 6: ARKUSZ MS EXCEL JAKO BAZA DANYCH

LABORATORIUM 6: ARKUSZ MS EXCEL JAKO BAZA DANYCH UNIWERSYTET ZIELONOGÓRSKI INSTYTUT INFORMATYKI I ELEKTROTECHNIKI ZAKŁAD INŻYNIERII KOMPUTEROWEJ Przygotował: dr inż. Janusz Jabłoński LABORATORIUM 6: ARKUSZ MS EXCEL JAKO BAZA DANYCH Jeżeli nie jest potrzebna

Bardziej szczegółowo

Programowanie w języku Python. Grażyna Koba

Programowanie w języku Python. Grażyna Koba Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i

Bardziej szczegółowo

5. Administracja kontami uŝytkowników

5. Administracja kontami uŝytkowników 5. Administracja kontami uŝytkowników Windows XP, w porównaniu do systemów Windows 9x, znacznie poprawia bezpieczeństwo oraz zwiększa moŝliwości konfiguracji uprawnień poszczególnych uŝytkowników. Natomiast

Bardziej szczegółowo

Kilka prostych programów

Kilka prostych programów Ćwiczenie 1 Kilka prostych programów Ćwiczenie to poświęcone jest tworzeniu krótkich programów, pozwalających na zapoznanie się z takimi elementami programowania jak: definiowanie stałych, deklarowanie

Bardziej szczegółowo

Instrukcja obsługi programu Do-Exp

Instrukcja obsługi programu Do-Exp Instrukcja obsługi programu Do-Exp Autor: Wojciech Stark. Program został utworzony w ramach pracy dyplomowej na Wydziale Chemicznym Politechniki Warszawskiej. Instrukcja dotyczy programu Do-Exp w wersji

Bardziej szczegółowo

Lekcja : Tablice + pętle

Lekcja : Tablice + pętle Lekcja : Tablice + pętle Wprowadzenie Oczywiście wiesz już jak dużo można osiągnąć za pomocą tablic oraz jak dużo można osiągnąć za pomocą pętli, jednak tak naprawdę prawdziwe możliwości daje połączenie

Bardziej szczegółowo

2.2 Opis części programowej

2.2 Opis części programowej 2.2 Opis części programowej Rysunek 1: Panel frontowy aplikacji. System pomiarowy został w całości zintegrowany w środowisku LabVIEW. Aplikacja uruchamiana na komputerze zarządza przebiegiem pomiarów poprzez

Bardziej szczegółowo

Uzupełnij pola tabeli zgodnie z przykładem poniżej,

Uzupełnij pola tabeli zgodnie z przykładem poniżej, 1. Wykonaj bazę danych biblioteki szkolnej, Otwórz MS Access a następnie z menu plik wybierz przycisk nowy, w oknie nowy plik wybieramy pusta baza danych nadaj jej nazwę Biblioteka i wybierz miejsce w

Bardziej szczegółowo

Pracownia internetowa w każdej szkole (edycja Jesień 2007)

Pracownia internetowa w każdej szkole (edycja Jesień 2007) Instrukcja numer D1/05_03/Z Pracownia internetowa w każdej szkole (edycja Jesień 2007) Opiekun pracowni internetowej cz. 1 Ręczne zakładanie kont użytkowników (D1) Jak ręcznie założyć konto w systemie

Bardziej szczegółowo

PTI S1 Tabele. Tabele. Tabele

PTI S1 Tabele. Tabele. Tabele Tabele Tabele 43 1.3. Tabele Jako że bazy danych składają się z tabel, musimy nauczyć się jak je zaprojektować, a następnie stworzyć i zarządzać nimi w programie Microsoft Access 2013. Zajmiemy się również

Bardziej szczegółowo

REFERAT PRACY DYPLOMOWEJ Temat pracy: SUDOKU - Algorytmy tworzenia i rozwiązywania

REFERAT PRACY DYPLOMOWEJ Temat pracy: SUDOKU - Algorytmy tworzenia i rozwiązywania REFERAT PRACY DYPLOMOWEJ Temat pracy: SUDOKU - Algorytmy tworzenia i rozwiązywania Autor: Anna Nowak Promotor: dr inż. Jan Kowalski Kategorie: gra logiczna Słowa kluczowe: Sudoku, generowanie plansz, algorytmy,

Bardziej szczegółowo

Backend Administratora

Backend Administratora Backend Administratora mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 W tym celu korzystając z konsoli wydajemy polecenie: symfony generate:app backend Wówczas zostanie stworzona

Bardziej szczegółowo

Od programowania wizualnego do tekstowego

Od programowania wizualnego do tekstowego Od programowania wizualnego do tekstowego Krzysztof Chechłacz Nowa podstawa programowa z informatyki w świetle reformy oświaty - Konferencja w ramach XII edycji Akademii Technologii Informacyjnej i Komunikacyjnej

Bardziej szczegółowo