Huvitavad töötlemisprogrammeerimise juhised disainerile-meedia laadimine ja sündmus: 13 sammu
Huvitavad töötlemisprogrammeerimise juhised disainerile-meedia laadimine ja sündmus: 13 sammu
Anonim
Huvitavad töötlemisprogrammeerimise juhised disainerile-meedia laadimine ja sündmus
Huvitavad töötlemisprogrammeerimise juhised disainerile-meedia laadimine ja sündmus

Töötlemisel saab laadida palju väliseid andmeid, mille hulgas on väga levinud kolme tüüpi. Need on pilt, heli ja video eraldi.

Selles peatükis räägime sellest, kuidas heli ja videot üksikasjalikult laadida koos sündmustega. Lõpuks saate luua oma muusikaklaviatuuri või muusikapaleti.

Samm: lugege pilti

Enne alustamist vaatame tagasi pildi laadimise meetodile.

2. samm: pildiga seotud funktsioonid

Enne nende funktsioonide kasutamist peame PImage kaudu looma pildiobjekti. Siis saame nende funktsioonide abil määrata igasuguseid pildi omadusi.

Ärge unustage enne programmi käivitamist salvestada oma pildiallikad andmefaili.

3. samm: muusika laadimine, esitamine ja peatamine

Järgnevalt hakkame teile ametlikult muusika esilekutsumist tutvustama. Sarnaselt piltide laadimisega peate alguses kuulutama audioobjekti. Võite viidata allolevale näitele tegeliku grammatika kohta.

Koodinäide (10-1):

[cceN_cpp theme = "dawn"] impordi töötlemine.heli.*;

SoundFile heli;

tühine seadistus () {

suurus (640, 360);

taust (255);

heli = uus SoundFile (see, "1.mp3");

}

tühine viik () {

}

tühi võti Vajutatud () {

// Esita heli

kui (võti == 'p') {

sound.play ();

}

// Peata heli

kui (võti == 's) {

sound.stop ();

}

} [/cceN_cpp]

Ettevalmistus:

Töötlemine ise ei sisalda heliteeki. Peate selle ise alla laadima. Seega, enne koodi kirjutamist tehke parem järgmised ettevalmistused.

Lisage teek töötlemisele. Siin on levinud praktika. Valige menüüribalt "Tööriist"- "Lisa tööriist" ja seejärel minge jaotisse "Teegid". Sisestage teegi võtmesõnad otsinguveergu, et saaksite selle otse alla laadida ja installida.

Kui aga kasutame seda funktsiooni oma kodumaal (Hiinas), ei saa me seda veebi otse ühendades alla laadida. Peame VPN -i käivitama. Isegi kui me seda alustame, valitsevad ebastabiilsed tingimused. Nii et peate olema kannatlik, et seda mitu korda proovida. See on kõige mugavam laadimisviis. Kui te ei saa installida, peate selle ametlikult veebisaidilt käsitsi alla laadima. (https://processing.org/reference/libraries/) Kuna käsitsi installimise meetod on väga keeruline, käsitleme seda teises peatükis.

Kood Exaplain:

Helikogu võib pärast ettevalmistamist korralikult töötada. Tehke ülaltoodud kood, klõpsake nuppu RUN, siis see töötab. Muusika esitamiseks vajutage klahvi "P", muusika peatamiseks "S".

Kui see on programmiga harjunud, peame selle kõigepealt laadima. Alguses peame lisama lause "import processing.sound.*". "import" on võtmesõna, mis tähendab sõna otseses mõttes laadimist. Lisage teegi nimi „impordi” taha, seejärel laaditakse see raamatukogu. Saba järgib tavaliselt märki "*", seega laadib see programmi kõik raamatukoguga seotud klassid ilma neid ükshaaval käsitsi lisamata.

Teises lauses on "SoundFile sound;" kuulutanud audioobjekti. SoundFile sarnaneb PImage'iga.

Funktsiooni seadistuses kasutatakse objekti loomiseks ja selle lugemisraja määratlemiseks "sound = new SoundFile (see," 1.mp3 ");". Siin oleme tegelikult juba hakanud kasutama uut kontseptsiooni Klass. Praegu me seda sügavalt ei aruta. Peame ainult teadma, et see on fikseeritud kirjutamismeetod ja viimane parameeter on muusikaallika aadressi täitmiseks.

KeyPressed () sündmuste hulgas toimivad "sound.play ()" ja "sound.stop ()" suhteliselt mängimise ja seiskamise mõjuna. "". keskel tähistab liikme funktsiooni, mis mängib ja peatab audioobjektid. Liikmefunktsiooni võime käsitleda objekti funktsioonina. See kuulub sellesse objekti, mis on eelnevalt määratletud. Hiljem, kui peame esitama mitut audioobjekti, peame suhtelise muutuja nime taha lisama ainult ".play ()".

Heliallikad tuleb salvestada andmefaili samasse eskiisfaili kataloogi (pde sufiksiga). Kui seda pole, saate selle käsitsi luua.

Ärge unustage kirjutada funktsioonide joonistamist. Kuigi te ei joonistanud ühtegi graafikat, on muusika edukas esitamine vajalik.

Ülaltoodud protseduur tundub üsna keeruline, kuid peate lisama ainult mitu lauset koodi, siis saate esitusfunktsiooni realiseerida. See on väga mugav.

Töötlemine toetab tavalisi helivorminguid nagu mp3, wav, ogg jne.

4. samm: muusika kiiruse reguleerimine

Järgmised näited hakkavad palju huvitavaks muutuma. Töötlemine on pakkunud mõningaid funktsioone, mis võivad muusika esitamise kiirust juhtida. Samal ajal muutuvad toonid muusika esitamise kiirusega. Kui kasutame juhtimiseks hiirt, tekitab see väga psühhedeelse efekti.

Video veebisait:

Koodinäide (10-2):

[cceN_cpp theme = "dawn"] impordi töötlemine.heli.*;

SoundFile heli;

tühine seadistus () {

suurus (640, 360);

taust (255);

heli = uus SoundFile (see, "1.mp3");

}

tühine viik () {

ujuki kiirus = hiirX/(ujuk) laius * 3;

sound.rate (kiirus);

float vol = mouseY/(float) kõrgus * 4;

sound.amp (maht);

}

tühi võti Vajutatud () {

// Esita heli

kui (võti == 'p') {

sound.play ();

}

// Peata heli

kui (võti == 's) {

sound.stop ();

}

} [/cceN_cpp]

Kood Selgitage:

Funktsioon.rate () juhib heli esitamise kiirust. Sulgudes olev väärtus määrab mängimiskiiruse kiire ja aeglase. Kui väärtus on 1, on mängimiskiirus normaalne. Kui see on üle 1, siis kiirendage; kui see on alla 1, siis aeglustage.

Funktsioon.amp () juhib helitugevust. Sulgudes olev väärtus määrab mahu väärtuse. Kui see on 1, on helitugevus normaalne. Kui see on üle 1, suurendage helitugevust; kui see on alla 1, vähendage helitugevust.

Siin oleme laadinud parameetritena kaks kohalikku muutujat kiirus ja maht. Seetõttu muudab hiire horisontaalne koordinaat muusika tooni ja vertikaalne koordinaat muudab muusika helitugevust.

Samm: video esitamine ja peatamine

Töötlemisel on video laadimine sarnane heli laadimisega. Esmalt peate videoteegi alla laadima. (https://processing.org/reference/libraries/video/index.html)

Koodinäide (10-3):

[cceN_cpp theme = "dawn"] impordi töötlemine.video.*;

Film mov;

tühine seadistus () {

suurus (640, 360);

taust (0);

mov = uus film (see, "1.mov");

}

void movieEvent (Filmifilm) {

mov.read ();

}

tühine viik () {

pilt (mov, 0, 0, 640, 360);

}

tühi võti Vajutatud () {

kui (võti == 'p') {

mov.play ();

}

kui (võti == 's) {

mov.stop ();

}

kui (võti == 'd') {

mov.pause ();

}

} [/cceN_cpp]

Video ekraanipilt:

Kood Selgitage:

Videoteegi laadimiseks kasutatakse esimest lauset "import processing.video.*;".

Teist lauset "Movie mov;" kasutatakse videoobjekti deklareerimiseks. Nende hulgas on "Filmi" funktsioon sarnane PImage'iga.

Funktsiooni seadistamisel on "mov = new Movie (see," 1.mov ");" efekt objekti loomine ja selle lugemisraja määratlemine. Viimane parameeter tuleb täita videoallika aadressiga.

Behine'i seadistamine, movieEvent tähistab videosündmust. Seda kasutatakse videoteabe värskendamiseks ja lugemiseks. "mov.read ()" tähendab juhul lugemist.

Funktsioonipilt võib kuvada ka videot, välja arvatud piltide kuvamine. Võime videoobjekti pidada dünaamiliseks pildiks. Esimese parameetrina täidame videoobjekti muutuja nime. Teine ja kolmas parameeter on video abil joonistatud horisontaalne ja vertikaalne koordinaat. Neljas ja viies parameeter määravad videoekraani pikkuse ja laiuse.

Funktsioon.play () tähendab mängimist. Funktsioon.stop () tähendab peatamist ja see lähtestab video. Funktsioon.pause () tähendab pausi. See katkestab praeguse esitamise, mis jätkub seni, kuni funktsioon.play () käivitatakse.

6. samm: video kiiruse reguleerimine

Koodinäide (10-4):

[cceN_cpp theme = "dawn"] impordi töötlemine.video.*;

Film mov;

tühine seadistus () {

suurus (640, 360);

taust (0);

mov = uus film (see, "transit.mov");

}

void movieEvent (Filmifilm) {

mov.read ();

}

tühine viik () {

pilt (mov, 0, 0, laius, kõrgus);

float newSpeed = hiirX/(ujuk) laius * 4;

mov.speed (newSpeed);

}

tühi võti Vajutatud () {

kui (võti == 'p') {

mov.play ();

}

kui (võti == 's) {

mov.stop ();

}

kui (võti == 'd') {

mov.pause ();

}

}

[/cceN_cpp]

Kood Selgitage:

Funktsiooni.speed () saab kasutada video taasesituse kiiruse juhtimiseks. Kui parameetri väärtus on 1, on mängimiskiirus normaalne. Kui väärtus üle 1, siis kiirendage; kui see on alla 1, siis aeglustage.

Kuna oleme loonud kohaliku muutuja newSpeed ja importinud selle funktsiooni setSpeed (), mõjutab hiire koordinaat otseselt video esitamise kiirust.

Kui soovite videote kohta rohkem näiteid, võite viidata raamatukogudele - juhtumiteegi video.

7. toiming: tavaliste sündmuste töötlemine

Varem oleme kasutusele võtnud ainult keyPressed () sündmuse. See käivitub pärast klaviatuuri vajutamist. Järgnevalt tutvustame teile muid töötlemisel levinud sündmusi.

Ülaltoodud sündmuste kasutusviisid on sarnased keyPressediga. Neil pole koodi kirjutamisel järjekorda. Teisisõnu, olenemata sellest, millise sündmuse funktsiooni seadistamise ette või taha asetasite, saate sama tulemuse. Täitekäsk on seotud ainult sündmuse enda käivitustingimusega. See täidetakse ainult siis, kui tingimus on täidetud. Ülaltoodud sündmustest on väga lihtne aru saada. Peate lihtsalt tegema väikese eksperimendi, siis saate kiiresti aru nende kasutusviisidest.

Sündmuste voog

Võime näite abil teada saada sündmuste täitmise järjekorda.

Koodinäide (10-5):

[cceN_cpp theme = "dawn"] tühine seadistus () {

frameRate (2);

println (1);

}

tühine viik () {

println (2);

}

tühi hiir Vajutatud () {

println (3);

}

tühine hiirMove () {

println (4);

}

void mouseReleased () {

println (5);

}

tühi võti Vajutatud () {

println (6);

}

tühine võtiReleased () {

println (7);

} [/cceN_cpp]

Kood Selgitage:

Funktsiooni seadistamisel on funktsiooni frameRate () määranud programmi töökiiruseks 2 kaadrit sekundis. Kaadrisageduse vähendamine võib aidata meil konsooli väljundit jälgida juhuks, kui käivitatud sündmused satuvad kohe uute andmetega tagaküljele.

Proovige hiirt liigutada, klõpsake hiirel, vabastage hiir ja jälgige väljundi tulemust. Tutvuge sündmuse täitmise korraldusega println kaudu.

Tähelepanu tasub pöörata sellele, et joonistusfunktsioone ei saa kirjutada muudesse sündmustesse, välja arvatud funktsiooni joonistamine, või seda ei saa kuvada. Kui tahame juhtida graafiliste komponentide peitmist ja kuvamist selliste sündmuste kaudu nagu klahvivajutus, võime kaaluda bool -muutuja loomist meediumina.

Sündmused toimuvad järjekorras. Alles pärast seda, kui kogu praeguse sündmuse kood on rakendatud, käivitab see koodi järgmisel sündmusel.

8. samm: terviklik näide-muusikaklaviatuur

Koos äsja haaratud sündmustega saame oma programmi lisada uusi suhtlusi. Järgmisena saame vaid mõne minutiga muusikaklaviatuuri hõlpsalt analoogida.

Video veebisait:

Koodinäide (10-6):

[cceN_cpp theme = "dawn"] impordi töötlemine.heli.*;

SoundFile sound1, sound2, sound3, sound4, sound5;

boolean key1, key2, key3, key4, key5;

tühine seadistus () {

suurus (640, 360);

taust (255);

noStroke ();

sound1 = uus SoundFile (see, "do.wav");

sound2 = uus SoundFile (see, "re.wav");

sound3 = uus SoundFile (see, "mi.wav");

sound4 = uus SoundFile (see, "fa.wav");

sound5 = uus SoundFile (see, "so.wav");

}

tühine viik () {

taust (255, 214, 79);

rectMode (KESK);

ujuk w = laius * 0,1;

ujuk h = kõrgus * 0,8;

kui (võti1) {

täitma (255);

} muud {

täitma (238, 145, 117);

}

sirge (laius/6, kõrgus/2, w, h);

kui (võti2) {

täitma (255);

} muud {

täitke (246, 96, 100);

}

sirge (laius/6 * 2, kõrgus/2, w, h);

kui (võti3) {

täitma (255);

} muud {

täitma (214, 86, 113);

}

sirge (laius/6 * 3, kõrgus/2, w, h);

kui (võti4) {

täitma (255);

} muud {

täitke (124, 60, 131);

}

sirge (laius/6 * 4, kõrgus/2, w, h);

kui (võti5) {

täitma (255);

} muud {

täitke (107, 27, 157);

}

sirge (laius/6 * 5, kõrgus/2, w, h);

}

tühi võti Vajutatud () {

kui (võti == 'a') {

sound1.play ();

võti1 = tõene;

}

kui (võti == 's) {

sound2.play ();

võti2 = tõene;

}

kui (võti == 'd') {

sound3.play ();

võti3 = tõene;

}

kui (võti == 'f') {

sound4.play ();

võti4 = tõene;

}

if (võti == 'g') {

sound5.play ();

võti5 = tõene;

}

}

tühine võtiReleased () {

kui (võti == 'a') {

võti1 = vale;

}

kui (võti == 's) {

võti2 = vale;

}

kui (võti == 'd') {

võti3 = vale;

}

kui (võti == 'f') {

võti4 = vale;

}

if (võti == 'g') {

võti5 = vale;

}

} [/cceN_cpp]

Kood Selgitage:

Peame looma mitu heliobjekti, et lugeda suhtelist heliteavet, et mängida erinevaid helisid erinevate klahvide käivitamisel.

Siin kasutame uut sündmuse võtitReleased (). Selle sündmuse ülesanne on taastada klaviatuuri värv algsele värvile. Võtme vabastamisel käivitub see.

Peas deklareeritud 5 loogilist väärtust kasutatakse võtme oleku tuvastamiseks.

9. samm: terviklik näide-muusikapalett 1

Lisaks klaviatuurisündmusele on hiireüritus hea, kui peame seda paindlikult kasutama. Järgmine näide on meie jaoks muusikapaleti loomiseks, mille hulgas oleme kasutanud kahte hiirega seotud sündmust.

Video veebisait:

Koodinäide (10-7):

[cceN_cpp theme = "dawn"] impordi töötlemine.heli.*;

SoundFile sound1, sound2, sound3, sound4, sound5;

boolean onDragging;

tühine seadistus () {

suurus (640, 360);

taust (255, 214, 79);

noStroke ();

sound1 = uus SoundFile (see, "do.wav");

sound2 = uus SoundFile (see, "re.wav");

sound3 = uus SoundFile (see, "mi.wav");

sound4 = uus SoundFile (see, "fa.wav");

sound5 = uus SoundFile (see, "so.wav");

}

tühine viik () {

if (isDragging) {

täitke (107, 27, 157, 100);

ellips (mouseX, mouseY, 16, 16);

}

}

tühine hiirDragged () {

isDragging = tõsi;

if (mouseX> 100 && mouseX <105) {

sound1.play ();

}

if (mouseX> 200 && mouseX <205) {

sound2.play ();

}

if (mouseX> 300 && mouseX <305) {

sound3.play ();

}

if (mouseX> 400 && mouseX <405) {

sound4.play ();

}

if (mouseX> 500 && mouseX <505) {

sound5.play ();

}

}

void mouseReleased () {

isDragging = vale;

} [/cceN_cpp]

Kood Selgitage:

Loodame, et alles siis, kui oleme hiirt vajutanud ja lohistanud, saame pilte joonistada. Seega peame praeguse oleku saamiseks looma loogilise muutuja isDragging.

Hiire lohistamisel muutub isDragging tõeliseks väärtuseks, nii et joonistamisfunktsioonid rakenduses Draw täidetakse. See jätab ekraanile jäljed. Kui me hiire vabastame, muutub isDragging vale väärtuseks. Seega peatavad funktsioonide joonistamise joonistusfunktsioonid täitmise.

Oleme hiire lohistamise korral välja töötanud mitu käivitamistingimust. Näiteks kui hiire horisontaalne koordinaat on 100 ja 105 piksli vahel, esitatakse muusikat automaatselt. See tekitab ekraanil mitu nähtamatut stringi. Ainult siis, kui hiir läbib teatud alasid, käivitab see suhtelise muusika.

10. samm: terviklik näide-muusikapalett 2 (uuendatud versioon)

Ülaltoodud näite mõju on juba piisavalt hea. Kuid kui me seda hoolikalt jälgime, leiame palju probleeme. Näiteks kui hiir liigub väga kiiresti, jätab see iga kord liikudes ekraanile ümmarguse punkti. See ei ole ühtne sirgjoon. Vahepeal põhjustab see ka teatavat muusikalekki. Kui hiir liigub väga aeglaselt, läbides positsiooni, kui horisontaalne koordinaat on vahemikus 100 ja 105, siis edastab see muusikat väga lühikese aja jooksul mitu korda, mis annab teile ummikseisu. Kõiki neid probleeme saame lahendada alloleva näite abil.

Videot saate vaadata alloleval lingil:

v.qq.com/x/page/w03226o4y4l.html

Koodinäide (10-8):

[cceN_cpp theme = "dawn"] impordi töötlemine.heli.*;

SoundFile sound1, sound2, sound3, sound4, sound5;

boolean onDragging;

tühine seadistus () {

suurus (640, 360);

taust (255, 214, 79);

noStroke ();

sound1 = uus SoundFile (see, "do.wav");

sound2 = uus SoundFile (see, "re.wav");

sound3 = uus SoundFile (see, "mi.wav");

sound4 = uus SoundFile (see, "fa.wav");

sound5 = uus SoundFile (see, "so.wav");

}

tühine viik () {

if (isDragging) {

insult (107, 27, 157, 100);

löökKaal (10);

line (mouseX, mouseY, pmouseX, pmouseY);

}

}

tühine hiirDragged () {

isDragging = tõsi;

kui ((hiirX - 100) * (pmouseX - 100) <0) {

sound1.play ();

}

kui ((hiirX - 200) * (pmouseX - 200) <0) {

sound2.play ();

}

kui ((hiirX - 300) * (pmouseX - 300) <0) {

sound3.play ();

}

kui ((hiirX - 400) * (pmouseX - 400) <0) {

sound4.play ();

}

kui ((hiirX - 500) * (pmouseX - 500) <0) {

sound5.play ();

}

}

void mouseReleased () {

isDragging = vale;

} [/cceN_cpp]

Kood Selgitage:

Siin oleme kasutanud kahte muutujat pmouseX ja pmouseY, mida kannab töötlemissüsteem ise. Need on sarnased hiireX ja mouseY -ga, kuid saadud tulemused on hiire koordinaadid viimases kaadris.

Funktsiooni joonistamisel oleme funktsionaaljoonega () asendanud algse funktsiooni ellipsi (). See ühendab viimase kaadri koordinaadi otse praeguse kaadri koordinaadiga. Nii saame joonistada sidusaid sirgeid või kõveraid.

Sündmuse mouseDragged puhul oleme loonud uue käivitustingimuse. Otsustades, kas viimase kaadri ja praeguse kaadri koordinaadid on samal poolel, et teada saada, kas teatud koordinaat on ületatud. Võtke see tingimus näiteks: "kui ((hiirX - 100) * (pmouseX - 100) <0)". Selle hulgast saame "mouseX - 100" positiivse ja negatiivse väärtuse põhjal teada, kas mouseX asub horisontaalsest koodinaadist 100 paremal või vasakul. Sarnaselt "pmouseX - 100". Seega, kui kaks punkti ees ja taga ei ole samal küljel, korrutab positiivne negatiivse, saab uue negatiivse numbri. Seega on täitmise tingimus täidetud.

Ülaltoodud on lihtsustatud väljend, mis on nutikalt kasutanud teatud matemaatilist algoritmi-kaks negatiivset korrutades loovad positiivse. Võite selle jagada ka kaheks olukorraks, et seda eraldi arutada. Otsustamistingimuste kirjutamine on aga palju keerulisem. Otsustamistingimused "if ((mouseX = 100) || (mouseX> 100 && pmouseX <= 100))" on samaväärsed lähtekoodi määravate tingimustega.

11. toiming: suhtelised funktsioonid heli ja video juhtimise kohta

Eespool nimetatud funktsioonidest piisab üldiste kasutustsenaariumide jaoks. Kui soovite seda sügavalt kaevata, olen siin kogunud teile mõned ühised heli ja videoga seotud funktsioonid. Saate uurida selle kasutusvõimalusi vastavalt oma vajadustele.

Lisateavet leiate ametliku veebisaidi dokumentidest.

Heli (https://processing.org/reference/libraries/sound/index.html)

Video (https://processing.org/reference/libraries/video/index.html)

See artikkel pärineb disainer Wenzylt.

12. samm: suhtelised näidud:

Huvitavad programmeerimisjuhised disainerile-esialgse puudutuse töötlemine

Huvitavad programmeerimisjuhised disainerile - looge oma esimene töötlusprogramm

Huvitavad programmeerimisjuhised disainerile-pildistage (esimene osa)

Huvitavad programmeerimisjuhised disainerile-pildistage (teine osa)

Huvitavad programmeerimisjuhised disainerile- programmiprotsesside juhtimine- silmuste avaldus

Huvitavad programmeerimisjuhised disainerile-programmiprotsesside juhtimine-seisundiseisund (esimene osa)

Huvitavad programmeerimisjuhised disainerile-programmiprotsesside juhtimine-seisundiseisund (teine osa)

Huvitavad programmeerimisjuhised disainerile-kohandatud funktsioonid ja fraktaalne rekursioon

Huvitavad programmeerimisjuhised disainerile-kohandatud funktsioonid ja fraktaalne rekursioon

Huvitavad töötlemisprogrammeerimise juhised disainerile-värvikontroll

13. samm: allikas

See artikkel on pärit:

Küsimuste korral võite võtta ühendust aadressil : [email protected].