Asistent Pentru Compunerea Melodiilor

Tabel figuri

Figură 1 Tabel ce conține câteva exemple de mesaje [7] 7

Figură 2 Tipuri de mesaje MIDI [7] 8

Figură 3 Aranjarea notelor pe clapele unui pian [7] 9

Figură 4 Etapele formând anvelopa de amplitudine 10

Figură 5 Însumarea a trei frecvente discrete[1] 13

Figură 6 Densitatea spectrala de putere a semnalului vocal[25] 15

Figură 7 Tabel cu tipuri specifice 17

Figură 8 Diverși operatori LINQ 19

Figură 9 Interfața originală a proiectului „Midi Sheet Music”[10] 21

Figură 10 Schema aplicației 23

Figură 11 Diagrama funcționarii unei componente 24

Figură 12 Interfața de start a aplicației 26

Figură 13 Interfața aplicației de procesare a fișierelor MIDI (interfață aparținând proiectului „Midi Sheet Music” dar modificată ulterior) 27

Figură 14 Pas 1: Deschiderea serverelor pentru a putea rula diferite servicii 30

Figură 15 Pas 2: Deschiderea aplicației 30

Figură 16 Pas 2: Adăugarea unui fișier audio 31

Figură 17 Redarea unui fișier audio și selectarea unei porțiuni pentru decupare 31

Figură 18 Pas 4: Deschiderea unui fișier MIDI multi-track 32

Figură 19 Pas 5: Aplicarea algoritmului de filtrare și compararea rezultatelor 32

Introducere

Prin intermediul acestei lucrări urmăresc să creez o aplicație client-server, extensibilă cu module, capabilă să prelucreze fișiere multimedia având formatul MP3, WAV, MIDI și să aplice modificări acestora. Modificările aduse sunetelor de intrare sunt diverse și pornesc de la simpla adăugare a unui efect audio (echo, high pitch) și ajung până la descompunerea datelor de intrare într-o melodie de tip MIDI multi-track.

Aplicația își propune să ofere utilizatorilor posibilitatea de a reda și edita fișiere audio de tipul MP3, WAV și MIDI. Aplicațiile actuale oferă o gamă mult mai restrânsă de utilități pentru editarea fișierelor MIDI și totodată sunt aplicații monolitice, în care utilizatorul nu poate să intervină în configurarea procesărilor intermediare. De exemplu Audaciy, un proiect open-source, oferă suport pentru majoritatea formatelor audio și permite să mixarea, tăierea și filtrarea materialele audio, pentru a le optimiza și a crea propriile piese, însă nu propune o arhitectură modulară, ușor de modificat, și totodată procesarea fișierelor MIDI folosind acest proiect open-source este foarte limitată, acestea putând fi doar arătate nu și redate. O altă aplicație asemănătoare, Adobe Audition, ce este un studio de înregistrări multi-track ce oferă o gamă largă de utilități, însă dacă utilizatorul nu are suficientă experiență în editare audio acesta va ajunge să se lovească destul de des de multitudinea de termeni tehnici utilizați, însă la fel ca cel prezentat anterior nu oferă suport foarte mare pentru fișierele MIDI, iar arhitectura nu este modulară.

În cadrul acestei aplicații, utilizatorul poate să editeze și fișierele WAV și poate să aleagă modul în care conversia de la WAV la MIDI este făcută, acesta putând alege între un fișier single track sau un fișier multi-track. Aplicația mai oferă și posibilitatea ca fișierul MIDI rezultat să fie filtrat și evenimentele duplicate sau redundate să fie șterse din cadrul acestuia. Totodată aplicația își propune să ofere o arhitectură modulară, cu module existente ușor de schimbat sau cu noi module ușor de integrat, iar acest lucru se realizează prin multitudinea de servicii utilizate, precum conversia fișierelor WAV la MIDI single track sau prin conversia MIDI single track la MIDI multi-track.

Generalități privind prelucrarea datelor audio

„În informatică, compresia sau comprimarea datelor reprezintă codificarea unor date astfel încât ele să necesite la stocare în memoria calculatoarelor mai puțini biți decât datele inițiale. Scopul este economisirea de resurse, deoarece informația cu volum mai mic ocupă mai puțin spațiu de stocare, de asemenea se poate transmite mai rapid, sau măcar la fel de repede dar folosind o lărgime de bandă mai redusă.”[34][35]

Elemente generale

„Transmisiunile digitale cu cod în impulsuri (Pulse Code Modulation, prescurtat PCM) au apărut din nevoia oamenilor de a folosi cât mai eficient banda de transmisie.”[33]

,,Pulse code modulation” (PCM) a fost introdus în anul 1937 de Alec Reeves de la International Telephone and Telegraph și a reprezentat o alternativă la modularea analogică în frecvență și amplitudine, mai exact semnalele audio erau eșantionate în puncte discrete în timp. Fiecare dintre aceste eșantioane era cuantizat și codificat în binar, iar biții erau transmiși ca impulsuri reprezentând 0 sau 1.

Fișierele PCM conțin date audio digitizate, dar necomprimate, iar acest lucru a condus la crearea unor serii de alternative pentru reducerea cantității de informație (de exemplu în domeniul telecomunicațiilor pentru a putea păstra lărgimea de bandă).

Amplitudinea vorbirii umane nu se modifică foarte mult de la un moment la altul și astfel se poate reduce mărimea fișierului doar prin simpla memorare a diferențelor dintre eșantioane succesive (,,differential pulse code modulation”). Metoda prezentată anterior poate fi îmbunătățită folosindu-se ,,adaptive differential pulse code modulation” (variația nivelului de cuantizare în concordanță cu caracteristicile de schimbare dinamică a șablonului de vorbire și astfel furnizându-se rate mai bune de compresie).

Pentru a putea memora datele audio digitale este necesar să specificăm rata de eșantionare respectiv precizia, ce se specifică în Hz și respectiv adâncime de biți. Exemple de valori pentru diferite rate de eșantionare:

8 kHz mono pentru telefonie

44.1 kHz stereo cu 16 biți pe fiecare canal, pentru sunet de calitate CD

48 kHz bandă audio digitală

96 kHz sau 192 kHz pe 2 canale cu 24 biți per canal pentru calitate DVD

Formate audio și prelucrarea acestora

Există numeroase formate audio predefinite în care pot fi stocate informațiile audio, iar modul în care acestea sunt stocate ia în considerare semnificația lor, organizarea internă și totodată scopul acestora.

Formatele de fișiere audio diferă printr-o serie de caracteristici:

codificarea eșantioanelor:

cuantizare liniară;

cuantizare logaritmică;

valori de eșantioane cu semn sau fără semn;

formatul datelor:

existența unui header;

memorarea octeților în ordinea little-endian sau big-endian;

intersectarea canalelor;

tipul de informații memorate în fișiere:

constrângeri legate de rata de eșantionare și/sau adâncimea de biți;

constrângeri legate de numărul de canale;

informații suplimentare, ca „timestamps”, „loop points”;

fișierul poate fi comprimat:

utilizând o tehnologie cu pierderi

utilizând o tehnologie fără pierderi

format „open” sau „proprietary”

În continuare voi prezenta câteva dintre cele mai răspândite formate, grupându-le în două categorii importante:

Formate cu pierderea de informație audio

Formate fără pierderea de informație audio

Din prima categorie, și anume din cadrul formatelor ce permit pierderea informației audio putem aminti:

AC3 – Acest format poate să controleze până la șase canale: centru, față-stânga, față-dreapta, spate-dreapta, spate-stânga și un canal separat pentru frecvențele joase, canalele desfășurându-se pe întregul spectru sonor auditiv (20 Hz – 20 kHz).[16]

MP3 – reprezintă un format audio multimedia, ce are la bază comprimarea sunetului folosind metoda ,,lossy MPEG compression” (datele ce nu pot fi percepute de urechea umană nu sunt incluse în fișier). Avantajul acestui format este cel că fișierul audio rezultat este de aproape zece ori mai mic decât acela original, însă sunetul este de o calitate asemănătoare ca și pe CD. [18]

WMA – reprezintă formatul Windows media audio și are , în general, o dimensiune mai mică decât un fișier echivalent în formatul MP3. [17]

OGG – este un format open-source ce este reprezentat printr-un flux de biți multimedia creat pentru streaming eficient și compresie de fișiere. Extensia ,,.ogg” face referire la formatul de fișier care include un număr de codec-uri open-source, acestea putând să stocheze informație audio sau video. [17]

AAC – este un standard de codificare audio pentru compresia digitală audio cu pierderi și a fost proiectat pentru a înlocui formatului MP3 deoarece reușește, de multe ori, să aibă pentru un bit rate asemănător o calitate mai bună a sunetului. [17]

MPC (Musepack) – este unde codec audio open-source optimizat special pentru compresia audio stereo având bit rate-ul între 160 și 180 kbps (se poate comprima un fișier cu până la 320 kbps). [17]

Din categoria formatelor audio fără pierdere putem aminti:

WAV – este un format creat de Microsoft și IBM. Este unul dintre cele mai simple formate de fișier de tipul PCM, ce folosește compresie fără pierderi și face parte din subsetul specificației RIFF. Un fișier de tipul RIFF începe cu un header urmat de o secvență de date. Fișierul WAV este asemănător celui de tip RIFF conține două subsecvențe: ,,fmt” ce specifică formatul datelor și ,,data” cu eșantioanele. [18]

FLAC – este un format open-source ce a beneficiat de o foarte mare popularitate până la apariția formatului APE.

APE – „Format fără pierderi care permite să reducem cu circa 50% spațiul ocupat de muzica noastră fără să pierdem în calitate. În acest mod un format WAV care ocupă cam 600 MB, convertit o să ocupe cam 300MB”.[17]

Fișiere MIDI

„MIDI (Interfață Digitală pentru Instrumente Muzicale) este un protocol de comunicații standard definit în 1982 ce permite instrumentelor muzicale electronice cum ar fi claviaturile electronice sau computerele să comunice, să se controleze reciproc sau să se sincronizeze.”[36]

Scurt istoric asupra standardului MIDI

La sfârșitul anilor `70 instrumentele electronice au cunoscut o creștere foarte mare în mai multe zone ale lumii precum Statele Unite ale Americii, Europa și Japonia.[32] Primele sintetizatoare analogice erau, de obicei, monofonice și erau controlate printr-un anumit voltaj produs de tastatura.[19]

Un fișier audio poate fi reprezentat printr-o colecție de eșantioane sau poate avea formatul MIDI (,,Musical Instrument Digital Interface”).[26]

MIDI este un protocol definit în anul 1983 ce permite instrumentelor muzicale electronice, precum claviaturile electronice sau computerele să comunice, să se controleze reciproc sau să se sincronizeze. Acest tip de fișier salvează evenimentele de sunet. Pentru crearea unui astfel de format se folosește un limbaj de scripting pentru specificarea mesajelor cu ajutorul cărora se indică note, instrumente și durate. Fiecare mesaj descrie o modificare în cadrul sunetului, precum schimbarea unei note, a unei cheii etc.

Dispozitivele hardware care pot să genereze mesaje MIDI se numesc controllere MIDI, iar dispozitivele ce pot să interpreteze aceste mesaje generând sunetele aferente se numesc sintetizatoare MIDI. Există dispozitive ce pot realiza ambele operații, de exemplu anumite keyboard-uri.

Conectarea unui echipament MIDI la calculator se poate realiza prin:

Conector MIDI cu 15 pini (pentru calculatoare mai vechi)

USB

„Un secvențiator MIDI este un dispozitiv hardware (independent de calculator) sau o aplicație software care permite recepția, memorarea și editarea datelor MIDI. Acesta permite vizualizarea unui fișier MIDI sub diferite forme:”[7]

,,staff view” – afișează notațiile muzicale[7]

,,piano roll view” – indică apăsările clapelor pianului[7]

Lista de evenimente[7]

Asemănătoare sevcențiatoarelor, programele de notație muzicală pot fi utilizate pentru crearea de muzică prin:

Introducerea notelor una câte una

Apăsarea clapelor unui pian virtual cu ajutorul mouse-ului

Folosind un editor de evenimente

Avantajul MIDI, atunci când a apărut, a fost limitat fiind util doar celor care foloseau instrumente electronice pentru a produce muzica ușoara. Standardul a permis diferitelor instrumente să comunice unul cu celălalt, și totodată cu, calculatoarele și astfel a fost constatata o creștere rapidă a vânzării de instrumente electronice și de software dedicat procesării audio. Datorită faptului că acest standard permite diferitelor dispozitive să comunice între ele, producători de muzica au putut renunța la anumite componentele hardware.[28]

Standardul MIDI a apărut odată cu răspândirea computerelor personale și s-a suprapus și cu apariția sampler-lor. Aceasta combinație a permis artiștilor să folosească în timpul concertelor efecte audio ce până atunci putea fi redate numai în cadrul unui studio. [27]

MIDI a fost creat pentru a permite instrumentelor electronice sa comunice între ele și să se controleze unul pe altul. Sintetizatoare analogice care nu au componentă digitală și au fost construite înainte de dezvoltarea standardului MIDI îl pot folosi daca li se adaugă o componentă ce transformă mesajele MIDI în tensiuni de control analogice.[27]

Când o notă este cântată la un instrument MIDI, acesta generează un semnal digital ce poate fi utilizat pentru a declanșa o notă pe un alt instrument [19]. Capacitatea de control de la distanță permite instrumentelor de mari dimensiuni să fie înlocuite cu modulatoare de sunet mult mai mici, și astfel permite muzicienilor să combine instrumente pentru a realiza un sunet mai plin, sau pentru a crea combinații cum ar fi pian acustic și chitară.[20]

Standardul MIDI permite selectarea a 128 programe diferite, dar poate oferi mai multe dispozitive prin aranjarea lor în pachete de patch-uri cu câte 128 de programe fiecare.[21]

Mesaje MIDI

Un mesaj MIDI este o instrucțiune care controlează un aspect al dispozitivului receptor. Un mesaj MIDI constă dintr-un octet de stare, care indică tipul mesajului, urmat de până la doi octeți de date care conțin parametrii. Octetul de stare are bitul MSB 1 și indică tipul de mesaj, octetul de date având bitul MSB 0.

Figură 1 Tabel ce conține câteva exemple de mesaje [7]

Un exemplu de mesaj MIDI ce poate fi create pe baza tabelului anterior este: 0x91 0x3c 0x64 ce semnifică activarea notei 60 (0x3c) pe canalul 1 cu o viteaza de apăsare de 100 (reprezentat de 0x64).[7]

Mesajele MIDI pot fi "mesaje de canal", care sunt trimise pe doar unul dintre cele 16 canale și poate fi auzit doar de către dispozitive care folosesc acel canal sau "mesajele de sistem", ce sunt primite de către toate dispozitivele. Datele de intrare ce nu sunt relevante pentru un dispozitiv de recepție sunt ignorate. Există cinci tipuri de mesaje: Channel Voice, Channel Mode, System Common, System Real-Time, și System Exclusive.[22]

Mesajele de tipul Channel Voice se transmit în timp real și conțin date despre performanta ce sunt transmise pe un singur canal. Exemplele includ mesaje de tipul "nota pornita" ce conțin un număr de notă MIDI care specifică pitch-ul acesteia, o valoare care indică forța cu care a fost apăsată nota și numărul de canal; "nota oprita " sunt mesajele ce semnifica încheierea unei note. [19]

Mesajele de tipul Channel Mode includ Omni / mono / poli precum și mesajele pentru a reseta toate controlerele la starea lor implicită sau pentru a trimite mesaje "nota oprita" pentru toate notele.[19]

Mesajele de tipul System Common nu includ numere de canal, și sunt primite de către fiecare dispozitiv din lanțul MIDI. Un exemplu pentru mesajele de tipul System Common este mesajul ce specifică timpul într-un fișier MIDI.[19]

Mesajele de tipul System Real-Time asigură sincronizare, și includ un ceas MIDI și Active Sensing.[19]

Mesajele de tipul System Exclusive sunt un motiv major pentru flexibilitatea și longevitatea standardului MIDI. Acestea permit producătorilor sa creeze mesaje proprietare care asigură controlul asupra echipamentelor într-un mod care este mai profund decât cel prevăzut de mesaje MIDI standard. Mesajele SysEx se adresează unui anumit dispozitiv dintr-un sistem. Fiecare producător are un identificator unic ce este inclus în mesajele sale SysEx, ce asigură faptul că mesajele vor fi recepționate doar de către dispozitivul țintă, și ignorat de toți ceilalți. Multe instrumente includ, de asemenea, un cadru SysEx ID, ce permit ca două dispozitive de același model să fie abordate în mod independent în timp ce sunt conectate la același sistem. Mesajele SysEx pot include funcționalități dincolo de ceea ce prevede standardul MIDI. Acestea vizează un instrument specific, și sunt ignorate de către toate celelalte dispozitive din sistem.[23]

Figură 2 Tipuri de mesaje MIDI [7]

Sisteme de transmisie wireless MIDI au fost disponibile încă din 1980. Mai multe emițătoare disponibile permit transmiterea fără fir de semnale MIDI și OSC prin Wi-Fi și Bluetooth. Dispozitivele iOS sunt capabile să funcționeze precum suprafețele de control MIDI, folosind Wi-Fi și OSC.[29]

O noua versiune a MIDI provizoriu denumita "HD Protocol" sau "High-Definition Protocol" a fost pusa în discuție în 2005, când a fost anunțata ca fiind "HD-MIDI".[30] Acest nou standard oferă compatibilitate completă cu MIDI 1.0 și este destinat să sprijine transferul de mare viteză, permite descoperirea și enumerarea dispozitivelor plug-and-play și oferă o gama de date mai mare. Numerele de canale și controllere vor crește, noi tipuri de evenimente vor fi adăugate și mesajele vor fi simplificate. Câteva exemple de noi tipuri de evenimente ce vor fi acceptate sunt mesaje de tipul „note update” și „Pitch Direct” în cadrul mesajelor de tip nota ce au drept dispozitive tina controller-ele de chitară.[24]

Sintetizarea sunetelor în fișierele MIDI

Pentru un dispozitiv ce poate reda fișiere MIDI, de exemplu o claviatura MIDI sau o placă de sunet, există două posibilități pentru sintetizarea sunetelor:

Wavetable synthesis – sintetizarea cu ajutorul unei tabele de unde

FM – sintetizarea cu modulație de frecvență

Sintetizarea cu modulație de frecvență se realizează folosind operații matematice pe sunete, acestea fiind privite ca simple frecvente sinusoidale. În prima fază operațiile încep cu o frecvență purtătoare, iar apoi aceasta frecvență este modificată într-o frecvență de modulare. De exemplu, se poate aplica o funcție sinus unei alte funcții sinus. Tehnica de sintetizare cu modulație în frecvență (FM) poate sa capteze foarte bine timbrul instrumentelor reale și poate sa creeze sunete noi ce nu aparțin nici unui instrument. Această metodă este utilizată, în preponderență, de plăcile audio.[7]

Cea de-a doua metodă, și anume sintetizarea folosind o tabelă ce conține forme de semnal, are la baza stocarea eșantioanelor de sunet ale unor instrumente reale, utilizând un dispozitiv de eșantionare. Dezavantajul acestei tehnici față de precedenta este acela că este mai costisitoare, însă un avantaj este reprezentat de faptul ca poate stoca mult mai bine timbrul instrumentelor reale, ceea ce înseamnă ca are o mai bună fidelitate.[7]

Acustica muzicală și notații

În notația muzicală vestică sunetele muzicale se numesc tonuri sau tonalități (,,tones”) și sunt caracterizate prin înălțime (,,pitch”), timbru și tărie (,,loudness”). Dacă unui sunet muzical i se adaugă atac (,,onset”) și durată acesta devine notă.

Pentru două note caracterizate de frecventele g și h, aflate la n octave distanță există relația dintre frecvențele corespunzătoare:

Frecvența de 440 Hz este un punct de referință și corespunde notei A. Octava dintre A și A–ul mai înalt este divizată în 12 note: A, A#, B, C, C#, D, D#, E, F, F#, G și G#.

Termenul octavă provine de la faptul că există opt note întregi în acel domeniu. A# este echivalenta cu B flat de exemplu.

Figură 3 Aranjarea notelor pe clapele unui pian [7]

Pentru a putea calcula diferența de frecvență pentru două note succesive, se consideră f1 note de bază și f2 = f1 nota aflată cu o octavă mai sus, între acestea găsindu-se 12 note succesive, la o distanță de un multiplicator x: [7]

Astfel dacă A are frecvența de 440 Hz, A# are o frecventă de 440*1.059463 = 466.16 Hz.

„Notația muzicală se scrie pe o partitură („musical staff”), care are la începutul piesei o cheie („key signature”), indicând care note se interpretează „sharp” și care „flat”.”[7]

Timbrul unui sunet muzical desemnează „culoarea tonului”, fiecare instrument interpretând diferit o anumită notă muzicală. Un instrument pe lângă nota de baza (numită prima armonică) generează sunete cu frecvențele multiplii notei de bază, numite armonici (armonica întâi, armonica a doua, etc), care se combină cu nota de bază.

Percepția sunetului este influențată de rezonanță, care amplifică anumite armonici și diminuează altele, având un efect asupra timbrului instrumentului.

La emiterea unei note muzicale se disting etapele ce formează anvelopa de amplitudine:

Etapa de atac sau ,,attack” ce începe din momentul emiterii notei până când aceasta atinge amplitudinea maximă[7]

Etapa de cădere sau ,,decay” ce constă în scădere ușoară în amplitudine după atac[7]

Etapa de susținere sau ,,sustain” ce reprezintă timpul în care vibrația sunetului se menține la o amplitudine mare [7]

Etapa de eliberare sau ,,release” ce reprezintă oprirea sunetului înainte de stingerea sa naturală[7]

Figură 4 Etapele formând anvelopa de amplitudine

Software pentru prelucrare audio

„Printre cele mai utilizate programe de prelucrare audio sunt: Digidesign Pro Tools (Mac sau Windows), Adobe Audition (Windows), Apple Logic (Mac), Sony Sound Forge (Windows) și Nuendo (Mac sau Windows). Cakewalk Music Creator și Cakewalk Sonar sunt pachete software combinate pentru prelucrare audio / MIDI.”[7]

„Propellerhead Reason (Mac sau Windows) este un pachet sofisticat audio / MIDI furnizând un secvențiator, mașina de tobe și o varietate largă de sintetizatoare. Acid Pro este un instrument pentru creația de muzică. Max/MSP (Mac sau Windows) este un mediu de dezvoltare pentru muzica interactiva și prelucrare audio.”[7]

„Există de asemenea o serie de freeware, shareware și instrumente comerciale pentru Linux: DAP, MixViews, ReZound, Slab, JoKosher, KWave, Brahms, Jazz++, TiMidity++, Playmidi, BladeEnc, și aRts. Audacity este un program open source pentru Mac, Windows și Linux.”[7]

Caracteristicile principale pe care un software de prelucrare audio trebuie sa le aibă sunt: [7]

import și salvare fișiere audio într-o varietate de formate.

interfața pentru înregistrarea și redarea de sunete;

vizualizarea formei de undă, permițând editarea până la nivelul de eșantion;

editoare multi-track;

instrumente de restaurare audio pentru înlăturarea șuieraturilor, click-urilor, pocniturilor și a zgomotului de fond;

abilitatea de preluare de intrări sau furnizare de ieșiri de la canale multiple;

efecte speciale „reverb”, „panning”, „flange”;

controale pentru egalizarea și ajustarea volumului și intervalului dinamic;

filtre de frecventă;

gestionarea formatului MIDI alături de date audio digitale și integrarea într-un singur fișier audio;

înregistrarea de eșantioane și adăugarea la banca de pachete MIDI;

codec-uri de compresie.

Audacity

Audacity este un program open-source, gratuit, utilizat pentru înregistrarea și administrarea fișierelor audio. Oferă suport pentru majoritatea formatelor audio și permite să mixarea, tăierea și filtrarea materialele audio, pentru a le optimiza și a crea propriile piese. Acest software este foarte popular printre entuziaștii din acest domeniu, acest lucru fiind marcat prin numărul de descărcări ale acestuia până în momentul de față: 80 de milioane, dar și prin câștigarea premiului ce cel mai bun proiect multimedia în anul 2007 și 2009, premiu acordat de comunitatea utilizatorilor ai site-ului SourceForge.[11]

Câteva caracteristici ale aplicației Audacity:

Importarea și exportarea fișierelor de tipul WAV, AIFF, MP3, Ogg Vorbis și a tuturor formatelor audio suportate de biblioteca libsndfile. Începând cu versiunea 1.3.6 a fost adăugat suportul pentru WMA, AAC, AMR și AC3, acest lucru fiind posibil prin utilizarea librăriei FFmpeg

Înregistrarea și redarea sunetelor

Copierea, tăierea și lipirea în cadrul unui fișier a fragmentelor din cadrul sau

Mixarea mai multor track-uri

Aplicare unui număr variat de efecte predefinite, însă oferă și posibilitatea de dezvoltare a unor efecte proprietare prin intermediul limbajului Lisp

Reducerea zgomotului pe baza de prelevare de probe de zgomot astfel încât acestea să fie reduse la minimum

Suport pentru modurile multi-canal, cu rate de eșantionare de până la 96 kHz cu 32 biți pe eșantion

Aplicație cross-platform, Audacity poate fi utilizat pe Windows, Mac OS X și distribuții de Linux

Convertirea casetelor audio și video la format digital

Limitările aplicației Audacity sunt următoarele:

Audacity suporta plug-în-uri VST pentru efecte audio doar pe 32 de biți

Nu oferă control dinamic al egalizatorului și efecte în timp real

Fișierele MIDI pot fi doar arătate nu și redate

Nu oferă suport nativ pentru formatele WMA, AAC, AC3 etc., pentru a putea manipula astfel de fișiere trebuie importată librăria FFmpeg

Nu oferă informații despre spațiul disponibil pe disc și astfel dacă nu există spațiu suficient fișierul audio va fi corupt

Adobe Audition

Adobe Audition a început ca un editor simplu numit Cool Edit Pro. Acest software este un studio de înregistrări multi-track ce oferă o gamă largă de utilități, însă dacă utilizatorul nu are suficientă experiență în editare audio acesta va ajunge să se lovească destul de des de multitudinea de termeni tehnici utilizați.[14]

Interfața aplicației este una ușor de utilizat, cu fereastra activă evidențiată printr-un contur roșu. Fiecare fereastră este separată de celelalte prin intermediul file pentru a se putea păstra secțiunile fișier, efecte, fereastra principala și mixer ușor de accesat.[14]

Pentru a putea beneficia de tot ce oferă Adobe Audition este nevoie de un suport hardware destul de bun, iar suportul pentru fișierele MIDI este destul de limitat, astfel forte mulți utilizatori se plâng de acest lucru și de faptul ca este foarte greu de configurat.[14]

Există patru moduri principale în cadrul Adobe Audition:

Waveform Display – ce afișează unda audio într-un format grafic

Spectral Frequency Display – ce afișează intervalul de frecventă

Logaritmic Display – oferă aceeași funcționalitate ca Spectal Frequency Display însă afișează unda ca pe o funcție logaritmică

Spectral Pan Display și Spectral Phase Display – permit sincronizarea sunetelor stereo

Adobe Audition este un program avansat, gândit doar pentru cei ce doresc un utilitar profesionist pentru producția audio multi-track. Dacă se dorește un editor de sunet simplu, atunci acesta este mult prea avansat. Dacă, totuși, doriți să faceți primii pași în editarea profesională, ghidul cuprinzător de utilizare Adobe vă va ajuta să obțineți cât mai mult prin intermediul acestui program complex și puternic.[14]

Câteva argumente pro:

Suport editare multi-track

Suportă editarea sunetelor surround nativ 5.1

Permite editarea frecvențelor

Câteva argumente contra:

Proces lung de instalare

Nu are instrumente de inscripționare CD

Nu există suport foarte mare pentru fișiere MIDI

Suport teoretic, tehnologii și proiecte third-party utilizate

Transformata Fourier rapidă

Transformata Fourier este o metodă folosită pentru descompunerea unui semnal în frecvențele componente, iar unele versiuni ale acestei metode sunt utilizate la generarea și filtrarea transmisiilor telefoniei celulare sau Wi-Fi, video sau imagini astfel încât ele să ocupe mai puțină lățime de bandă sau la rezolvarea ecuațiilor diferențiale. Este atât de notorie, încât „nu studiezi Transformata Fourier pentru ceea ce este”, spune Laurent Demanet, profesor asistent de Matematici Aplicate la MIT. „Urmezi un curs de procesare a semnalelor, iar transformata este în el. Nu poți face nici o alegere.” [1]

Transformata Fourier este cunoscuta sub trei forme: obișnuita și vechea transformată Fourier, seriile Fourier și transformata Fourier discretă. Dintre acestea, Transformata Fourier Discretă (DFT – Discrete Fourier Transform) este cea care a ajutat la reînvierea numelui Fourier. În 1965, informaticienii James Cooley și John Tukey au descris un algoritm denumit Transformata Fourier Rapidă (FFT – Fast Fourier Transform), prin intermediul căruia calcularea DFT-urilor cu un calculator devine mai ușoară. [1]

Figură 5 Însumarea a trei frecvente discrete[1]

Pentru a putea înțelege mai bine cum funcționează transformata DFT, putem considera un player MP3 conectat la un difuzor. Player-ul MP3 va trimite difuzorului date audio sub forma de fluctuații ale voltajului unui semnal electric. Membrana difuzorului este făcută să vibreze de către fluctuațiile prezentate anterior. În timp, fluctuațiile unui semnal audio se pot reprezenta sub forma unui grafic ce are pe axa X timpul, iar axa Y reprezintă voltajul semnalelor electrice. Indiferent de modul în care axele vor fi alese, semnalul va arăta ca niște unde aleatoare. Dacă se reușește colectarea a cât mai multor puncte, se poate realiza o reproducere rezonabilă a semnalului continuu: un exemplu, în acest sens, este dat de către înregistrarea audio digitală de calitate superioară ce colectează 44100 de eșantioane pe secunda.

Transformata DFT are un comportament asemănător cu cel al urechii umane din punct de vede fizic și anume descompune matematic semnalul în frecvențele componente. Spre deosebire de semnalele analogice redate, de exemplu, de către un reportofon, semnalele digitale ale unui player MP3 sunt serii de numere, fiecare număr reprezentând un punct din undă.

Datorită conceptului de bază al frecvenței, aplicațiile practice ale transformatei Fourier sunt foarte multe, acestea sunt în număr tot mai mare și acest număr crește constant deoarece există metode eficiente, din punct de vedere al costului, ce calculează transformata Fourier.

Există trei tipuri generale de aplicații pe baza transformatei Fourier:

Aplicații bazate pe calcule numerice – majoritatea aplicațiilor ce au la bază analiza spectrului necesită o evaluare directă a transformatei Fourier. Aceste aplicații sunt bazate pe calcule numerice deoarece transformata Fourier este o expresie matematică. Exemplele pentru acest tip de aplicație cuprind aplicații de analiză a spectrului instrumentelor de laborator și al echipamentelor audio profesionale până la estimarea vitezei la radar. De subliniat faptul că în aplicațiile bazate pe calcule numerice, acuratețea acestor calcule este vitală pentru performanța întregului sistem. De exemplu, aplicațiile audio ce necesită o calitate superioară a sunetului au nevoie de cel puțin 16 biți pentru a putea elimina distorsiunile audio.

Aplicații de recunoaștere – multe probleme implică detectarea și recunoașterea unui model spectral predefinit sau a unui semnal cu un anumit conținut de frecvență. Un exemplu pentru un asemenea model este vorbitul, ce consta în secvențe de sunete ce au caracteristice specifice ale frecvenței. Rapiditatea procesului de conversie este foarte importantă deoarece trebuie să existe timp suficient pentru aplicarea restului de tehnici de analiză și recunoaștere.

Aplicații pe bază de convoluție – reprezintă a treia clasa de aplicații ce folosesc transformata Fourier și au la bază transformarea acesteia ca pe un sistem matematic foarte simplu pentru a realiza o filtrare generală într-o maniera cât mai eficientă. Proprietatea ce stă la baza acestui concept este aceea ca o convoluție dintre două semnale este egală cu produsul transformatelor Fourier a celor două semnale. Numărul de calcule pentru transformarea Fourier directă, inversă și pentru filtrarea în domeniul frecvenței poate fi mai mic decât pentru convoluție mai ales pentru filtre cu funcții de transfer simple (trece banda, trece jos etc.) unde înmulțirea în domeniul frecventei poate fi înlocuită cu o simplă operație de mascare care elimină benzile de oprire (spectrul ieșirii este 0) și lasă spectrul semnalului de intrare în benzile de trecere nemodificat [2].

Procesarea semnalelor audio

Pentru a putea considera un semnal ca fiind audio, acesta trebuie sa aibă spectrul cuprins în intervalului 10-20Hz … 20-25kHz deoarece acestea sunt percepute de către urechea umană atunci când sunt sub forma de variații ale presiunii aerului. Semnalul audio poate face parte din doua categorii:

Vocal

Muzical

Semnalul ce face parte din prima categorie, și anume semnalul vocal, are spectrul extins de la 20-40Hz la 8-10kHz. Pe baza unor eșantioane de vorbire s-au obținut curbe ale densității spectrale de putere, reprezentata prin figura 2.2, astfel constatându-se faptul că cea mai mare parte din energie este concentrată într-un interval relativ mic de frecvențe și anume 300 – 2000Hz. În schimb timbrul, componentă a vorbirii ce o face identificabilă, este determinat de frecvente ceva mai mari 3 – 4kHz. [25]

Semnalul muzical are spectrul extins de la sub 20-40Hz la peste 20kHz.

Figură 6 Densitatea spectrala de putere a semnalului vocal[25]

Prelucrarea semnalului audio, denumită uneori și procesarea semnalelor audio, este modificarea intenționată a semnalelor auditive, sau a sunetelor, printr-un efect sau efecte unitate audio. Semnalele audio pot fi reprezentate fie in fie format digital sau analogic, iar prelucrarea acestora poate fi făcută indiferent de metoda de reprezentare.[25]

Câteva exemple de efecte audio:

Echo – pentru a simula efectul de reverberație într-o sală mare sau cavernă, unul sau mai multe semnale întârziate sunt adăugate la semnalul original. Să fie perceput ca ecou, întârzierea trebuie să fie mai mare sau egală cu 35 milisecunde. [15]

Flager – pentru a crea un sunet neobișnuit, se adaugă un semnal întârziat semnalului original cu o întârziere cu variație continuă (de obicei mai mică de 10 ms). Acest efect este acum realizat electronic cu ajutorul DSP, dar inițial acesta a fost creat prin redarea sincrona a aceleași înregistrări, iar apoi amestecarea semnalelor.[15]

Chorus – un semnal întârziat se adaugă la semnalul original cu o întârziere constantă. Semnalul întârziat trebuie să fie scurt, pentru a nu fi perceput ca ecou, dar mai presus de 5 ms pentru a fi auzit. Dacă întârzierea este prea scurtă, atunci semnalele întârziate vor interfera între ele și astfel se va ajunge la efectul de flager.[15]

Pitch Shift – acest efect modifică pitch-ul translatând semnalul mai sus sau mai jos. De exemplu, un semnal poate fi deplasat cu o octavă în sus sau în jos. Aceasta se aplică de obicei întregului semnal, și nu la fiecare notă separat. [15]

Robotic voice effects – sunt folosite pentru a face ca vocea unui actor sa para ca o voce sintetizată. [15]

Time Streaching – componenta a Pitch Shift care reprezintă procesul de schimbarea vitezei unui semnal audio, fără a afecta pitch-ul acestuia. [15]

Prezentare generală a limbajului Python

Limbajul Python este un limbaj de programare dinamic multi-paradigma, creat în 1989 de către Guildo van Rossum, acesta fiind, și în ziua de astăzi, un lider al comunității de dezvoltatori care lucrează la implementarea de bază și perfecționare a limbajului. Acest limbaj multifuncțional este folosit de către companii foarte mari, precum Google sau Yahoo! pentru programarea web, dar există și o serie de aplicații de divertisment sau aplicații științifice ce sunt dezvoltate parțial sau total cu ajutorul Python-ului. Popularitatea tot mai mare, dar și puterea și maleabilitatea limbajului au dus la adoptarea sa ca principal limbaj de programare de tot mai multe companii, acesta fiind un motiv pentru care anumite distribuții de Linux, precum BSD și Mac OS X includ interpretorul CPython din start.[6]

„Limbajul Python pune accentul pe curățenia și simplitatea codului, sintaxa permițându-le programatorilor să dezvolte unele idei și concepte într-o maniera mai clara și mai concisă decât în alte limbaje de programare precum C-ul.”[6] Din punctul de vedere al paradigmei de programare, Python poate servi ca limbaj pentru dezvoltarea de tipul orientare obiect, dar permite și programarea funcțională, imperativă sau procedurală. Administrarea memoriei se face automat prin intermediul unui serviciu de „garbage collector”, iar sistemul de tipizare este dinamic (tipul variabilelor este determinat dinamic de interpretor în funcție de conținutul acestora). Alt avantaj al limbajului Python este dat de existența unui număr mare de biblioteci standard de metode.[6]

Implementarea de referință a Python-ului este scrisă în C și se numește CPyhon. Aceasta implementare este open-source și este administrată de către fundația „Python Software Foundation”.

Limbajele dinamice, precum Python-ul sunt caracterizate prin:

Tipizare dinamică

Au management de memorie automat (garbage collector)

Au un nivel înalt de abstractizare

Sunt interpretate

„Tipul variabilelor nu este fixat în momentul declarării acestora, ci este determinat de interpretor după conținutul lor sau după operațiile efectuate, acest element determinând caracterul de tipizare dinamică al limbajului.”[6]

În ciuda tipizării dinamice, limbajul Python este puternic tipizat, ceea ce înseamnă că interpretorul nu permite operații cu obiecte de tip diferit daca acestea nu au fost bine definite anterior. Exista totuși unele excepții logice, precum adunarea sau împărțirea a unui număr întreg cu unul rațional.[6]

Din punctul de vedere al sintaxei, Python are un număr de contracții și cuvinte cheie cunoscute oricărui programator, dar prezintă și un concept unic: nivelul de indentare are semnificație sintactică. Blocurile de cod sunt delimitate prin simplă indentare.[6]

„În C astfel de blocuri sunt deseori desemnate prin acolade, {<cod>}, dar în Python nu este nevoie de astfel de construcții. Nivelele de indentare îndeplinesc această funcție. Această importanță a indentării este foarte surprinzătoare pentru mulți utilizatori noi ai limbajului Python, chiar dacă sunt programatori cu experiență. Dar o astfel de utilizare a indentării permite codului să fie mai ușor de citit și mai compact. Programatorii cu experiență vor indenta implicit codul sursă, oricare ar fi limbajul, fiindcă astfel se permite structurarea codului sursă și evidențierea funcționalității. Python face din această deprindere o cerință strictă”.[6]

Prezentare generală a limbajului C#

C# este un limbaj de programare imperativ, orientat-obiect. Acesta este foarte asemănător cu C++ sau Java, acesta fiind și un motiv pentru care este foarte ușor de învățat.

Limbajul C# are doua tipuri de date: tipuri valoare și tipuri referință. Tipurile valoare includ tipurile de bază (precum char, int, float), tipurile enumerare și de tip structură și au ca principale caracteristici faptul că ele conțin datele referite și sunt alocate pe stivă sau inline într-o structură. Tipurile referință includ tipurile clasă, interfața, delegat și tablou, toate având proprietatea că variabilele de acest tip stochează referințele către obiectele conținute. Un lucru important de remarcat este faptul că toate tipurile de date sunt derivate, direct sau nu, din tipul System.Object, punându-se astfel la dispoziție un mod unitar de tratare a lor. [3]

C# conține un set predefinit de tipuri pentru care nu este necesar referirea unui spațiu de nume prin directiva „using” sau calificare completă: string, tipuri întregi cu semn și fără semn, object, tipuri numerice în virgulă mobila, tip boolean sau zecimal.

Tipul String se folosește pentru a putea manipula șirurile de caractere codificate Unicode, iar conținutul acestor obiecte (string) nu se poate modifica (un string este immutable). Clasa Object este rădăcină a ierarhiei de clase, iar acest lucru înseamnă că orice variabila (inclusiv un tip de valoare) poate fi convertit la el.

Tipul Boolean poate fi folosit pentru a reprezenta valorile logice de adevărat sau fals. Char este un tip reprezentat pe 16 biți și conține informații despre caracterele Unicode. Tipul decimal este folosit pentru calcule în care erorile determinate de reprezentarea în virgula mobilă sunt inacceptabile, el punând la dispoziție 28 de cifre zecimale semnificative. [3]

Figură 7 Tabel cu tipuri specifice

XAML

XAML (Extensible Markup Language Application) este un limbaj declarativ prin intermediul căruia se pot inițializa obiecte și se pot seta proprietăți ale acestora, folosindu-se o structură de limbaj care arată relațiile ierarhice între mai mult obiecte și, folosind o convenție tip de suport care acceptă extinderea tipurilor. Se pot crea elemente de UI vizibile în marcaje XAML declarative. Se pot folosi clase create în C# separat pentru a răspunde la evenimente și manipula obiectele care au fost declarate prin intermediul XAML. Limbajul XMAL sprijină schimbul de surse între diferite instrumente și roluri în procesul de dezvoltare, fără pierderi de informații, precum schimbul de surse XAML între Visual Studio și Microsoft Expression Blend. [5]

Fișierele XAML sunt fișiere XML a căror extensie este, de obicei, XAML. Exemplu următor prezintă conținutul unui fișier XAML.

LINQ ( Language Integrated Query)

LINQ sau Language Integrated Query permite interogarea unor colecții de date folosind o sintaxă integrată în platforma .NET. Se pot interoga, prin intermediul unor operatori, următoarele forme de colecții: clase enumerabile, colecții, documente XML, vectori, liste, baza de date relaționale. Datele rezultate sunt interpretate ca pe niște obiecte asupra cărora are loc o mapare a unor date neobiectuale într-un format ușor de folosit în limbajele obiectuale din cadrul platformei.[3]

LINQ a fost introdus pentru prima dată în versiunea 3.5 .NET Framework și consta într-un set de tool-uri ce pot fi folosite pentru manipularea datelor. Acesta este alcătuit din:

LINQ to Objects – se folosește pentru aducerea datelor din colecții ce implementează interfața IEnumerable<T>;

LINQ to XML – se folosește pentru convertirea documentelor XML la o colecție de obiecte de tipul XElement;

LINQ to SQL – acesta permite conversia interogărilor LINQ la comenzi SQL;

LINQ to DataSets – comparativ cu LINQ to SQL ce a avut inițial doar suport pentru SQL Server, acesta folosește ADO.NET pentru comunicarea cu baza de date;

LINQ to Entities – este o soluție de tipul Object/Relational Mapping oferită de către Microsoft ce permite utilizarea Entities pentru a specifica declarativ structura obiectelor ce modelează domeniul și folosește LINQ pentru interogare;[3]

LINQ este folosit pentru avantajele pe care le aduce, precum:

Nepotrivirea paradigmelor obiectual-relaționale;

Reducerea codului stufos, greu se înțeles, ce este folosit pentru accesarea în modul clasic a datelor din cadrul unei colecții de obiecte;

Figură 8 Diverși operatori LINQ

Biblioteca NAudio

NAudio este o biblioteca open-source pentru procesarea fișierelor audio dezvoltată în .NET cu ajutorul limbajului C# ce conține zeci de clase audio utile, menite să accelereze dezvoltarea de noi tool-uri audio complexe în .NET.[8]

NAudio a fost creat, deoarece Framework Class Library livrat împreună cu .NET 1.0 nu a avut suport pentru redarea fișierelor audio. Namespace-ul System.Media introdus în .NET 2.0 furniza o cantitate mică de sprijin, precum și Media Element în Windows Presentation Foundation și Silverlight au îmbunătățit mai departe acest aspect. Viziunea din spatele bibliotecii NAudio este aceea de a oferi un set complet de clase audio legate între ele ce permit o dezvoltare mai ușurară de utilitare ce pot reda sau înregistra audio, sau manipula fișiere audio într-un anumit fel.[8]

Caracteristici NAudio:

Redare audio folosind o varietate de API-uri:

WaveOut

DirectSound

ASIO

WASAPI

Citirea fișierelor audio având diferite formate:

WAV

AIFF

WMA

Fișiere de tipul SpoundFont

Decodarea mai multe tipuri populare de compresie audio:

MP3

ADPCM

G.722

G.711

WMA, AAC, MP4

Conversia între diferite forme de audio necomprimate:

Modifică numărul de canale – de la mono la stereo și invers

Modifică bit depth-ul (8, 16, 24, 32)

Reeșantionarea fișierelor audio folosind diverși algoritmi

Codarea fișierelor audio folosind orice codec ACM sau Media Foundation instalat pe calculator:

Crearea fișierelor MP3 pe Windows 8

Crearea fișierelor AAC/MP4 pe Windows 7

Crearea fișierelor WMA

Crearea fișierelor WAV

Mixarea și manipularea fluxurilor audio:

Construirea lanțurilor de semnal

Examinarea nivelurilor de eșantionare în scopul de măsurare sau redare a undelor audio

Trecerea unor blocuri de probe prin FFT pentru măsurare

Întârzierea, buclarea sau estomparea fișierelor audio

Manipularea evenimentelor MIDI:

Citirea și scrierea fișierelor MIDI

Răspunderea la evenimentele MIDI primite

Trimiterea evenimentelor MIDI

Biblioteca SSHClient

Această bibliotecă a fost inspirată de către biblioteca Sharp.SSH, ce a fost portată din Java și care nu a fost susținută de ceva vreme. Această bibliotecă reprezintă o rescriere completă ce folosește .Net 4.0, fără dependențe terțe, folosind paralelism pentru a obține cea mai bună performanță posibilă.[31]

Caracteristici:

Executarea comenzii SSH folosind ambele metode sincrone și asincrone.

Returnează statusul de ieșire și alte informații după ce comanda a fost executată.

Oferă funcționalitate SFTP atât pentru operațiunile sincrone și asincrone.

Oferă funcționalitate SCP.

Oferă raport de stare pentru încărcare și descărcare operațiilor SFTP pentru a permite existența unei barări de progres exacte.

Port forwarding de la distanță, dinamic și local.

Implementarea Shell / Terminal.

Utilizarea mai multe fișiere cheie pentru autentificarea.

Suporta cheie publică, parolă și metode de autentificare, tastatură interactivă.

Suporta cheia privata RSA și DSA.

Proiectul MIDI Sheet Music

MIDI Sheet Music este un program open-source ce poate reda fișiere de tipul MIDI în timp ce afișează notele de pian pe o partitură ce poate fi exportată în formatul PDF. Acest proiect este format din două componente:[10]

Partea de interfață, dezvoltată utilizând WPF, în cadrul căreia informațiile despre fișierul MIDI sunt afișate, informații precum:

Numărul de track-uri

Tonalitatea melodiei

Măsura melodiei

Partea de procesarea a fișierelor MIDI, dezvoltată în C#, ce poate interpreta evenimente, track-urile și notele din cadrul acestuia

Figură 9 Interfața originală a proiectului „Midi Sheet Music”[10]

Servicii externe

Pentru anumite aspecte legate de conversia fișierelor WAV la MIDI și a fișierelor MIDI de la un am apelat la utilizarea de servicii externe, astfel am creat doua servere de Ubuntu 14.10 pentru fiecare tip de conversie. Cele doua servere sunt reprezentate prin doua mașini virtuale la care aplicația principală se conectează prin intermediul SSH-ului folosind user-ul și parola aferentă fiecărei mașinii.

Fiecare mașina virtuală este configurată individual și conține biblioteci și alte utilitare necesare realizării conversiei pentru care este responsabilă.

Am ales acest tip de arhitectura deoarece suportă un număr mare de conexiuni și, în același timp, nu solicită procesorul clientului, toate procesările realizându-se doar pe partea de server, clientul doar trimițând și primit fișierul corespunzător.

Alte module externe

WaoN

WaoN este un proiect open-source ce realizează o transcriere a unui fișier de intrarea WAV in note, având ca ieșire un fișier MIDI. Acest proiect își propune să ofere inversul procesului realizat de un alt proiect open-source de procesare audio mult mai cunoscut și anume Timidity++.[13]

Proiectul a plecat de la intenția de a detecta armoniile din cântece redat la pian, iar datoria faptului ca nu exista o astfel de aplicație pentru platforma Unix, WaoN a fost dezvoltat.

Acest proiect a fost realizat folosind limbajul C și a fost dezvoltat in FreeBSD și este portabil pe orice distribuție Unix.

Caracteristici:

Citirea fișierelor WAV și conversia lor in fișiere MIDI single track

stdin/stdout pot fi folosite ca fișiere de intrare sau ieșire

Nu exista limite asupra numărului de note la un anumit moment sau a unui număr de note per total

Se pot schimba tonalitățile notelor

P2M

Este un proiect open-source in Python ce permite conversia unui fișier MIDI single track într-un fișier multi-track. Acest lucru este util deoarece scopul lucrării este acela de a obține fișiere de ieșire MIDI multi-track. Apelarea script-ului se face folosind următorii parametrii:

Numele fișierului de intrare

Nota după care se face împărțirea in track-uri, scriptul împarte MIDI-ul single track primit ca argument in doua secțiuni de track-uri in funcție de nota după care se stabilește că se va face separarea

Prezentarea soluției propuse

Prin intermediul acestei lucrări urmăresc să creez o aplicație client-server, extensibilă cu module, capabilă să prelucreze fișiere multimedia având formatul MP3, WAV, MIDI și să aplice modificări acestora. Modificările aduse sunetelor de intrare sunt diverse și pornesc de la simpla adăugare a unui efect audio (echo, high pitch) și ajung până la descompunerea datelor de intrare într-o melodie de tip MIDI multi-track.

Aplicația își propune să ofere utilizatorilor posibilitatea de a reda și edita fișiere audio de tipul MP3, WAV și MIDI. Aplicațiile actuale oferă o gamă mult mai restrânsă de utilități pentru editarea fișierelor MIDI și totodată sunt aplicații monolitice, în care utilizatorul nu poate să intervină în configurarea procesărilor intermediare.

În cadrul acestei aplicații, utilizatorul poate să editeze și fișierele WAV și poate să aleagă modul în care conversia de la WAV la MIDI este făcută, acesta putând alege între un fișier single track sau un fișier multi-track. Aplicația mai oferă și posibilitatea ca fișierul MIDI rezultat să fie filtrat și evenimentele duplicate sau redundate să fie șterse din cadrul acestuia. Totodată aplicația își propune să ofere o arhitectură modulară, cu module existente ușor de schimbat sau cu noi module ușor de integrat, iar acest lucru se realizează prin multitudinea de servicii utilizate, precum conversia fișierelor WAV la MIDI single track sau prin conversia MIDI single track la MIDI multi-track.

Arhitectura aplicației

Figură 10 Schema aplicației

Aplicația prezintă o arhitectură de tipul client-server, după cum poate fi observat și in figura 10, fiecare server fiind responsabil de un anumit serviciu, de exemplu unul dintre servere este responsabil de conversia fișierelor MIDI single track la fișiere MIDI multi track. Am ales acest tip de arhitectură deoarece este ușor costumizabil, orice componentă putând fiind modificată destul de ușor, singura condiție la momentul actual fiind ca noul modul să poată să comunice cu clientul prin intermediul SSH-ului.

După cum reiese și din schema aplicației (figura 10) există două module implementate la momentul actual, primul realizând conversia unui fișier WAV la MIDI, iar al doilea conversia de la single track MIDI la multi track MIDI, dar modul prin care acestea comunică cu clientul este ușor de realizat astfel orice modul noi poate fi adăugat ușor.

Conform cu figura de mai sus, conexiunea dintre client și fiecare server in parte se face prin SSH iar transmisia de fișiere se face prin SCP.

Un exemplu de workflow pentru aplicație ar putea fi: Utilizatorul selectează un fișier WAV ce dorește să îl convertească la MIDI → Aplicația se conectează la serverul responsabil de conversia selectată și trimite fișierul WAV → Server-ul convertește fișierul și îl trimite înapoi către client → Utilizatorul continuă lucrul cu noul fișier MIDI.

Figură 11 Diagrama funcționarii unei componente

Implementarea aplicației

Proiectul a fost dezvoltat în Visual Studio 2013, pe un sistem ce rulează Windows 8.1 și conține module dezvoltate în Python și C în Ubuntu 14.10. Însă, nu există motiv pentru care executabilele, în forma lor curentă nu ar putea fi rulate și pe alte sisteme Windows mai vechi sau pe alte distribuții Linux asemănătoare Ubuntu, precum Kubuntu sau Mint (pentru modulele proprietare Linux). Proiectul folosește biblioteci și structuri de date specifice platformei Windows, așa că nu va putea fi compilat și pe alte platforme.

Fiecare componentă primește un anumit set de parametri specifici operației pe care aceasta trebuie sa o îndeplinească, de exemplu componenta ce transforma fișierul WAV într-un fișier MIDI single track va primi numele fișierului de intrare, în lipsa acestui parametru aplicația va afișa o eroare în care se va atrage atenția asupra acestui fapt.

Aplicația este proiectata astfel încât orice eroare la una din componentele ce o alcătuiesc să fie afișata și mesajul acesteia este destul de explicit astfel încât utilizatorul să poate să deducă ce pas din procesul selectat a întâmpinat o problema.

Aplicația este alcătuită din mai multe module, primul fiind reprezentat de către client ce are două componente independente dezvoltate cu ajutorul C#-ului:

Prima componentă, cea principală, din cadrul căreia utilizatorul poate alege ce fișierele de intrare și metode de procesare dorește să aplice asupra acestora. Câteva exemple de metode ce pot fi apelate din cadrul acestei interfețe:

Redarea, stoparea sau punerea pe pauza a fișierului de intrare

Conversia fișierului de intrare de la formatul MP3 la formatul WAV

Aplicarea unor anumite efecte asupra datelor de intrare (echo, high pitch etc)

Decuparea unei anumite porțiuni din cadrul fișierului

Conversia fișierului din formatul WAV la formatul MIDI single track

Conversia fișierului din formatul MIDI single track la MIDI multi-track

Extragerea vocii dintr-un anumit segment de melodie

Cea de a doua componentă este reprezentată printr-o aplicație separată ce primește ca parametru un fișier MIDI, în funcție de conversia pe care utilizatorul a ales-o, aceasta componentă având posibilitatea de a reda ambele standarde MIDI (single și multi track). În plus mai dispune și de alte caracteristici precum:

Combinarea notelor de pe mai multe track-uri în doua track-uri

Posibilitatea de a ignora un anumit track sau chiar mai multe dacă se dorește

Posibilitatea de a reda un număr variabil de track-uri la diverse instrumente (de exemplu track-ul 1 să fie redat la pian, track-ul 2 la chitara iar track-ul 3 la vioara)

Un al doilea module al aplicației este reprezentat de către un server Ubuntu ce asigură conversia unui fișier WAV la formatul MIDI single track folosindu-se de proiectul open-source WaoN, ce este dezvoltat în C.

Cel de-al treilea modul este reprezentat tot printr-un server Ubuntu 14.10, acesta realizând conversia fișierelor MIDI single track la MIDI multi track. Această conversie este făcută prin intermediul unui proiect open-source dezvoltat în Python.

Ultimul modul realizează filtrarea fișierelor MIDI rezultate în urma procesărilor de către cele două module descrise anterior, acesta fiind dezvoltat în C# și integrat în ce-a dea doua interfață grafică.

Interfața aplicației și funcționalitățile acesteia

După cum am prezentat anterior, aplicația dispune de două interfețe specifice pentru un anumite set de operații pe care utilizatorul dorește să le efectueze pentru anumite tipuri de fișiere de intrare.

Figură 12 Interfața de start a aplicației

Funcționalități oferite de către interfața de start a aplicației:

Adăugarea unui fișier de intrare (tipuri acceptate sunt MP3, WAV și MIDI), acestea putând fi adăugat fie prin intermediul butonului ,,Add new sound to list” sau prin simpla acțiune de drag-and-drop a fișierului direct în cadrul aplicației.

Posibilitatea de convertire a unui fișier MP3 la WAV folosind butonul ,,Convert MP3 to WAV”.

Concatenarea a mai multor fișiere WAV selectate într-un singur fișier folosind butonul de ,,Concatenate songs”.

Redarea, oprirea sau pauzarea unui fișier WAV folosind butoanele ,,Play”, ,,Pause”, ,,Stop”. Dacă fișierul selectat este MP3 atunci aplicația convertește automat fișierul la formatul WAV și redă fișierul rezultat introducându-l automat în lista de redare.

Posibilitatea de a vedea informații despre fișierele adăugate în cadrul aplicației, acestea fiind afișate în lista de redare și conține: numele fișierului, dimensiunea ocupată pe disc a acestuia, tipul-ul fișierului, calea către fișier, index-ul în cadrul fișierului și numărul rândului din cadrul listei pe care fișierul apare.

Înregistrarea unui sunet prin intermediul microfonului integrat sau a unuia conectat prin intermediul unui jack. Pentru a putea înregistra un sunet, utilizatorul trebuie mai întâi să selecteze din listă de device-uri afișate pe acela prin intermediul căruia se va face înregistrarea. Dacă device-ul ales nu poate fi folosit pentru înregistrarea de sunete atunci o eroare va fi afișată. După ce s-a ales un device bun, utilizatorul va apăsa pe butonul ,,Record”, iar înregistrarea va începe, fapt semnalat și de schimbarea fundalului acestui buton din gri în roșu. Pentru oprirea procesului trebuie apăsat ,,Stop Recording” iar sunetul înregistrat va fi adăugat automat la lista de redare.

Posibilitatea de aplicare a unui efect asupra fișierului de intrare. Aceste efecte sunt selectate din lista disponibilă din dreapta butonului de stop. Efectele disponibile sunt: Echo, FlageBaby, Delay, SuperPitch, Tremolo, EventHorizon, Chorus.

Observarea minutului, secundei și milisecundei la care a ajuns redarea sunetului selectat .

Crearea un fișier MIDI single track pornind de la un fișier WAV selectat, această acțiune constă în trimiterea fișierului WAV către un server unde are loc procesarea și primirea de către client a rezultatului și deschiderea automată a celei de a doua interfață ce permite manipularea fișierelor MIDI.

Crearea un fișier MIDI multi-track folosind aceeași metodă ca cea anterioară însă se va folosi alt server.

Posibilitatea de a vedea forma de undă a fișierului WAV ce este redat.

Posibilitatea de a vizualiza spectrul fișierului WAV redat.

Tăierea unei anumite porțiuni din cadrul fișierului WAV ce este redat, această acțiune fiind posibilă prin selectarea unei porțiuni de melodie din cadrul frame-ului ce afișează forma undei acestui și după apăsarea butonului de ,,Cut section”.

Posibilitatea de modificare a volumului fișierului redat prin intermediul slider-ului vertical din partea dreapta a butonului ,,Cut section”. Partea de jos a slider-ului reprezintă valoare 0% iar cea superioară 100%.

Parcurgerea unui fișier prin intermediul slider-ului orizontal situat deasupra butonului de redare sau prin intermediul mutării barei galbene ce apare în cadrul frame-ului formei de unde.

Alte funcționalități includ trecerea la următorul sunet din listă, în cazul în care acesta mai există, sau redarea aceluiași fișier. O altă funcționalitate este aceea de extragere a vocii dintr-un fișier selectat.

Figură 13 Interfața aplicației de procesare a fișierelor MIDI (interfață aparținând proiectului „Midi Sheet Music” dar modificată ulterior)

Cea de a doua interfață grafică a proiectului a fost modificată față de cea originală pusă la dispoziție de către proiectul open-source „Midi Sheet Music”, modificările aduse constând în:

Eliminarea unor funcționalități precum controlul volumului și a vitezei cu care melodia MIDI era redată deoarece acestea nu funcționau corespunzător datorită discrepanței dintre sistemul de operare pe care proiectul a fost inițial dezvoltat și actualul sistem pe care este rulat.

Adăugarea unui nou buton prin care utilizatorul poate să aleagă folosirea algoritmului de filtrare al fișierului de intrare ales de către utilizator

Interfața aplicației de procesare a fișierelor MIDI dispune de următoarele funcționalități:

Redarea, pauzarea și oprirea unui fișier MIDI redat.

Afișarea notelor ce compun melodia MIDI în cadrul unui portativ, acestea putând fi afișate toate într-un singur track corespunzător gamei, sau separate în track-uri ce aparțin aceleași game.

Redare track-urilor folosind instrumente diferite, în același timp, precum pian, chitară, vioară, flaut etc.

Afișarea notei ce trebuie apăsată în cadrul unei claviaturi de pian.

Posibilitatea de aplicarea unui filtru asupra fișierului MIDI ce este redat, acest filtru eliminând evenimentele MIDI ce sunt duplicate sau a celor care nu aduc un plus de calitate melodie, apărea butonului de ,,Apply filter to song” deschizând o nouă instanță a aplicației cu melodia rezultată, astfel având posibilitatea de comparare a celor două.

Filtrarea evenimentelor MIDI

În scopul de a evidenția extensibilitatea aplicației am implementat următorul modul, prin care am realizat filtrarea evenimentelor MIDI, astfel realizând crearea unui fișier MIDI de o calitate mai bună.

În urma procesărilor pe care fișierele de intrare la suferă, conversia de la WAV la MIDI single track și de la MIDI single track la MIDI multi-track, calitatea acestora se depreciază și astfel aceste fișiere rezultate trebuie trecute printr-o serie de filtre pentru a putea îmbunătăți output-ul.

Utilizatorul poate să aleagă să efectueze această operație prin apăsarea butonului de ,,Apply filter to song”.

Algoritmul ce stă la baza filtrări evenimentelor din cadrul fișierului MIDI, primit ca argument de intrare, efectuează următoarele etape asupra acestuia:

In cazul în care fișierul de intrare conține mai multe track-uri atunci acestea sunt parcurse, iar cele ce au mai puțin de 30 de evenimente legate de note (note-on, note-off etc.) sunt ignorate deoarece acestea nu aduc nici un plus fișierului de ieșire, ci doar au informații redundante sau duplicate ce pot fi eliminate pentru a putea obține o îmbunătățire a output-ului. În urma acestei etape s-a obținut un număr de track-uri cu până la 60% mai mic decât cel inițial.

Eliminarea evenimentelor duplicate dintr-un anumite interval de timp dintr-un track, indiferent ce tipul fișierului MIDI (single sau multi track). Din cauza faptului că executabilul folosit pentru crearea fișierului MIDI single track, ce este folosit indiferent de tipul de MIDI rezultat dorit, are mici imperfecțiuni și generează evenimente duplicate într-un anumit interval de timp, acestea trebuie eliminate deoarece depreciază output-ul procesului de conversie de la WAV la MIDI. Această eliminare a evenimentelor este făcută prin parcurgerea independentă a fiecărui track și verificarea dacă evenimentul actual este identic cu un alt eveniment dintr-un interval prestabilit, această comparație luând în considerare mai mulți parametrii precum id-ul evenimentului, numărul notei. Intervalul, în momentul de față, este setat la 20 de milisecunde, această valoarea fiind aleasă în urma testării efectuate pe mai multe fișiere de intrare și stabilindu-i-se astfel o valoare cu un rezultat cât mai favorabil. În urma acestei procesării s-a observat o reducere a numărului de evenimente de până la 10%, această valoare depinzând de numărul total de evenimente ale fișierului și de intervalul de timp ales.

O a treia etapă din cadrul algoritmului de filtrare al evenimentelor MIDI constă în eliminarea evenimentelor duplicate din cadrul mai multor track-uri simultan. Această etapă este realizată prin parcurgerea simultană a tuturor evenimentelor și track-urilor, rămase în urmă procesărilor anterioare, și compararea unui eveniment de la o anumită poziție cu toate celelalte de pe aceeași poziție și eliminarea duplicatelor. Această etapă reduce, conform testelor efectuate asupra diferitelor fișiere de intrare, maxim 5% din evenimentele rămase în urma procesărilor anterioare.

Un ultim pas al algoritmului de filtrare este reprezentat prin calcularea unui ,,velocity” mediu și compararea tuturor evenimentelor rămase cu acesta valoare, iar evenimentele ce au un ,,velocity”-ul mai mare decât dublul valorii medii sunt eliminate deoarece acest lucru relevă faptul că acele evenimente pot afecta tempoul melodiei.

Validarea și Testarea Aplicației

Orice software are o etapa foarte importanta in procesul de dezvoltarea, și anume testarea. Aceasta are o importanță crescută mai ales pentru un sistem complex ce este alcătuit din multe componente independente ce trebuie sa conlucreze. Testarea aplicației s-a desfășurat în două mari etape:

Testarea fiecărei componente ce alcătuiește sistemul

Testarea funcționalității aplicației ca ansamblu

Testarea cu cel mai mare consum de timp a fost prima parte, și anume testarea fiecărei componente în parte. Testarea s-a efectuat folosind un număr foarte mare de fișiere de intrare ,diferite între ele, și analizând rezultatele procesărilor făcute de fiecare componenta în parte. În urma acestei etape s-au putut stabili diverși parametrii ce sunt folosiți pentru analiza și procesarea fișierelor audio. Dimensiunea fișierelor a fost variabilă, pornindu-se de la fișiere cu dimensiune de cate sute de KB și ajungând la fișiere de ordinul zecilor de MB. Fișiere de intrare au fost diverse melodii aparținând mai multor genuri muzicale și au inclus cântece pornind de la genul clasic până la cele aparținând genului house.

Odată ce comportamentul componentelor a fost stabilizat, eliminând astfel unele erori detectate in cod, iar performantele au fost optimizate, s-a trecut la următoare etapa a testării.

A doua etapa a testării a avut la baza testarea întregului sistem, privind-ul ca pe un ansamblu, și a comunicație dintre aplicație și serviciile apelate (precum cele doua servere de Ubuntu ce realizează procesarea fișierelor MIDI și WAV). S-a urmărit testarea diferitelor etape de prelucrare, pornind de la cele mai simple precum redarea unui fișier WAV pana la tăierea unui fișier WAV într-o secțiune și trecerea acesteia prin toate etapele procesării: transformarea într-un MIDI single track, transformarea MIDI-ului rezultat din etapa anterioara la un MIDI multi-track, filtrarea acestuia și eliminarea evenimentelor duplicate și evenimentelor ce nu au o relevanta în cadrul fișierului de ieșire, după care redarea notelor include in cadrul acestui fișier. Deoarece aceasta etapa a fost rulata de mai multe ori pe același fișier s-a putut observa cum se comporta aplicația și în cazul unor teste relative simple de stres.

Rezultate

Pentru exemplificarea funcționalității aplicației vom trece un fișier audio prin toate procesele posibile de prelucrare ale acestuia:

Figură 14 Pas 1: Deschiderea serverelor pentru a putea rula diferite servicii

Figură 15 Pas 2: Deschiderea aplicației

Figură 16 Pas 2: Adăugarea unui fișier audio

Figură 17 Redarea unui fișier audio și selectarea unei porțiuni pentru decupare

Figură 18 Pas 4: Deschiderea unui fișier MIDI multi-track

Figură 19 Pas 5: Aplicarea algoritmului de filtrare și compararea rezultatelor

Comparație cu alte sisteme

În momentul de față există câteva site-uri ce permit conversia unui fișier audio dintr-un anumit format în altul, însă nu au posibilitatea de a renunța la anumite parți din acesta. Există și aplicații ce oferă posibilitatea de editarea a unui fișier, însă majoritatea au un set limitat de operații ce pot fi efectuate asupra fișierelor de intrare.

De exemplu Audaciy(2.4.1), un proiect open-source, oferă suport pentru majoritatea formatelor audio și permite să mixarea, tăierea și filtrarea materialele audio, pentru a le optimiza și a crea propriile piese, însă nu propune o arhitectură modulară, ușor de modificat, și totodată procesarea fișierelor MIDI folosind acest proiect open-source este foarte limitată, acestea putând fi doar arătate nu și redate.

O altă aplicație asemănătoare, Adobe Audition (2.4.2), ce este un studio de înregistrări multi-track ce oferă o gamă largă de utilități, însă dacă utilizatorul nu are suficientă experiență în editare audio acesta va ajunge să se lovească destul de des de multitudinea de termeni tehnici utilizați, însă la fel ca cel prezentat anterior nu oferă suport foarte mare pentru fișierele MIDI, iar arhitectura nu este modulară.

Dezvoltări viitoare

Aplicația se pretează extinderii datoria arhitecturii alese și a structurii modulare, iar multe module cu funcționalități asemănătoare reprezintă probabil o mai buna cale către dezvoltarea sistemului.

Un prim pas ar putea fi înlocuirea executabilului WaoN cu un altul proprietar sau un altul asemănător deoarece fișierul de ieșire este apropiat de cel de intrare, dar tot mai conține anumite imperfecțiuni, iar pentru anumite tipuri de fișiere primit ca date te intrare, output-ul este destul de diferit de input, acest lucru este datorat discrepantei dintre cele doua tipuri de date, WAV și MIDI, ceea ce duce la apariția unor evenimente și note în structura fișierului MIDI ce duc la scăderea calității acestui și la coruperea datelor de ieșire.

Un alt modul ce poate fi îmbunătățit este acela ce translatează fișierul MIDI single track la multi-track, acesta putând fi rescris într-un limbaj mult mai rapid, și ce oferă o mai buna manipulare a fișierelor de intrare.

O alta modificare ar putea consta în gruparea celor doua proiecte pe partea grafica într-unul singur, acest aspect având un impact considerabil asupra vitezei, modului de utilizare și a memoriei folosite de către proiect. Un alt beneficiu al acestei modificări ar putea fi o mai ușoara administrare a codului.

Pe baza modificării anterior precizate, ar putea fi creata o noua interfața grafică, ce ar putea ușura modul în care utilizatorii interacționează cu aplicația.

Cea mai importantă modificare ar consta însă în migrarea backend-ului într-un alt limbaj de programare astfel încât sa permită rularea aplicație pe o gama mult mai mare de dispozitive, un limbaj adecvat ar putea fi Java ce ar putea permite rularea aplicației pe Windows, Linux și Mac OS x, sau chiar migrarea completa a aplicației către web și astfel transformarea ei într-o interfața web ce poate fi accesată de pe orice device ce are acces la internet. Avantajul unei migrări aplicației la o structura web-based este acela ca mai multi clienți vor putea avea acces la aceasta, iar modul în care a fost implementată permite această modificare deoarece prezintă deja o arhitectura client-server.

Concluzii și evaluarea componentelor

Aplicația creată oferă o gamă largă de utilități folositoare pentru orice persoană, la început de drum, ce este dornică să învețe și să editeze diverse tipuri de fișiere. Comparativ cu o aplicație precum Adobe Audition aceasta nu oferă o gamă atât de largă de efecte și de procesări ale sunetelor, însă oferă un suport foarte bun pentru redarea și printarea conținutului fișierelor MIDI folosind o interfață ușoară și intuitivă.

Algoritmul de filtrare al evenimentelor MIDI oferă un rezultat destul de bun, ajungându-se pentru unele fișiere de intrare la reducerea a chiar 30% a evenimentelor din cadrul acestora și a eliminarea a 60% track-urilor suplimentare, rezultatul fiind reprezentat de către un fișier MIDI de o calitatea mult mai bună și o reprezentare cât mai apropiată de melodia originală.

O evaluare atentă a componentelor, rezultată în urma testări mai aprofundate și a modificării mediului de rulare, a evidențiat următoarele aspecte:

Pentru îmbunătățirea timpului de procesare a fișierelor, trimise către serverele ce fac parte din cadrul aplicației, se poate considera schimbarea sistemelor de operare cu unele și mai robuste, putându-se renunța la interfața grafică a acestora și trecându-se direct la o interfață ce folosește linia de comandă deoarece, în momentul de față, aplicațiile third-party ce se ocupă cu procesarea fișierelor sunt utilitare command-line. Această modificare ar spori viteza de procesare a serverelor deoarece partea de procesare video ar fi extrem de mică și astfel majoritatea puterii de procesare ar fi redirectată către convertirea fișierelor audio dintr-un format în altul. Iar un alt efect al acestei schimbării ar consta în reducerea spațiului ocupat de către servere pe hard disk.

O altă schimbare ce ar putea reduce și mai mult timpul de rulare ar fi aceea de modificare a parametrilor pe care proiectele open-source le primesc în momentul actual, un exemplu concret ar fi în cazul proiectului de trecere de la single track MIDI la multi-track MIDI în care un singur argument poate face diferența dintre generarea unei melodii MIDI cu 10 track-uri sau a uneia cu doar 8 track-uri. O ultimă schimbare ar putea fi reprezentată de către rescrierea proiectelor utilizate în limbaje adecvate procesării audio ceea ce ar conduce la o mai rapidă procesare a fișierelor de intrare.

Pentru creșterea eficienței algoritmului de filtrare al evenimentelor MIDI ar putea fi considerate noi euristicii create pe baza unui număr foarte mare de teste și crearea e unei baze de cunoștință ce ar folosi rezultate testelor și poate chiar se poate recurge la crearea unui modul de inteligență artificială ce ar putea să descopere anumite similitudini între cântece aparținând aceluiași gen și pe baza acestora create euristici specifice numai anumitor categorii de melodii.

Bibliografie

[1]„Ce este transformata Fourier discreta?”, http://www.scientia.ro/stiinta-la-minut/119-concepte-explicate-în-60-de-secunde/3076-ce-este-transformata-fourier-discreta.html, Accesat la <16.06.2015>

[2] Dragoș Vizireanu, Suport de curs pentru „Aplicații ale Proceselor de Semnal în Comunicații”, Curs 7, 2008

[3] Lucian Sasu, „Limbajul C#”, 2009, ISBN 978-973-598-482-3

[4] Larry O’Brien, Bruce Eckel, „Thinking în C#”, Prentice Hall PTR, 2002, ISBN 978-0130385727

[5] George – Daniel Șerbănescu , „Arhitectura kernel-ului sistemului de operare Windows Phone 8. Legătura cu Windows 8”, 2014

[6] „Descriere Python”, http://ro.wikipedia.org/wiki/Python, , Accesat la <10.06.2015>

[7] Francisc Iacob, Suport de curs pentru „Sisteme și tehnici multimedia”, Curs 8, 2015

[8] http://naudio.codeplex.com/documentation, Accesat la <28.05.2015>

[9] http://voicerecorder.codeplex.com/, Accesat la <28.06.2015>

[10] http://midisheetmusic.sourceforge.net/features.html, Accesat la <15.06.2015>

[11] https://en.wikipedia.org/wiki/Audacity_(audio_editor), Accesat la <28.05.2015>

[12] http://www.midi.org/aboutmidi/index.php, Accesat la <15.06.2015>

[13] http://waon.sourceforge.net/#features, Accesat la <10.06.2015>

[14] „Descriere Adobe Audition”, http://adobe-audition.ro.softonic.com, Accesat la <15.06.2015>

[15] „Efecte audio”, https://en.wikipedia.org/wiki/Sound_effect, Accesat la <10.06.2015>

[16] „Dolby Digital”, https://ro.wikipedia.org/wiki/Dolby_Digital, Accesat la <02.06.2015>

[17] Manuela Ioana Istodor, „Formate audio și prelucrarea acestora”, 14 Mai 2014, http://www.scribd.com/doc/55421278/Formate-audio-%C5%9Fi-editoare-pentru-prelucrarea-acestora-Copy#scribd , Accesat la <02.06.2015>

[18] Peter Kabal, „Audio File Format Specifications – WAVE or RIFF WAVE sound file", McGill University, Martie 2010

[19] Huber David Miles, „The MIDI Manual". Carmel, Indiana: SAMS, 1991.

[20] Lau Paul. „Why Still MIDI?." – via HighBeam Research Canadian Musician. Norris-Whitney Communications Inc. 2008. HighBeam Research. 4 Septembrie 2012

[21] Anderton Craig. „MIDI For Guitarists: A Crash Course În MIDI Effects Control". Sound On Sound. SOS Publications. May 1995.

[22] Hass Jeffrey. „Chapter Three: How MIDI works 3". Indiana University Jacobs School of Music. 13 August 2012.

[23] Hass Jeffrey. „Chapter Three: How MIDI works 9". Indiana University Jacobs School of Music. 13 August 2012.

[24] Battino David. „Finally: MIDI 2.0" O'Reilly Digital Media Blog. O'Reilly Media, Inc. 6 Octombrie 2005.

[25] Cristian Năstase, „Manualul inginerului de sunet”, Decembrie 2013

[26] Swift Andrew. „A brief Introduction to MIDI", Imperial College of Science Technology and Medicine. 22 August 2012

[27] Manning Peter. „Electronic and Computer Music”. 1985. Oxford: Oxford University Press, 1994.

[28] Holmes Thom. „Electronic and Experimental Music: Pioneers in Technology and Composition”. New York: Routledge, 2003

[29] Kirn Peter. „Golden Age of Wireless: Korg iOS Sync, Android + MIDI Hardware, Enter Bluetooth MIDI?". createdigitalmusic.com. Accesat la <25.03.2011>

[30] Battino David. „Finally: MIDI 2.0". O'Reilly Digital Media Blog. O'Reilly Media, Inc. 6 October 2005.

[31] https://sshnet.codeplex.com/, Accesat la <28.05.2015>

[32] https://en.wikipedia.org/wiki/MIDI, Accesat la <15.06.2015>

[33] https://ro.wikipedia.org/wiki/Transmisiune_digital%C4%83 , Accesat la <15.06.2015>

[34] Dobrescu Radu: Compresia datelor, Editura Academiei Române, București, 2002

[35] https://ro.wikipedia.org/wiki/Compresie_de_date , Accesat la <15.06.2015>

[36] https://ro.wikipedia.org/wiki/MIDI, Accesat la <15.06.2015>

Similar Posts