Innholdsfortegnelse:

Interessant behandlingsprogrammeringsveiledning for designer-lasting av medier og hendelser: 13 trinn
Interessant behandlingsprogrammeringsveiledning for designer-lasting av medier og hendelser: 13 trinn

Video: Interessant behandlingsprogrammeringsveiledning for designer-lasting av medier og hendelser: 13 trinn

Video: Interessant behandlingsprogrammeringsveiledning for designer-lasting av medier og hendelser: 13 trinn
Video: ARMADA GAZA (INTÉRESSANT ) 2024, Juli
Anonim
Interessant behandlingsprogrammeringsveiledning for designer-lasting av medier og hendelser
Interessant behandlingsprogrammeringsveiledning for designer-lasting av medier og hendelser

Behandling kan lastes inn masse eksterne data, blant hvilke det er tre typer som er veldig ofte brukt. De er bilde, lyd og video separat.

I dette kapitlet skal vi snakke om hvordan du laster inn lyd og video i detalj, kombinert med hendelser. Til slutt kan du lage ditt eget musikk -tastatur eller musikkpalett.

Trinn 1: Les bildet

La oss se tilbake på metoden for bildeinnlasting før vi starter.

Trinn 2: Bilderelaterte funksjoner

Før vi bruker disse funksjonene, må vi lage et bildeobjekt gjennom PImage. Deretter kan vi bruke disse funksjonene til å definere alle slags bildeegenskaper.

Ikke glem å lagre bildekildene dine i datafilen før du kjører programmet.

Trinn 3: Musikklasting, spill og stopp

I det følgende begynner vi å formelt introdusere påkallelsen av musikk til deg. Svært lik bildeinnlasting, må du deklarere et lydobjekt i begynnelsen. Du kan referere til eksemplet nedenfor for selve grammatikken.

Kodeksempel (10-1):

[cceN_cpp theme = "dawn"] import processing.sound.*;

SoundFile lyd;

ugyldig oppsett () {

størrelse (640, 360);

bakgrunn (255);

lyd = ny SoundFile (denne, "1.mp3");

}

ugyldig trekning () {

}

void keyPressed () {

//Spill lyd

hvis (nøkkel == 'p') {

lyd.spill ();

}

// Stopp lyd

hvis (nøkkel == 's') {

sound.stop ();

}

} [/cceN_cpp]

Forberedelse:

Selve behandlingen har ikke noe lydbibliotek. Du må laste den ned selv. Så før du skriver koden din, er det bedre å gjøre følgende forberedelser.

Legg til bibliotek i behandling. Her er vanlig praksis. Velg fra menylinjen for "Tool"- "Add Tool", og skift deretter til "Libraries". Skriv inn nøkkelordene i biblioteket i søkekolonnen slik at du kan laste ned og installere det direkte.

Men hvis vi bruker denne funksjonen i vårt hjemland (i Kina), kan vi ikke laste den ned ved å koble nettet direkte. Vi må starte VPN. Selv om vi starter det, vil det være ustabile forhold. Så du må være tålmodig for å prøve det flere ganger. Dette er den mest praktiske metoden for lasting. Hvis du ikke kan installere, må du laste ned fra det offisielle nettstedet manuelt. (https://processing.org/reference/libraries/) Fordi den manuelle installasjonsmetoden er veldig komplisert, vil vi diskutere den videre i det andre kapitlet.

Kode Exaplain:

Lydbiblioteket kan fungere skikkelig etter at forberedelsene er fullført. Ta tak i koden ovenfor, klikk på KJØR, så fungerer den. Trykk på tasten "P" for å spille musikk, "S" for å stoppe musikk.

Hvis det er vant til programmet, må vi laste det inn først. I begynnelsen må vi legge til en setning "import processing.sound.*". "import" er nøkkelordet, som betyr å laste bokstavelig talt. Legg til biblioteksnavnet bak "import", så vil det laste inn biblioteket. Halen følger vanligvis merket med "*", og den vil dermed laste alle bibliotekrelaterte klasser inn i programmet uten å måtte legge dem til en etter en manuelt.

I den andre setningen har "SoundFile sound;" erklært et lydobjekt. SoundFile ligner PImage.

I funksjonsoppsettet brukes "sound = new SoundFile (dette," 1.mp3 ");" for å lage et objekt og definere lesebanen. Her har vi faktisk allerede begynt å bruke et nytt konsept Class. Akkurat nå diskuterer vi det ikke dypt. Vi trenger bare å vite at det er en fast skrivemetode, og den siste parameteren er for å fylle adressen til musikkilden.

Blant hendelser med KeyPressed () fungerer "sound.play ()" og "sound.stop ()" relativt som effekten av spill og stopp. "." i midten indikerer en medlemsfunksjon som spiller og stopper tilhører lydobjekter. Vi kan betrakte medlemsfunksjonen som funksjonen som er inkludert i objektet. Det tilhører dette objektet, som er definert på forhånd. Senere, når vi trenger å spille flere lydobjekter, trenger vi bare å legge til ".play ()" bak det relative variabelnavnet.

Lydkilder skal lagres i datafilen under samme katalog med skissefil (med pde -suffiks). Hvis det ikke er noen, kan du lage en manuelt.

Ikke glem å skrive funksjonstegning. Selv om du ikke tegnet grafikk, er det nødvendig å spille musikk vellykket.

Fremgangsmåten ovenfor virker ganske kompleks, men du må bare legge til flere setninger med kode, så kan du realisere spillfunksjonen. Det er veldig praktisk.

Behandlingen støtter vanlige lydformater som mp3, wav, ogg, etc.

Trinn 4: Musikkhastighetskontroll

De følgende eksemplene vil begynne å bli mye interessante. Behandlingen har gitt noen funksjoner som kan kontrollere musikkhastigheten. Samtidig vil tonene endres med musikkhastigheten. Når vi bruker musen til å kontrollere, vil den generere en veldig psykedelisk effekt.

Videonettsted:

Kodeksempel (10-2):

[cceN_cpp theme = "dawn"] import processing.sound.*;

SoundFile lyd;

ugyldig oppsett () {

størrelse (640, 360);

bakgrunn (255);

lyd = ny SoundFile (denne, "1.mp3");

}

ugyldig trekning () {

flytehastighet = mouseX/(float) bredde * 3;

lyd.hastighet (hastighet);

float vol = musY/(float) høyde * 4;

lyd.amp (vol);

}

void keyPressed () {

//Spill lyd

hvis (nøkkel == 'p') {

lyd.spill ();

}

// Stopp lyd

hvis (nøkkel == 's') {

sound.stop ();

}

} [/cceN_cpp]

Kode Forklar:

Funksjon.rate () styrer lydavspillingshastigheten. Verdien i parentes bestemmer hvor raskt og sakte spillehastigheten er. Når verdien er 1, er spillehastigheten normal. Når den er over 1, så akselerere; mens den er under 1, senk deretter farten.

Funksjon.amp () styrer lydvolumet. Verdien i parentes bestemmer volumverdien. Når den er 1, er volumverdien normal. Når det er over 1, øk deretter volumet; mens den er under 1, senk deretter volumet.

Her har vi bygget to lokale variabler hastighet og vol som parametere som skal lastes inn i. Derfor vil den horisontale musekoordinaten endre musikktonen, og den vertikale koordinaten vil endre musikkvolumet.

Trinn 5: Videospill og stopp

I behandling ligner videoinnlasting på lydbelastning. Du må laste ned videobibliotek først. (https://processing.org/reference/libraries/video/index.html)

Kodeksempel (10-3):

[cceN_cpp theme = "dawn"] import processing.video.*;

Film mov;

ugyldig oppsett () {

størrelse (640, 360);

bakgrunn (0);

mov = ny film (denne, "1.film");

}

void movieEvent (filmfilm) {

mov.read ();

}

ugyldig trekning () {

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

}

void keyPressed () {

hvis (nøkkel == 'p') {

mov.play ();

}

hvis (nøkkel == 's') {

mov.stop ();

}

hvis (nøkkel == 'd') {

mov.pause ();

}

} [/cceN_cpp]

Skjermbilde av video:

Kode Forklar:

Den første setningen "import processing.video.*;" Brukes til å laste inn videobibliotek.

Den andre setningen "Movie mov;" brukes til å erklære videoobjekt. Blant den er funksjonen til "Film" lik PImage.

I funksjonsoppsett er effekten av "mov = new Movie (denne," 1.mov ");" å lage objekt og definere lesebanen. Den siste parameteren skal fylles ut med adressen til videokilden.

Bak oppsettet representerer movieEvent videohendelse. Den brukes til å oppdatere og lese videoinformasjon. "mov.read ()" i hendelsen betyr lest.

Bortsett fra visning av bilder, kan funksjonsbilde også vise video. Vi kan betrakte videoobjekt som et dynamisk bilde. Den første parameteren, vi fyller ut variabelnavnet til videoobjektet. Den andre og tredje parameteren er den horisontale og vertikale koordinaten tegnet av video. Den fjerde og femte parameteren bestemmer lengden og bredden på videovisningen.

Funksjon.play () betyr spill. Funksjon.stop () betyr stopp, og det vil tilbakestille videoen. Funksjon.pause () betyr pause. Det vil avbryte gjeldende avspilling, som vil fortsette til funksjon.play () påkalles.

Trinn 6: Videohastighetskontroll

Kodeksempel (10-4):

[cceN_cpp theme = "dawn"] import processing.video.*;

Film mov;

ugyldig oppsett () {

størrelse (640, 360);

bakgrunn (0);

mov = new Movie (dette, "transit.mov");

}

void movieEvent (filmfilm) {

mov.read ();

}

ugyldig trekning () {

bilde (mov, 0, 0, bredde, høyde);

float newSpeed = mouseX/(float) bredde * 4;

mov.speed (newSpeed);

}

void keyPressed () {

hvis (nøkkel == 'p') {

mov.play ();

}

hvis (nøkkel == 's') {

mov.stop ();

}

hvis (nøkkel == 'd') {

mov.pause ();

}

}

[/cceN_cpp]

Kode Forklar:

Funksjon. Speed () kan brukes til å kontrollere videoavspillingshastigheten. Når parameterverdien er 1, er spillehastigheten normal. Når verdien utover 1, så akselerere; mens den er under 1, må du deretter avkoble den.

Fordi vi har bygd en lokal variabel newSpeed og importert den til funksjonssetSpeed (), vil musekoordinaten påvirke videoavspillingshastigheten direkte.

Når det gjelder flere eksempler på video, kan du referere til Biblioteker - Video i sakens bibliotek.

Trinn 7: Behandle vanlige hendelser

Tidligere har vi bare introdusert keyPressed () -hendelse. Det vil utløses etter at tastaturet er trykket. I det følgende vil vi introdusere andre vanlige hendelser i behandling for deg.

Bruken av hendelsene ovenfor ligner på keyPressed. De har ingen sekvens i kodeskriving. Med andre ord, uansett hvilken hendelse du plasserte før eller bak funksjonsoppsettet, får du det samme resultatet. Utførelsesordren er bare relatert til utløsende tilstand for selve hendelsen. Bare hvis betingelsen er oppfylt, vil den bli utført. Hendelser ovenfor er alle veldig enkle å forstå. Du må bare gjøre et lite eksperiment, så kan du raskt forstå bruken av dem.

Hendelsesflyt

Vi kan bruke et eksempel for å kjenne hendelsesrekkefølgen.

Kodeksempel (10-5):

[cceN_cpp theme = "dawn"] ugyldig oppsett () {

frameRate (2);

println (1);

}

ugyldig trekning () {

println (2);

}

void mousePressed () {

println (3);

}

void mouseMoved () {

println (4);

}

void mouseReleased () {

println (5);

}

void keyPressed () {

println (6);

}

void keyReleased () {

println (7);

} [/cceN_cpp]

Kode Forklar:

I funksjonsoppsett har funksjons frameRate () angitt hastigheten for programmet til å være 2 bilder per sekund. Å senke bildefrekvensen kan hjelpe oss med å observere utdataene i konsollen i tilfelle hendelser som utløses umiddelbart blir børstet av nye data bakover.

Prøv å flytte musen, klikk på musen, slipp musen og observer resultatet. Bli kjent med arrangementets gjennomføringsordre gjennom println.

Det som er verdt å være oppmerksom på er tegningsfunksjoner som ikke kan skrives inn i andre hendelser bortsett fra funksjonstegning, eller den kan ikke vises. Hvis vi vil kontrollere skjul og visning av grafiske komponenter gjennom hendelser som keyPressed, kan vi vurdere å bygge bool -variabel som medium.

Hendelser vil bli utført i rekkefølge. Først etter at all koden i gjeldende hendelse er implementert, vil den utføre koden i neste hendelse.

Trinn 8: Omfattende eksempel-Musiktastatur

Ved å kombinere med de nylig oppfattede hendelsene kan vi legge til nye interaksjoner i programmet vårt. Neste, bare med få minutter, kan vi enkelt analog et musikk -tastatur.

Videonettsted:

Kodeksempel (10-6):

[cceN_cpp theme = "dawn"] import processing.sound.*;

SoundFile lyd1, lyd2, lyd3, lyd4, lyd5;

boolsk key1, key2, key3, key4, key5;

ugyldig oppsett () {

størrelse (640, 360);

bakgrunn (255);

noStroke ();

sound1 = ny SoundFile (dette, "do.wav");

sound2 = ny SoundFile (dette, "re.wav");

sound3 = ny SoundFile (dette, "mi.wav");

sound4 = ny SoundFile (dette, "fa.wav");

sound5 = ny SoundFile (dette, "so.wav");

}

ugyldig trekning () {

bakgrunn (255, 214, 79);

rectMode (SENTRUM);

flyte w = bredde * 0,1;

flyte h = høyde * 0,8;

hvis (nøkkel1) {

fyll (255);

} annet {

fyll (238, 145, 117);

}

rect (bredde/6, høyde/2, w, h);

hvis (nøkkel2) {

fyll (255);

} annet {

fyll (246, 96, 100);

}

rett (bredde/6 * 2, høyde/2, w, h);

hvis (key3) {

fyll (255);

} annet {

fyll (214, 86, 113);

}

rett (bredde/6 * 3, høyde/2, w, h);

hvis (nøkkel4) {

fyll (255);

} annet {

fyll (124, 60, 131);

}

rett (bredde/6 * 4, høyde/2, w, h);

hvis (nøkkel5) {

fyll (255);

} annet {

fyll (107, 27, 157);

}

rett (bredde/6 * 5, høyde/2, w, h);

}

void keyPressed () {

hvis (nøkkel == 'a') {

lyd1.spill ();

key1 = true;

}

hvis (nøkkel == 's') {

sound2.play ();

key2 = true;

}

hvis (nøkkel == 'd') {

lyd3.spill ();

key3 = true;

}

hvis (nøkkel == 'f') {

sound4.play ();

key4 = true;

}

hvis (nøkkel == 'g') {

lyd5.spill ();

key5 = true;

}

}

void keyReleased () {

hvis (nøkkel == 'a') {

key1 = false;

}

hvis (nøkkel == 's') {

key2 = false;

}

hvis (nøkkel == 'd') {

key3 = false;

}

hvis (nøkkel == 'f') {

key4 = false;

}

hvis (nøkkel == 'g') {

key5 = false;

}

} [/cceN_cpp]

Kode Forklar:

Vi må lage flere lydobjekter for å lese den relative lydinformasjonen for å spille forskjellige lyder når forskjellige taster utløses.

Her bruker vi en ny hendelsesnøkkelReleased (). Funksjonen til denne hendelsen er å gjenopprette tastaturfargen til sin opprinnelige farge. Når du slipper nøkkelen, vil den bli utløst.

De 5 boolske verdiene deklarert i hodet brukes til å oppdage nøkkelstatus.

Trinn 9: Omfattende eksempel-musikkpalett 1

I tillegg til tastaturhendelse er musearrangement en god ting at vi må bruke den fleksibelt. Følgende eksempel er for oss å lage en musikkpalett, blant hvilke vi har brukt to muselaterte hendelser.

Videonettsted:

Kodeksempel (10-7):

[cceN_cpp theme = "dawn"] import processing.sound.*;

SoundFile lyd1, lyd2, lyd3, lyd4, lyd5;

boolsk isDragging;

ugyldig oppsett () {

størrelse (640, 360);

bakgrunn (255, 214, 79);

noStroke ();

sound1 = ny SoundFile (dette, "do.wav");

sound2 = ny SoundFile (dette, "re.wav");

sound3 = ny SoundFile (dette, "mi.wav");

sound4 = ny SoundFile (dette, "fa.wav");

sound5 = ny SoundFile (dette, "so.wav");

}

ugyldig trekning () {

if (isDragging) {

fyll (107, 27, 157, 100);

ellipse (mouseX, mouseY, 16, 16);

}

}

void mouseDragged () {

isDragging = true;

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

lyd1.spill ();

}

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

sound2.play ();

}

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

lyd3.spill ();

}

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

sound4.play ();

}

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

lyd5.spill ();

}

}

void mouseReleased () {

isDragging = false;

} [/cceN_cpp]

Kode Forklar:

Vi håper at først når vi har trykket på musen og dratt den, kan vi tegne bilder. Så vi må bygge en boolsk variabel isDragging for å få nåværende status.

Når du drar musen, blir isDragging sann verdi, slik at tegningsfunksjoner i Draw blir utført. Det vil etterlate spor på skjermen. Når vi slipper musen, blir isDragging falsk verdi. Så tegnefunksjonene i funksjonstegn vil stoppe utførelsen.

Vi har designet flere utløsende forhold ved musedraging. For eksempel, når den horisontale musekoordinaten er mellom 100 og 105 piksler, spilles musikk av automatisk. Dette gjør at skjermen skapte flere usynlige strenger. Bare hvis musen passerer gjennom bestemte områder, vil den utløse den relative musikken.

Trinn 10: Omfattende eksempel-Music Palette 2 (oppdatert versjon)

Effekten av eksemplet ovenfor er allerede god nok. Men hvis vi ser nøye på det, vil vi finne mange problemer. For eksempel, når musen beveger seg veldig fort, vil den legge igjen et rundt punkt på skjermen hver gang den beveger seg. Det er ikke en sammenhengende rett linje. I mellomtiden forårsaker det også litt musikklekkasje. Mens når musen beveger seg veldig sakte og går gjennom posisjonen når den horisontale koordinaten er mellom 100 og 105, vil den kringkaste musikk flere ganger på veldig kort tid, noe som gir deg en følelse av å bli sittende fast. Alle disse problemene, vi kan løse det gjennom eksemplet nedenfor.

Du kan se videoer i lenken nedenfor:

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

Kodeksempel (10-8):

[cceN_cpp theme = "dawn"] import processing.sound.*;

SoundFile lyd1, lyd2, lyd3, lyd4, lyd5;

boolsk isDragging;

ugyldig oppsett () {

størrelse (640, 360);

bakgrunn (255, 214, 79);

noStroke ();

sound1 = ny SoundFile (dette, "do.wav");

sound2 = ny SoundFile (dette, "re.wav");

sound3 = ny SoundFile (dette, "mi.wav");

sound4 = ny SoundFile (dette, "fa.wav");

sound5 = ny SoundFile (dette, "so.wav");

}

ugyldig trekning () {

if (isDragging) {

slag (107, 27, 157, 100);

slagvekt (10);

linje (mouseX, mouseY, pmouseX, pmouseY);

}

}

void mouseDragged () {

isDragging = true;

hvis ((mouseX - 100) * (pmouseX - 100) <0) {

lyd1.spill ();

}

hvis ((mouseX - 200) * (pmouseX - 200) <0) {

sound2.play ();

}

hvis ((mouseX - 300) * (pmouseX - 300) <0) {

lyd3.spill ();

}

hvis ((mouseX - 400) * (pmouseX - 400) <0) {

sound4.play ();

}

hvis ((mouseX - 500) * (pmouseX - 500) <0) {

lyd5.spill ();

}

}

void mouseReleased () {

isDragging = false;

} [/cceN_cpp]

Kode Forklar:

Her har vi brukt to variabler pmouseX og pmouseY båret i selve behandlingssystemet. De ligner mouseX og mouseY, men det de fikk er musekoordinaten i den siste rammen.

I Funksjonstegning har vi brukt funksjonslinje () for å erstatte den opprinnelige funksjonellipse (). Dette gjør koordinaten til den siste rammen koblet til koordinaten til den gjeldende rammen direkte. Så vi kan tegne sammenhengende rette linjer eller kurver.

I tilfelle mouseDragged, har vi designet en ny utløsende tilstand. Gjennom å vurdere om koordinaten til den siste rammen og den nåværende rammen er på samme side for å vite om en bestemt koordinat krysses. Ta denne tilstanden som et eksempel: "if ((mouseX - 100) * (pmouseX - 100) <0)". Blant den, fra den positive og negative verdien som er resultatet av "mouseX - 100", kan vi vite om mouseX er til høyre eller venstre for det horisontale koodinatet 100. På samme måte som "pmouseX - 100". Derfor, når de to punktene foran og bak ikke er på samme side, multipliserer en positiv en negativ, vil den få et nytt negativt tall. Dermed er utførelsesbetingelsen oppfylt.

Ovenstående er et forenklet uttrykk, som smart har brukt en viss matematisk algoritme-To negative multipliserer vil skape en positiv. Du kan også dele den i to situasjoner for å diskutere hver for seg. Det er imidlertid mye mer komplisert å skrive dømmebetingelser. Dømmebetingelsene "if ((mouseX = 100) || (mouseX> 100 && pmouseX <= 100))" er ekvivalent med de bestemmende betingelsene for kildekoden.

Trinn 11: Relative funksjoner om lyd- og videokontroll

Ovennevnte funksjoner er tilstrekkelige for generelle bruksscenarier. Hvis du vil grave det dypt, har jeg samlet noen vanlige funksjoner i forhold til lyd og video for deg. Du kan utforske bruken i henhold til dine egne krav.

For mer introduksjon, kan du referere til dokumenter fra det offisielle nettstedet.

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

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

Denne artikkelen kommer fra designeren Wenzy.

Trinn 12: Relative avlesninger:

Interessant programmeringsveiledning for designer-behandling av første berøring

Interessant programmeringsveiledning for designer - Lag ditt første behandlingsprogram

Interessant programmeringsveiledning for designer-få bildet ditt til å løpe (del én)

Interessant programmeringsveiledning for designer-Få bildet ditt til å løpe (del to)

Interessant programmeringsveiledning for Designer – Program Process Control- Loop Statement

Interessant programmeringsveiledning for designer-Programprosesskontroll-Tilstandserklæring (del ett)

Interessant programmeringsveiledning for designer-Programprosesskontroll-Tilstandserklæring (del to)

Interessant programmeringsveiledning for designer-tilpassede funksjoner og fraktal rekursjon

Interessant programmeringsveiledning for designer-tilpassede funksjoner og fraktal rekursjon

Interessant prosesseringsprogrammeringsveiledning for designer-fargekontroll

Trinn 13: Kilde

Denne artikkelen er fra:

Hvis du har spørsmål, kan du kontakte : [email protected].

Anbefalt: