Top Banner
Universitatea “Ovidius” Constanta Facultatea de Matematica si Informatica Codul Morse -.-. --- -.. ..- .-.. -- --- .-. ... . Proiect realizat de: Stefan Raluca ( .-. .- .-.. ..- -.-. .- / ... - . ..-. .- -. ) Simion Alina ( ... .. -- .. --- -. / .- .-.. .. -. .- ) Popa Iuliana ( .--. --- .--. .- / .. ..- .-.. .. .- -. .- )
43

Morse Code

Jul 31, 2015

Download

Documents

Ralucutza

Informatics project about the Morse Code.
History + How it's used and where.
Coding: Java & C++
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Morse Code

Universitatea “Ovidius” Constanta Facultatea de Matematica si Informatica

Codul Morse

-.-. --- -.. ..- .-.. -- --- .-. ... .

Proiect realizat de: Stefan Raluca ( .-. .- .-.. ..- -.-. .- / ... - . ..-. .- -. ) Simion Alina ( ... .. -- .. --- -. / .- .-.. .. -. .- ) Popa Iuliana ( .--. --- .--. .- / .. ..- .-.. .. .- -. .- )

Page 2: Morse Code

2

Cuprins

v Introducere…………………………………..…3 v Istoricul codului Morse…………………….….6 v Invatarea alfabetului Morse…………………….10

§ Litere, cifre, semne de punctuaţie..................11

v Alfabetul Morse international…………………..13 § Aviatia...........................................................16 § Alte ultilizi.......... ..........................................17 § Reprezentarea SOS a codului Morse ……....17

v Muzica si Codul Morse.......................................18 v Implementare Morse in Java..............................26 v Implementare Morse in C...................................40

Page 3: Morse Code

3

Introducere

Codul Morse este o metodă de transmitere a informaţiilor telegrafice,utilizand o secvenţă standardizata de elemente scurte şi lungi pentru a reprezenta litere, cifre, semne de punctuaţie şi caractere speciale ale unui mesaj. Elementele scurte şi lungi pot fi formate din sunete, simboluri sau impulsuri pornit / oprit şi sunt cunoscute ca "puncte" şi "liniuţe" .Codul Morse pot fi transmis într-un număr de moduri, cum ar fi: impulsurile electrice de-a lungul unui fir,un ton audio, un semnal radio audio cu un ton lung sau scurt, un semnal mecanic, un semnal vizual (de exemplu, o lumină intermitentă), folosind dispozitive cum ar fi o lampă Addis.

Utilizarile cele mai populare actuale ale codului Morse este ale operatorilor de radio amatori dar nu mai este o cerinţă pentru acordarea licenţelor de amatori, cu toate acestea, este în continuu uz în scop de specialitate. Cu toate acestea aceste coduri au fost proiectate folosind notaţii matematice cunoscute ca permutatieii (o permutatie este definita ca o ordonare a unui anumit număr de elemente ale unui set dat).

Creat original pentru telegraful electric Samuel FB Morse în anii 1840, codul Morse a fost, de asemenea, utilizat pe scară largă la inceputurile comunicarii radio , in secolul XX majoritatea comunicarii internationale de viteză a fost realizata

Page 4: Morse Code

4

în codul Morse, utilizând linii de telegraf, cabluri de sub mare şi circuite radio.

Codul Morse de radio este încă utilizat în scopuri de specialitate, inclusiv semnalul radio de navigaţie şi emiţătoarele mobile terestre, plus unele comunicatii militare precum luminatul intermitent între nave pentru operaţiunile tactice ce omite emisia undelor electromagnetice, care este detectabiala de către inamic.

Fiecare caracter (litera sau cifră) este reprezentat de o secventa unica de puncte şi linii. Durata unei cratime este de trei ori durata unui punct. Fiecare punct sau o linie este urmat de o tăcere scurtă, egală cu durata punctului. Durata “dot” este unitatea de bază de măsurare a timpului de transmisie în cod. Viteza codului Morse este măsurată în cuvinte pe minut (WPM).Caracterele au diferite lungimi deoarece contin numere diferite de puncte şi linii. În consecinţă cuvinte au, de asemenea, diferite lungimi, în ceea ce priveşte durata de dot, chiar şi atunci când acestea conţin acelaşi număr de caractere. Din acest motiv organizatiile de acordare a licentelor , cum ar fi Federal Communications Commission (FCC) din Statele Unite, aleg un cuvânt standard, pentru a măsura viteza de transmitere a operatorului. "Paris" si "Codex" sunt două astfel de cuvinte standard. O trăsătură importantă a codului Morse este decodare eficienta. Durata fiecarui caracter în Morse este aproximativ invers proporţională cu frecvenţa de apariţie în limba engleză. Astfel, litera cea mai frecventa în limba engleză, litera "E", are cel mai scurt cod, un punct unic.

Page 5: Morse Code

5

Un cod inrudit ,dar diferit a fost iniţial creat pentru telegraful electric al lui Samuel FB Morse de către Alfred Vail la începutul anilor 1840. Acest cod a fost predecesorul pe care codul Morse modern si international se bazează. În 1890 a început să fie folosit pe scară largă pentru comunicaţie radio iar înainte de începutul anului a facut posibila transmiterea vocii. La sfârşitul secolului al XIX-lea si inceputul secXX ,codul Morse a fost utilizat pe liniile de telegraf, cabluri submarine şi circuitele de radio. Codul Morse este cel mai popular în rândul operatorilor radio amatori, deşi nu mai este necesară pentru licenţiere în majoritatea ţărilor, inclusiv în SUA. Piloţii şi controlorii de trafic aerian, de obicei, sunt familiarizaţi cu codul Morse şi necesită o înţelegere de bază. Un avantaj al codului Morse pentru transmiterea prin unde radio este faptul că este capabil să fi primit in condiţiile de semnal slab care ar face imposibilă comunicarea prin voce,pentru că poate fi citit de oameni fără dispozitiv de decodare, Morse este uneori o alternativă utilă la discursul sintetizat pentru trimiterea de date automate digitale de către ascultători calificat pe canale de voce. Multe receptoare radio de amatori, de exemplu, se identifica cu codul Morse, chiar dacă acestea sunt utilizate pentru comunicaţii de voce. Pentru semnalele de urgenţă, codul Morse poate fi trimis prin intermediul unor surse improvizate. Codul Morse poate fi considerat o formă timpurie de transmitere digitală a informatiei; totusi, este dificil de adaptat la transmiterea automată din cauza lungimii variabile a caracterelor sale. Ca atare, a fost înlocuit cu alte coduri de

Page 6: Morse Code

6

transmitere, incluzând codul Baudot si ASCII, care au lungimi standard pentru fiecare caracter distinct al mesajului.

Page 7: Morse Code

7

Page 8: Morse Code

8

Istoricul Codului Morse

În 1836, artistul american Samuel FB Morse, fizicianul american Joseph Henry, şi Alfred Vail au dezvoltat un sistem de telegraf electric. Acest sistem trimitea impulsuri de curent electric de-a lungul firelor ce controlau un electromagnet care a fost situat la capătul receptor al sistemului de telegraf. În 1837, William Cooke si Charles Wheatstone în Anglia, au inceput sa foloseasca un telegraf electric, care, de asemenea, utiliza electromagneti în receptare Cu toate acestea, in contrast cu orice sistem de a face sunete de click-uri sistemul folosea ace ce se roteau deasupra diagramelor asezate in ordine afabetica pentru a indica faptul că literele au fost trimise.

Samuel Morse

Page 9: Morse Code

9

In 1841, Cooke şi Wheatstone au construit un telegraf care a tipărit liter de la o roata de fonturi lovit de un ciocan. Aceasta masina, bazata pe telegraful lor din 1840, a lucrat bine, cu toate acestea, nu au reuşit să găsească clienţi pentru acest sistem şi doar două exemple au fost construite vreodata . Pe de altă parte, "sistemul de telegrafie” al celor trei americani, care a fost folosit prima dată în aproximativ 1844, a fost conceput pentru a face crestături pe o bandă de hârtie atunci când curentul electric era primit. Receptorul original de telegraf al lui Morse a folosit un ceas mecanic pentru a muta o bandă de hârtie. Atunci când un curent electric a fost primit, un electromagnet angajat intr-o armătură împingea un “stylus” pe o bandă de hârtie în mişcare, ceea ce face o scobitură pe bandă. Atunci când curentul a fost intrerupt, electromagnetul retragea “stylus-ul”, şi porţiunea de bandă în mişcare rămane nemarcata. Codul Morse a fost dezvoltat astfel încât operatorii ar putea traduce crestături marcate pe bandă de hârtie în mesaje text. În codul de mai devreme , Morse a planificat a transmite doar cifre, şi de a folosi un dicţionar pentru a căuta fiecare cuvânt în funcţie de numărul care au fost trimise. Cu toate acestea, codul a fost extins în curând de către Alfred Vail astfel incat sa includa litere şi caractere speciale, pentru a putea fi folosit mai mult, în general.Vail a determinat frecvenţa de utilizare a literelor în limba engleză numarand tipurile mobile găsite în articolele unui ziar local din Morristown. Astfel mărcile mai scurtă au fost numite "puncte", iar cele mai lungi "linii" si literele cel mai frecvent utilizate au fost atribuite celor mai scurte secvente de puncte si linii.

Page 10: Morse Code

10

În versiunea originală a telegrafului lui Morse, armatura receptorului făcea un zgomot de clic atunci cand era mutat în şi în afara poziţiei pentru a marca bandei de hârtie. Operatorii de telegraf au aflat în curând că acestea ar putea traduce clicurile direct în puncte si ca ar putea sa le scrie de mana, făcând astfel inutilă utilizarea unei benzi de hartie. Atunci când codul Morse a fost adaptat la comunicaţia radio, punctele şi linile au fost trimise ca impulsuri scurte şi lungi. Mai târziu s-a constatat că oamenii au devenit mai buni la primirea codului Morse atunci când este predată ca o limbă care se aude, în loc de una citita dintr-o pagină. Pentru a reflecta sunetele receptoarelor codului Morse, operatorii au început să vocalizeze un punct ca fiind"dit", şi o linie ca "dah".

În domeniul aviaţiei, codul Morse a început să fie utilizat în mod regulat în anii 1920. Deşi emiţătoarele anterioare au fost voluminoase şi scanteie de transmisie a fost dificil de utilizat, au existat unele încercări anterioare. In 1910 Marina SUA a experimentat trimitand codul Morse dintr-un avion. În acelaşi an, un radio pe America Airship a avut un rol esenţial în coordonarea eforturilor de salvare a echipajului sau .

La inceputul anilor 1930, atât piloţilor civili cat şi militari li s-a cerut sa stie sa foloseasca alfabetul Morse, atât pentru utilizarea ca sistem de comunicaţie, precum şi identificarea timpurie a balizelor de navigatie. Radiotelegra folosind codul Morse a fost vitala in timpul celui de’al doilea razboi mondial, în special în transportarea

Page 11: Morse Code

11

mesajelor între navele de război şi baze navale ale Marinei Regale, Kriegsmarine, Imperial Marineijaponeze, Royal Navy canadian, Royal Navy australian, US Navy,şi SUA Paza de Coasta. Raza lungă de comunicatie a navelor intre ele a fost datorata radiotelegrafiei, prin intermediul unor mesaje criptate, deoarece sisteme de voce de radio de pe navele de atunci au fost destul de limitat în ambele acele zone, si era importanta si securitatea .Radio telegrafia a fost, de asemenea, utilizate pe scară largă de către avioanele de război, în special de către avioane de patrulare cu rază lungă, care au fost trimise de catre aceste Marine in recunoasterea navelor de război ale inamicului, a navelor de marfa si a navelor care transportau trupe.

În plus, armatele se deplasau rapid pe teren nu ar fi putut lupta în mod eficient fără radiotelegrafie, pentru că se miscau mai rapid decât telegraful şi liniile telefonice . Acest lucru a fost observat mai ales în ofensivele blitzkrieg a Germaniei naziste în Polonia, Belgia, Franţa (în 1940), Uniunea Sovietică, şi în Africa de Nord; in ofensivele armatei britanice în Africa de Nord, Italia, Ţările de Jos, precum şi de către Armata SUA în Franta si Belgia (în 1944), si în sudul Germaniei în 1945. Codul Morse a fost folosit ca un standard international de comunicare maritim până în 1999, când a fost înlocuit de către Sistemul Global pentru Siguranţa Maritimă . Atunci cand Marina Franceza a încetat sa foloseasca codul Morse la 31 ianuarie 1997, mesajul final transmis a fost „Acesta este ultimul nostru strigăt înainte de tăcerea veşnică”. Paza de Coastă a Statelor Unite ale Americii a încetat toate utilizarile codului Morse la radio si nu mai monitorizează

Page 12: Morse Code

12

nicio frecvenţa radio pentru transmisii de codul Morse inclusiv frecventa internaţionala CW medie (MF) frecvenţa de 500 kHz .

Învăţarea alfabetului Morse

Oamenii ce au incercat sa invete codul Morse utilizând metoda Farnsworth, numit pentru Donald R. "Russ" Farnsworth, de asemenea, cunoscut sub indicativul de apel, W6TTB, sunt învăţaţi să trimită şi să primească litere şi alte simboluri la viteza lor maxima, care este relativ normală cu timpul trimiterii de puncte, liniuţele şi spaţii din fiecare simbol pentru acea viteză. Cu toate acestea, spaţiile iniţial exagerate între simboluri şi cuvinte sunt folosite, pentru a da "timp de gândire" pentru a face "forma" sunetului de litere şi simboluri mai uşor de învăţat. Distanţa poate fi redusă apoi cu practica şi familiaritate. O altă metodă de predare populara este metoda Koch, denumit dupa psihologul german Ludwig Koch, care utilizează viteza ţintă pe deplin încă de la început, dar începe cu doar două caractere. Odată ce sirurile de caractere care le conţin pe aceste două pot fi copiate cu precizie de 90%, un caracter suplimentar se adaugă, şi aşa mai departe până când setul de caractere complet este stăpânit. În America de Nord, mii de persoane au crescut viteza lor de recunoaştere a codului (după memorarea iniţială de caractere) prin ascultarea transmisiilor regulate de cod difuzate de W1AW, statia de radio americana de releu. În Regatul Unit, mulţi oameni au învăţat codul Morse printr-o serie de cuvinte sau fraze care au acelaşi ritm ca un caracter Morse. De exemplu, "Q" in Morse este - dah - di - dah, care poate fi memorat prin fraza "God Save the Queen", iar

Page 13: Morse Code

13

Morse pentru "F" este di - di - dah - DIT, care poate fi memorat ca "Did she like it."

Un bine-cunoscut ritm al codului Morse din perioada celui de al doilea război mondial provine din Simfonia a cincea de Beethoven, fraza de deschidere a acesteia a fost în mod regulat cea care a fost difuzata la începutul emisiunilor BBC. Momentul de note ce corespundea in codul Morse pentru "V", di - di - di - dah şi a avut intelesul de "V pentru victorie". Litere, cifre, semne de punctuaţie

Nu există nici o reprezentare standard pentru semnul de exclamare, deşi diagrama KW (- · - · - -) a fost propusă în 1980 de către Compania Heathkit (un furnizor de kituri de asamblare pentru echipamente radio amatori). În timp ce traducerea folosind software-ul al codului Morse preferă această versiune, utilizarea in direct nu este încă universala, unii operatori amatori radio din Canada şi Statele Unite ale Americii continuă să prefere diagrame mai mari MN (- - - ·) reportate din Codul de americani telegrafie fixa.

Semnele &, $ si_ nu sunt definite în interiorul recomandarii

UIT privind codul Morse. Codul semnului $ a fost reprezentat în Codul Phillips , o imensa colectie de abrevieri utilizate în telegrafie prin fir de teren, ca SX. Reprezentarea semnului de mai sus este, de asemenea, „aşteptaţi” pentru semnalele de procedura din codul Morse.

La data de 24 mai 2004, la aniversarea a 160 de cand primul telegraf Morse transmitea in direct-Biroul Radiocomunicaţilo al Uniunii Internaţionale a

Page 14: Morse Code

14

Telecomunicaţiilor ( ITU-R), a adăugat în mod oficial caracterul @ la caracterele oficiale Morse , utilizând secvenţa notată cu diagrama AC (· - - · - ·). Această secvenţă a fost aleasa pentru a reprezenta "A [T] C [OMMERCIAL]" sau un caracter de "a" într-un vârtej reprezentat printr-un "C". Noul caracter facilitează trimiterea adreselor de poştă electronic in codul Morse şi este notabil deoarece este prima imbunatatire oficiala la setul de caractere Morse de la Primul Razboi Mondial.

Semnale de procedura ale codului Morse Caracter Cod Caracter Cod Caracter Cod

Asteapta ._. . . Eroare . . . . . . . . Inteles . . ._.

Invitatie de a transmite

_._ Terminarea muncii . . ._._ Semnal de

start _._._

Extensii ale limbilor europene in codul Morse Caractere Cod Caracter Cod Caracter Cod

ä(si æ) ._._ è ._.._ ñ(si ń) _ _ . _ _

à (si å) ._ _._ é( si đ, ę)

. ._. . ö( si ø, ó) _ _ _.

ç( si ĉ, ć) _._. . ĝ _ _._. ŝ . . ._.

ch( si š) _ _ _ _ ĥ _._ _.(vechi)

_ _ _ _(nou) þ ._ _. .

ȭ . ._ _. � ._ _ _. ü( si ŭ) . ._ _

Ś . . ._. . . ź _ _. ._. ż _ _. ._

Page 15: Morse Code

15

Extensii ale altor limbi in codul Morse

Pentru chinezi,codul de telegraf chinez este utilizat pentru a mapa caracterele chinezeşti in coduri din patru cifre şi să trimită aceste cifre cu ajutorul standardul codului Morse. Codul Morse coorean foloseşte cartografierea SKATS, iniţial dezvoltat pentru a permite limbii coreeane să fie introdusa pe maşini de scris din Occident. SKATS cartografiaza caracterele alfabetului coreean in litere arbitrare ale alfabetul latin şi nu are nici o relaţie cu pronuntia în coreeană. Alfabetul Morse international

Codul Morse a fost utilizat pentru mai mult de 160 de ani - mai mult decat orice alt sistem electric de codificare. Ceea ce se numeşte codul Morse astăzi este de fapt oarecum diferit de ceea ce a fost iniţial dezvoltat de către Vail, şi Morse. Codul Morse modern International, sau codul continental, a fost creat decătre Friedrich Clemens Gerke în1848 şi iniţial folosit pentru telegrafie între Hamburg şi Cuxhaven în Germania. Gerke a schimbat aproape jumătate din alfabet şi toate cifre care rezulta în mod substanţial formă modernă a codului. După unele modificări minore, alfabetul Morse International a fost standardizat la Congresul International de Telegrafie în anul 1865 la Paris. Codul Morse original, în mare parte limitat la utilizarea în Statele Unite şi Canada, a devenit cunoscut sub numele de cod Morse american sau codul cale ferată. Codul

Page 16: Morse Code

16

Morse american este acum rar utilizat, cu excepţia actelor normative istorice.

Page 17: Morse Code

17

Aviaţie

În aviaţie, pilotii folosesc instrumente de navigatie radio.Pentru a se asigura că staţiile pe care piloţii le folosesc sunt in stare de functionare, toate posturile transmit un set scurt de scrisori de identificare (de obicei, o versiune cu doua-la-cinci litere din numele postului) în codul Morse. Literele de identificare sunt afişate pe cartea de navigaţie aeriană. De exemplu, VOR cu sediul la Aeroportul Manchester în Anglia este abreviat ca "MCT", şi MCT în codul Morse este transmis pe frecvenţa sa radio . În unele ţări, în cazul în care o staţie VOR se defectează se difuzează"TST" (pentru "TEST"), care spune piloţilor şi navigatorilor că staţia nu este de încredere. În Canada, identificarea este înlăturat în totalitate, pentru a simboliza ca statia nu poate fi utilizata. Amatorii de radio

Codul Morse Internaţional de astăzi este cel mai popular în rândul operatorilor radio amatori, în cazul în care acesta este folosit ca model pentru a tasta un emiţător şi de oprire în modul radio de comunicaţii denumit în mod obişnuit ca "undă continuă" sau "CW"pentru ai distinge de la transmisii prin scânteie, nu pentru că a fost de transport continu. Alte metode de keying sunt disponibile în radiotelegrafie, cum ar fi tastarea prin schimbare de frecvenţă.

Operatorii versiunii originale, amatori de radio, utilizau exclusiv codul Morse, deoarece vocea capabila să emiţăta unde radio nu a devenit frecvent disponibile până în

Page 18: Morse Code

18

jurul anului 1920. Până în anul 2003 Uniunea Internaţională a Telecomunicaţiilor a categorizat competenta codului Morse, ca parte a procedurii de amatori de radio la nivel mondial de acordare a licenţelor. Cu toate acestea, Conferinţa mondială privind radiocomunicaţiile din 2003 a făcut obligaţia de a sti codul Morse pentru acordarea licentelor amatorilor de radio optionala.

Până în 1991, o demonstraţie a capacităţii de a trimite şi a primi codul Morse puţin peste cinci cuvinte pe minut (WPM) pe baza cuvântului PARIS standard a fost necesar pentru a primi o licenţă radio amator pentru utilizare în Statele Unite, de la Comisia Federală de Comunicaţii. Demonstrarea aceastei capacitatati fost încă necesara pentru privilegiul de a folosi benzile de frecventa inalta. Până în anul 2000, competenţa la nivel de 20 cuvinte pe minut bazate pe cuvântul standard PARIS a fost necesară pentru a primi cel mai înalt nivel de licenţă de amatori (clasa amator extra); efectiv pe 15 aprilie 2000, FCC a redus cerinţa pentru clasa extra la cinci cuvinte pe minut. În cele din urmă, la 23 februarie 2007, FCC a eliminat codul Morse din cerintele de competenţă pentru toate licenţele de radio amatori.

În timp ce transmisiile de voce si de date sunt limitate la benzile de amatori de radio specifice în conformitate cu normele din SUA, codul Morse este permis pe toate benzile de amatori- LF, MF, HF, UHF, VHF cu o singura exceptie notabilă fiind banda de 60 de metri în America de Nord. În unele tari, anumite portiuni ale benzilor de amatori sunt rezervate numai pentru transmiterea de semnale Morse.

Viteza relativ limitata la care codul Morse poate fi trimis a

condus la dezvoltarea unui mare numar de abrevieri pentru a

Page 19: Morse Code

19

micsora viteza de comunicare. Acestea includ simbolurile de procedura şi codurile Q, plus un format standardizat pentru mesajele restrictionate tipice. De exemplu, CQ este difuzat sa fie interpretat în sensul de "te voi cauta" (As vrea sa vorbeasca cu oricine care poate auzi semnalul meu). OM (batrânul), YL (domnisoara) şi XYL (fosta sotie) sunt abrevieri comune. YL sau OM sunt utilizate de un operator atunci când se referă la alt operator, XYL sau OM este utilizat de catre un operator, atunci când se refera la sotul sau/sotia sa. Aceasta utilizare de abrevieri a termenilor comuni permite conversaţia chiar si atunci când operatorii vorbesc limbi diferite.

Alte utilizari

Începând cu anul 2010 licente radiotelegrafiei comerciale care foloseste coduri bazate pe cuvântul CODEX standard sunt încă emise în Statele Unite de către Comisia Federală de Comunicaţii. Conceput pentru operatorii de pe bordul navelor si de la statiile de coasta, licenţele sunt acordate solicitanţilor care trec examenele scrise cu privire la teoria de radio avansate şi arată competent de ascrie 20 cuvinte pe minut. Reprezentarea SOS-codul Morse O cerere importantă este de a semnaliza pentru ajutor prin SOS,"· · · - - - · · ·". Acest lucru poate fi trimis in mai multe moduri: tastand la radio pornit si oprit, cu o oglindă, balasand o lanterna si alte metode similare.

Page 20: Morse Code

20

Muzica si Codul Morse

Muzica este un limbaj, şi, prin urmare, poate fi tradus în alte limbi. Desigur, o astfel de traducere nu se poate dovedi absolut perfecta sau corecta, dar ne poate ajuta sa percepem muzică dintr-un nou punct, destul de neobisnuita de vedere, şi ne poate da perspective în muzică şi in elementele sale structurale. Ritmul, unul dintre principalele elemente de muzică, reprezintă, de asemenea, una dintre componentele principale ale "codului Morse" din telegrafie.

Oamenii vorbesc de multe ori sau scriu codul Morse

folosind cuvintele "Dit" (sau Di), pentru un punct şi "Dah" pentru o linie. Deci, cuvintele "codul Morse" pot fi transcrise astfel: Dah-Dah, Dah-Dah-Dah, Di-Dah-Dit, DiDiDit, Dit; Dah-di-Dah-Dit, Dah-Dah-Dah, Dah-di-Dit, Di.

Aproximativ 10 din cele 66 de şase elemente de coduri sunt

utilizate pentru a reprezenta semne de punctuaţie. În plus, unele coduri de şapte şi opt elemente au fost definite. De exemplu, pentru a indica faptul că o greşeală a fost făcută iar receptorul trebuie sa anuleze ultimul cuvant se transmite modelul : ......... (opt puncte).

Muzica este, un domeniu mare pentru procesele de

combinatorice. Cu toate acestea, spre deosebire de codul Morse, ritmul în muzică funcţionează prin mulţimi de durata din cele mai diferite. Dar putem vedea că o multitudine de astfel de durate in muzica pot fi împărţite în timi "relativ scurti" şi "relativ lungi". Cand începe să compun muzica, un compozitor

Page 21: Morse Code

21

de multe ori se gândeste în termeni de modele mai mult sau mai putin abstracte, ritmul constând în durate mai scurte si mai lungi, si numai dupa aceea le defineste în cadrul de timp si sunet.

Putem aplica codul Morse pentru muzica în doua moduri diferite: 1) Pentru a se utiliza ca instrument analitic, în scopul de a distinge si clasifica- motivele ritmice; 2) Pentru a cripta (codarea sau codifica), cuvinte si sensuri în cadrul compozitiilor.

Modele ritmice sau motivele pot fi definite dupa cum urmeaza: Exemplul 1:

Din definitia de mai sus, putem avea o imagine clara a modului în care un compozitor poate introduce, combina si dezvolta ritmice-motive intr-o compozitie, care sa demonstreze vizibil structura ritmica într-o piesa. Exemplul 2: L. van Beethoven, Sonata pentru pian Op.2, nr.1

Page 22: Morse Code

22

In exemplul de mai sus, putem vedea cu usurinta introducerea elementului de patru "H-motiv", apoi diminuarea sa, schimbarea în mâna stânga, scurtarea si transformea în trei-elementul "S-motivul"; schimbare din nou, si, de asemenea, o combinatie a acestor doua forme de motiv, cu cele doua elemente "A motiv-": pasaje melodice citite cu codul Morse arata, uneori, precum cuvintele unor limbi necunoscute, la fel ca în urmatorul fragment din Webern de 6 Stucke, Op.6, nr 4: Exemplul 3. Anton Webern. 6 Stucke für Orchester, Op.6, nr 4, o parte Piccolo

În cazul în care un compozitor utilizeaza motive mai ritmice, sau în cazul în care nu exista o frazare clara a decalajului dintre motive, sarcina de a descifra devine dificila si admite interpretari diferite, cum este demonstrat si in exemplul urmator. Exemplul 4. Pierre Boulez. Notatii Douze, pentru pian, No. 4 (1945)

Page 23: Morse Code

23

De secole compozitorii au criptat cuvinte si intelesuri in muzica lor exista multe moduri de a face acest lucru si codul Morse reprezinta un mijloc foarte eficient de Criptare .Numerosi compozitori au folosit intentionat codul Morse în compozitiile lor, urmatorul text este un fragment din partea de violoncel solo de Messagesquisse de Pierre Boulez, care a dedicat-Paul Sacher: numele "Sacher" este codificat prin diferite mijloace, inclusiv prin Codul Morse. Exemplul 5. Pierre Boulez. Messagesquisse pentru 7 Celli (1976), B.13

În acelasi timp, cele cinci resturile de Celli (2-6) repeta aceleasi tipare ritmice (cu col legni batutti), dar în modul de rotatie, ne este prezentata o scriere a cuvantului "Sacher" în diferitele forme: 2. ERSACH ... .3. HERSAC ... .4. CHERSA ... 5. ACHERS ... 6. Sacher ... Exemplele urmatoare sunt din vastul repertoriu de muzica pop.

Piesa "Miss Morse" de pe albumul "OneNation Underground", înregistrata în 1967 de catre trupa "Pearls

Page 24: Morse Code

24

Before Swine", are un "adult-rated"-mesaj codat in Codul Morse; prin acest vers ni se dezvaluie un mesaj vulgat, dar criptat.

Oh Dear, Miss Morse,I want you,Oh yes, I do,I want you…

Chorus:Dit Dit Dah DitDit Dit Dah Dah Dit Dah DitDah Dit Dah

Un alt cântec, YYZ, de pe albumul 1981 "Moving

Pictures", se bazeaza pe codul de ritmica "y y z" (cratima punct linie linie, linie punct linie linie, linie liniute punct punct). YYZ a fost utilizat ca si codul de transmisii la Toronto pe Aeroportul International Lester B. Pearson. Într-o editie din 1990 newsletter-ul trupei, bateristul Neil Peart a spus ca acest cantec este "vag bazat pe imagini asociate aeroportului . Destinatii exotice, despartiri dureroase, debarcarile fericite, ceva de genul.."

Cantecul Watching You Without Me al lui Kate Bush's de pe albumul Hounds of Love contine bine-cunoscutul semnal de primejdie al Codului Morse: "SOS". Codul Morse este , de asemenea, inclus pe albumul Ronnie Montrose lui (Elektra 1982 EI-60034), Gamma 3; piesa Stranger contine codul Morse, care cripteaza cuvântul "strain".

Codul Morse este utilizat într-un joc de calculator numit

"Red Storm Rising", facut de Microprose. În deschiderea caruia exista muzica care contine codul Morse, care precizeaza "THE RUSSIANS ARE COMING".

Inventia inteligenta a secolului 19, codul Morse, are o istorie destul de îndelungata si bogata. Acesta a fost puternic folosit ca un standard international de comunicare maritim pâna

Page 25: Morse Code

25

în 1999, când a fost înlocuit de catre Global Maritime Distress Safety System.

Atunci cand Marina Franceze a încetat folosirea codului Morse în 1997, mesajul final transmis a fost: Calling all. This is our last cry before our eternal silence." În ciuda acestui fapt, codul Morse este înca în uz în lumea Amatorilor Radio si, cred , isi va continua aventura în marea lume muzicala. "Nu este codul Morse depasit? Tehnologia moderna nu l-a inlocuit inca? " Înapoi în 1912 nimeni nu era împotriva invatarii codului: era simplu atunci- daca nu stiai codul nu puteai asculta si întelege, in nici un caz nu era orba de comunicari wireless. Dar astazi, cu toate acestea, Codul Morse sa moara. Nu numai cei mai in varsta dar si nou-venitii au constatat ca aceasta merita innvatat , o iti ofera placere la fel ca si alt hobby. Unii considera ca este un mijloc excelent de a scapa de problemele de peste zi, si de a te absorbi complet in ceva care sa iti solicite atentia. Este, de asemenea, si practic. Se poate obtine un mesaj, operatorii au recunoscut acum mult timp cunoscut faptul ca semnalele de cod Morse parund la distanta si chiar si prin interferente statice caz în care semnalele vocale nu pot patrunde.Acesta este motivul pentru care unii entuziasti gasesc ca este mult superior comunicarii vocale. În afara de aceasta, echipamentul necesar, atât la transmiterea cat si la receptionare, este mult mai simplu si mai mic, utilizeaza mai putina energie, si în caz de urgenta poate fi de multe ori construit forte simplu, utilizand componente comune .Toate acestea nu au scapat comunistilor rusi. Ei au fost, de asemenea, profund impresionati de fiabilitatea, simplitatea si costurile mai mici de echipamente de comunicare si usurinta în mentinerea acestuia. (În aceeasi linie de gândire,

Page 26: Morse Code

26

comunicarea lor militara a fost cu facuta cu vid tubetype pentru a evita deteriorarea potentiala datorita radiatiei.) Prin urmare, in decursul mai multor ani ei au popularizat si promovat de învatare codului Morse si în dezvoltarea competentelor în utilizarea acestuia. Acesta a fost inclus în rândul "sporturilor" lor civile, printre alte activitati. Concursuri si premii au fost oferite operatorilor mai buni si mai rapizi. Acest lucru i-ar asigura de o masa de oameni bine calificati,si de mare viteza, fiindu-le de folos în caz de razboi. Cu câtiva ani în urma, mai multi tineri soldati americani amatori au fost luati prizonieri de de pe o nava care a fost prea aproape de malul nord-coreean. Ei au fost surprinsi de faptul ca foarte multi civili în aceasta tara inteleg usor codul. În ultimii ani, armata noastra pare sa se fi trezit din nou la toate acestea, si-au reinceput instruirea personalul pentru utilizarea codului Morse. În plus, ei au dat seama ca Morse este un mijloc eficient de comunicare în timpul perioadelor când inamicul bruiaja. Exista, de asemenea, alte avantaje. Se foloseste cea mai îngusta latime de banda de semnal, care pe intelesul amatorilor ar insemna mai multe canale disponibile într-o banda. El are cel mai bun semnal-zgomot, si, în plus, un operator poate afla în curând separa mental "filtru", semnale, care sunt foarte apropiate de diferentele, viteza si stilul de a trimite. Codul Morse original din America (1845) a fost conceput pentru a comunica: pentru a transmite orice mesaj scris de orice natura sau a informatiilor sub forma de scrisoare-perfecta,numere perfecte, si semne de punctuatie-perfecte. Acesta era înregistrat ca o linie wiggly pe o fâsie de banda de hârtie sa fie citit sau interpretat cu ochiul liber. Foarte curând operatorii au descoperit ca puteau citi zgomote recorderului cu

Page 27: Morse Code

27

precizie de ureche, si asa mai departe în timp sirenele au început sa înlocuiasca înregistrare. Nu foarte mult timp dupa aceasta operatorii au devenit atât de priceputi incat au început si chit-chat între ei, la fel ca radioamatori de astazi, atunci când "barfesc". Acest fel de libertate ar trebui sa fie obiectivul nostru - o utilizare usoara, naturala a codului de a comunica, la fel cum citim si sa vorbim. Asta în cazul în care suntem familiarizati cu codul, acesta nu este o limba noua. Este limba pe care deja o stim "scris" în tipare de sunet in loc de modele de cernealape hârtie, aceasta este limba noastra..

Page 28: Morse Code

28

Implementare in Java import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; import java.applet.*; import java.util.*; import sun.audio.AudioPlayer; import gnu.regexp.*; /* -------------------------------------------------------------------------------- Morse Code Translator Java Applet Copyright (C) 1999 Stephen C Phillips Copyright (C) 2001 Michael R Ditto This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -------------------------------------------------------------------------------- You can contact Stephen by email at: [email protected] You can contact Michael by email at: [email protected] -------------------------------------------------------------------------------- Version MD.0.1 2001-4-21 Add Save button and FileDialog (doesn't work on most browsers) Version MD.0.0 2001-3-24 Update for AWT1.1. Add "Stop" button.

Page 29: Morse Code

29

Encapsulate the sun.audio dependency so it still works in browsers without sound. Add random quotation option (fetches a quote from a URL). Add random words option (fetches a series of words from a URL). Translate `` and '' into " since they are used in the random quotes. Use element compression for slow speeds (sends individual characters at 12WPM, with the inter-character spacing stretched out to keep the overall WPM as specified). Version 1.0.1 1999-8-23 Minor correction to translate action button Version 1.0.0 1999-8-10 First public release -------------------------------------------------------------------------------- This is my first Java program so if you have any constructive comments then please let me know! I will be tidying it up shortly... -Stephen -------------------------------------------------------------------------------- */ public class NMorse extends Applet implements ActionListener, ItemListener { TextArea input; Label lettersLabel; TextArea letters; TextArea output; TextArea status; Button transButton, saveButton; Button playButton, stopButton; Choice sourceChoice; Choice wpmChoice; Hashtable hMorse; Hashtable hText; byte [] sample = null; int sPos; int timeunit; public void init() { Label l; Panel p; Font butFont = new Font("SansSerif", Font.PLAIN, 10); GridBagLayout gbag = new GridBagLayout(); GridBagConstraints con = new GridBagConstraints(); setBackground(Color.lightGray); setLayout(gbag); l = new Label("Morse Code Translator", Label.CENTER);

Page 30: Morse Code

30

l.setFont(new Font("SansSerif", Font.BOLD, 16)); con.gridx = 0; con.gridy = 0; con.gridwidth = 6; con.anchor = GridBagConstraints.CENTER; con.weightx = 1.0; gbag.setConstraints(l, con); add(l); l = new Label("Input", Label.LEFT); l.setFont(new Font("SansSerif", Font.BOLD, 12)); con.gridx = 0; con.gridy = 1; con.gridwidth = 1; gbag.setConstraints(l, con); add(l); input = new TextArea("Type your text or dots and dashes here.", 4, 80, TextArea.SCROLLBARS_VERTICAL_ONLY); input.setEditable(true); input.selectAll(); con.gridx = 0; con.gridy = 2; con.gridwidth = 6; con.fill = GridBagConstraints.BOTH; gbag.setConstraints(input, con); add(input); l = new Label("Translation", Label.LEFT); l.setFont(new Font("SansSerif", Font.BOLD, 12)); con.gridx = 0; con.gridy = 3; con.gridwidth = 1; con.weightx = 1; con.fill = GridBagConstraints.NONE; gbag.setConstraints(l, con); add(l); sourceChoice = new Choice(); sourceChoice.setFont(butFont); sourceChoice.addItem("Typed Input"); sourceChoice.addItem("Random Quotation"); sourceChoice.addItem("Random Words"); sourceChoice.select(0); sourceChoice.setForeground(Color.black); sourceChoice.setBackground(Color.lightGray); con.gridx = 2; con.gridwidth = 2; gbag.setConstraints(sourceChoice, con); add(sourceChoice); sourceChoice.addItemListener(this); lettersLabel = new Label("using these letters:"); lettersLabel.setEnabled(false); lettersLabel.setFont(butFont); letters = new TextArea("etianmos",

Page 31: Morse Code

31

1, 10, TextArea.SCROLLBARS_NONE); letters.setEditable(true); letters.setEnabled(false); p = new Panel(); p.add(lettersLabel); p.add(letters); con.gridx = 4; con.weightx = 0; con.gridwidth = 2; gbag.setConstraints(p, con); add(p); output = new TextArea("", 2, 80, TextArea.SCROLLBARS_VERTICAL_ONLY); output.setEditable(false); con.gridx = 0; con.gridy = 4; con.gridwidth = 6; con.fill = GridBagConstraints.BOTH; gbag.setConstraints(output, con); add(output); transButton = new Button("Translate"); transButton.setFont(butFont); transButton.setForeground(Color.black); transButton.setBackground(Color.lightGray); con.gridx = 0; con.gridy = 5; con.gridwidth = 2; con.fill = GridBagConstraints.VERTICAL; con.ipadx = 2; con.ipady = 2; con.insets = new Insets(6,0,0,0); gbag.setConstraints(transButton, con); add(transButton); transButton.addActionListener(this); con.gridx = 2; con.gridy = 5; con.gridwidth = 2; con.insets = new Insets(6,0,0,0); if (true) { // add "Save" Button saveButton = new Button("Save..."); saveButton.setFont(butFont); saveButton.setForeground(Color.black); saveButton.setBackground(Color.lightGray); gbag.setConstraints(saveButton, con); add(saveButton); saveButton.addActionListener(this); } else { // disabled since it doesn't work on most browsers saveButton = null; Panel blank = new Panel(); gbag.setConstraints(blank, con); add(blank); }

Page 32: Morse Code

32

p = new Panel(); GridBagLayout gbag1 = new GridBagLayout(); p.setLayout(gbag1); //sub panel playButton = new Button("Play"); playButton.setFont(butFont); playButton.setForeground(Color.black); playButton.setBackground(Color.lightGray); con.gridx = 0; con.gridy = 0; con.gridwidth = 1; con.ipadx = 2; con.ipady = 2; con.insets = new Insets(0,0,0,0); gbag1.setConstraints(playButton, con); p.add(playButton); playButton.addActionListener(this); l = new Label("at"); l.setFont(butFont); con.gridx = 1; con.gridy = 0; con.ipadx = 0; con.ipady = 0; gbag1.setConstraints(l, con); p.add(l); wpmChoice = new Choice(); wpmChoice.setFont(butFont); wpmChoice.addItem("5"); wpmChoice.addItem("10"); wpmChoice.addItem("13"); wpmChoice.addItem("15"); wpmChoice.addItem("18"); wpmChoice.addItem("20"); wpmChoice.addItem("25"); wpmChoice.addItem("30"); wpmChoice.addItem("35"); wpmChoice.addItem("40"); wpmChoice.select(1); wpmChoice.setForeground(Color.black); wpmChoice.setBackground(Color.lightGray); con.gridx = 2; con.gridy = 0; gbag1.setConstraints(wpmChoice, con); p.add(wpmChoice); l = new Label("WPM"); l.setFont(butFont); con.gridx = 3; con.gridy = 0; gbag1.setConstraints(l, con); p.add(l);

Page 33: Morse Code

33

stopButton = new Button("Stop"); stopButton.setEnabled(false); stopButton.setFont(butFont); stopButton.setForeground(Color.black); stopButton.setBackground(Color.lightGray); con.gridx = 4; con.gridy = 0; con.gridwidth = 1; con.ipadx = 2; con.ipady = 2; con.insets = new Insets(0,0,0,0); gbag1.setConstraints(stopButton, con); p.add(stopButton); stopButton.addActionListener(this); con.gridx = 4; con.gridy = 5; con.ipadx = 2; con.ipady = 2; con.gridwidth = 2; gbag.setConstraints(p, con); add(p); status = new TextArea("", 1, 80, TextArea.SCROLLBARS_NONE); status.setEditable(false); con.gridx = 0; con.gridy = 6; con.gridwidth = 6; con.fill = GridBagConstraints.BOTH; con.ipadx = 0; con.ipady = 0; gbag.setConstraints(status, con); add(status); hMorse = new Hashtable(46); hText = new Hashtable(46); hMorse.put(new Character('A'), ".-"); hMorse.put(new Character('B'), "-..."); hMorse.put(new Character('C'), "-.-."); hMorse.put(new Character('D'), "-.."); hMorse.put(new Character('E'), "."); hMorse.put(new Character('F'), "..-."); hMorse.put(new Character('G'), "--."); hMorse.put(new Character('H'), "...."); hMorse.put(new Character('I'), ".."); hMorse.put(new Character('J'), ".---"); hMorse.put(new Character('K'), "-.-"); hMorse.put(new Character('L'), ".-.."); hMorse.put(new Character('M'), "--"); hMorse.put(new Character('N'), "-."); hMorse.put(new Character('O'), "---"); hMorse.put(new Character('P'), ".--."); hMorse.put(new Character('Q'), "--.-"); hMorse.put(new Character('R'), ".-."); hMorse.put(new Character('S'), "..."); hMorse.put(new Character('T'), "-");

Page 34: Morse Code

34

hMorse.put(new Character('U'), "..-"); hMorse.put(new Character('V'), "...-"); hMorse.put(new Character('W'), ".--"); hMorse.put(new Character('X'), "-..-"); hMorse.put(new Character('Y'), "-.--"); hMorse.put(new Character('Z'), "--.."); hMorse.put(new Character('1'), ".----"); hMorse.put(new Character('2'), "..---"); hMorse.put(new Character('3'), "...--"); hMorse.put(new Character('4'), "....-"); hMorse.put(new Character('5'), "....."); hMorse.put(new Character('6'), "-...."); hMorse.put(new Character('7'), "--..."); hMorse.put(new Character('8'), "---.."); hMorse.put(new Character('9'), "----."); hMorse.put(new Character('0'), "-----"); hMorse.put(new Character('.'), ".-.-.-"); hMorse.put(new Character('!'), "-.-.--"); hMorse.put(new Character(','), "--..--"); hMorse.put(new Character(':'), "---..."); hMorse.put(new Character('?'), "..--.."); hMorse.put(new Character('\''), ".----."); hMorse.put(new Character('`'), ".----."); // treat ` as ' hMorse.put(new Character('-'), "-....-"); hMorse.put(new Character('/'), "-..-."); hMorse.put(new Character('('), "-.--.-"); hMorse.put(new Character(')'), "-.--.-"); hMorse.put(new Character('"'), ".-..-."); hMorse.put(new Character('='), "-...-"); hMorse.put(new Character('+'), ".-.-."); hMorse.put(new Character(';'), "-.-.-."); hMorse.put(new Character('_'), "..--.-"); hMorse.put(new Character('$'), "...-..-"); hMorse.put(new Character('@'), ".--.-."); Enumeration list = hMorse.keys(); while (list.hasMoreElements()) { Character c = (Character)list.nextElement(); String s = (String)hMorse.get(c); hText.put(s, c); } } public void start() { if (sourceChoice.getSelectedIndex() == 0) input.requestFocus(); } public void itemStateChanged(ItemEvent event) { if (event.getSource() == sourceChoice && event.getStateChange() == ItemEvent.SELECTED) { boolean enaInput = sourceChoice.getSelectedIndex() == 0; boolean enaLetters = sourceChoice.getSelectedIndex() == 2; input.setEditable(enaInput); if (enaInput) { input.selectAll(); input.requestFocus();

Page 35: Morse Code

35

} letters.setEnabled(enaLetters); lettersLabel.setEnabled(enaLetters); } } private Frame getFrame() { Container c; for (c=this; !(c instanceof Frame); c = c.getParent()) ; return (Frame)c; } public void actionPerformed(ActionEvent event) { String morse = null; quiet(); stopButton.setEnabled(false); if (event.getSource() == transButton || event.getSource() == playButton || event.getSource() == saveButton) { switch (sourceChoice.getSelectedIndex()) { case 0: status.setText("translating..."); if (isText(input.getText())) { morse = toMorse(input.getText()); output.setText(morse); } else { morse = input.getText(); output.setText(toText(morse)); } break; case 1: status.setText("fetching random text..."); input.setText(randomText(null)); status.setText("translating..."); morse = toMorse(input.getText()); output.setText(morse); break; case 2: status.setText("fetching random text..."); input.setText(randomText(letters.getText())); status.setText("translating..."); morse = toMorse(input.getText()); output.setText(morse); break; } status.setText("translated"); if (event.getSource() == playButton) { byte[] sample = makeSample(morse); status.setText("playing..."); try { playButton.setEnabled(false); stopButton.setEnabled(true);

Page 36: Morse Code

36

(new Sound(sample)).play(); playButton.setEnabled(true); } catch (Exception ex) { status.setText(ex.toString()); playButton.setEnabled(true); } } if (event.getSource() == saveButton) { byte[] sample = makeSample(morse); final byte[] header = { (byte)0x2E, (byte)0x73, (byte)0x6E, (byte)0x64, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x20, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x00, (byte)0x1F, (byte)0x40, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, }; try { FileDialog fd = new FileDialog(getFrame(), "File name for audio sample", FileDialog.SAVE); fd.setFile("morse.au"); fd.setVisible(true); String f = fd.getFile(); if (f != null) { File file = new File(fd.getDirectory(), f); FileOutputStream toFile = new FileOutputStream(file); toFile.write(header); toFile.write(sample); toFile.close(); } } catch (Exception ex) { status.setText("Browser error: " + ex.toString()); } } } } /**************************************************************/ /* Random Text Acquisition */ /**************************************************************/ private String randomText(String letters) { try { URL textURL = new URL(getCodeBase(), ("/cgi-bin/randomtext" + (letters == null ? "" : "?" + letters))); InputStreamReader sr = new InputStreamReader((InputStream)textURL.getContent(), "UTF8");

Page 37: Morse Code

37

StringBuffer b = new StringBuffer(); char[] buf = new char[100]; int n; while ((n = sr.read(buf)) > 0) { b.append(buf, 0, n); } return b.toString(); } catch (Exception ex) { ex.printStackTrace(); status.setText(ex.toString()); return "error"; } } /**************************************************************/ /* Text Processing */ /**************************************************************/ boolean isText(String sText) { boolean matches = false; try { RE morseRE = new RE("^[._/ \\|-]*$"); matches = morseRE.isMatch(sText); } catch (REException arg) { } return !matches; } String toMorse(String sText) { /* tr/a-z/A-Z/; #lowercase tr/ / /s; #sqeeze spaces s/^ *(.*?) *$/$1/; #chop start and end of ' ' s# #~ #g; #mark word boundaries (with non-Morse character) s#([A-Z0-9.!,:?'`/()\"=+;_$@ -])#$toMorse{$1}.' '#eg; #put Morse in s#~#/#g; #re-mark word boundaries */ StringBuffer sbMorse = new StringBuffer(); sText = sText.toUpperCase(); try { RE sub1 = new RE("\\s+"); RE sub2 = new RE("^\\s+"); RE sub3 = new RE("\\s+$"); RE sub5 = new RE("[^A-Z0-9.!,:?'`/()\"=+;_$@ -]"); RE sub4 = new RE("[\'`]{2}"); sText = sub1.substituteAll(sText, " "); sText = sub2.substitute(sText, ""); sText = sub3.substitute(sText, ""); sText = sub4.substituteAll(sText, "\""); sText = sub5.substituteAll(sText, ""); input.setText(sText); for (int i = 0; i < sText.length(); i++) { char c = sText.charAt(i);

Page 38: Morse Code

38

Character ch = new Character(c); if (Character.isWhitespace(c)) { sbMorse.append("/ "); } else { sbMorse.append(hMorse.get(ch)); sbMorse.append(' '); } } } catch (REException arg) { //input.setText(arg.getMessage()); input.setText("error " + arg); } return sbMorse.toString(); } public String toText(String sMorse) { /* tr/ / /s; #sqeeze space s#( ?/ ?)+# /#g; #deal with multiple and space-padded '/' s#^[ /]*##; #chop start of '/' and ' ' s#[ /]*$# #; #chop end of same, leaving one ' ' s#/#~#g; #mark word boundaries (with non-Morse character) s/([-.]+) /$fromMorse{"$1"}/eg; #put in text s/~/ /g; #replace word boundaries s#\(([^(]*)\(#\($1\)#g; #match brackets */ StringBuffer sbText = new StringBuffer(); try { RE sub1 = new RE("\\|"); // for '/' RE sub2 = new RE("_"); // for '-' RE sub3 = new RE("\\s+"); // for ' ' RE sub4 = new RE("( ?/ ?)+"); // for ' / ' RE sub5 = new RE("^[ /]*"); // for '' RE sub6 = new RE("[ /]*$"); // for '' sMorse = sub1.substituteAll(sMorse, "/"); sMorse = sub2.substituteAll(sMorse, "-"); sMorse = sub3.substituteAll(sMorse, " "); sMorse = sub4.substituteAll(sMorse, " / "); sMorse = sub5.substitute(sMorse, ""); sMorse = sub6.substitute(sMorse, ""); input.setText(sMorse); sMorse = sMorse + " "; RE sub7 = new RE("^.*? "); // for '' (rest of string) RE sub8 = new RE(" .*$"); // for '' (first word) while (sMorse.length() != 0) { String letter = sub8.substitute(sMorse, ""); sMorse = sub7.substitute(sMorse, ""); if (letter.equals("/")) { sbText.append(" "); } else if (hText.get(letter) == null) { sbText.append("*"); } else { sbText.append(hText.get(letter));

Page 39: Morse Code

39

} } // need to do parentheses matching! } catch (REException arg) { input.setText(arg.toString()); } return sbText.toString(); } /**************************************************************/ /* Sound Processing */ /**************************************************************/ Sound playing = null; class Sound { private InputStream stream = null; byte[] sample; Sound(byte[] sample) { this.sample = sample; } void play() { quiet(); stream = new ByteArrayInputStream(sample); AudioPlayer.player.start(stream); playing = this; } void stop() { if (stream != null) { AudioPlayer.player.stop(stream); stream = null; } if (playing == this) playing = null; } } void quiet() { if (playing != null) { status.setText(""); playing.stop(); } } byte [] makeSample(String morse) { int wpm = Integer.parseInt(wpmChoice.getSelectedItem()); final int ditLen = 1; final int dahLen = 3; final int wordLen = 50; final int charPause = 3; final int wordPause = 7; char c;

Page 40: Morse Code

40

float compression; int extra; // milliseconds per dit timeunit = 1000*60/(wpm*wordLen); if (timeunit > 100) { // If the characters are to be sent slowly (less than 12wpm) // compress the elements, and stretch the gap between characters // to keep the wpm the same. compression = (float)timeunit / (float)100.0 - 1; timeunit = 100; } else { compression = 0; } int length = 0; extra = 0; for (int i = 0; i < morse.length(); ++i) { c = morse.charAt(i); switch (c) { case '.': extra += ditLen + ditLen; length += ditLen + ditLen; break; case '-': extra += dahLen + ditLen; length += dahLen + ditLen; break; case ' ': extra += charPause - ditLen; length += charPause - ditLen + (int)(extra * compression); extra = 0; break; case '/': extra += wordPause - ditLen; length += wordPause - ditLen + (int)(extra * compression); extra = 0; break; } } length *= 8 * timeunit; sample = new byte[length]; sPos = 0; extra = 0; for (int i = 0; i < morse.length(); ++i) { c = morse.charAt(i); switch (c) { case '.': extra += ditLen + ditLen; addSound(ditLen); addSilence(ditLen);

Page 41: Morse Code

41

break; case '-': extra += dahLen + ditLen; addSound(dahLen); addSilence(ditLen); break; case ' ': extra += charPause - ditLen; addSilence(charPause - ditLen + (int)(extra * compression)); extra = 0; break; case '/': extra += wordPause - ditLen; addSilence(wordPause - ditLen + (int)(extra * compression)); extra = 0; break; } } return sample; } private void addSound(int units) { for (int i = 0; i < units*timeunit; ++i) { sample[sPos++] = (byte)0xA7; sample[sPos++] = (byte)0x81; sample[sPos++] = (byte)0xA7; sample[sPos++] = (byte)0; sample[sPos++] = (byte)0x59; sample[sPos++] = (byte)0x7F; sample[sPos++] = (byte)0x59; sample[sPos++] = (byte)0; } } private void addSilence(int units) { int oPos = sPos; sPos += 8*units*timeunit; fill(sample, oPos, sPos, (byte)0); } private static void fill(byte[] a, int s, int e, byte v) { while (s<e) a[s++] = v; } }

Page 42: Morse Code

42

Implementare in C #include <stdio.h> #include <string.h> #include <ctype.h> #include<stdlib.h> static const struct { const char letter, *morse; } Code[] = { { 'A', ".- " },{ 'B', "-... " },{ 'C', "-.-. " },{ 'D', "-.. " }, { 'E', ". " },{ 'F', "..-. " },{ 'G', "--. " },{ 'H', ".... " }, { 'I', ".. " },{ 'J', ".--- " },{ 'K', ".-.- " },{ 'L', ".-.. " }, { 'M', "-- " },{ 'N', "-. " },{ 'O', "--- " },{ 'P', ".--. " }, { 'Q', "--.- " },{ 'R', ".-. " },{ 'S', "... " },{ 'T', "- " }, { 'U', "..- " },{ 'V', "...- " },{ 'W', ".-- " },{ 'X', "-..- " }, { 'Y', "-.-- " },{ 'Z', "--.. " },{ ' ', " " },{ '.', ".-.-.-"}, { ',', "--..--"},{ '?', "..--.."},{ '!', "-.-.-- "},{ '/', "-..-."}, { '(' , "-.--."},{ ')', "-.--.-"},{ '&', ".-..."},{ ':', "---..."}, { ';', "-.-.-."},{ '=', "-...-"},{ '+', ".-.-."},{ '-', "-....-"}, { '_', "..--.-"},{ '"', ".-..-."},{ '$', "...-..-"},{ '@', ".--.-."}, { '0', "-----"},{ '1', ".----"},{ '2', "..---"},{ '3', "...--"}, { '4', "....-"},{ '5', "....."},{ '6', "-...."},{ '7', "--..."}, { '8', "---.."},{ '9', "----."} }; void encode( char *s) { size_t i, j; for ( i = 0; s[i]; ++i ) { for ( j = 0; j < sizeof Code / sizeof *Code; ++j ) { if ( toupper(s[i]) == Code[j].letter ) { printf("%s", Code[j].morse); break; } } } putchar('\n'); } int main(void) { printf("Introduceti textul pe care vreti sa il transformati in cod Morse:\n"); char text[1000]; gets(text); encode(text);

Page 43: Morse Code

43

system("PAUSE"); return 0; }

Bibliografie:

Documentatia proiectului a fost luata si tradusa din:

1) http://www.scribd.com/doc/24594840/CODE

2) http://www.scribd.com/doc/27170791/Permutation-in-Morse-Code-by-Umaru-Yusufu

3) http://www.scribd.com/doc/31747653/The-Art-and-Skill-of-Radio-Telegraphy

4) http://en.wikipedia.org/wiki/Morse_code

5) http://www.scribd.com/doc/51548389/MorseMusic

6) http://web.mit.edu/invent/iow/morse.html