Indholdsfortegnelse:

Interessant behandlingsprogrammeringsvejledning til designer-indlæsning og hændelse af medier: 13 trin
Interessant behandlingsprogrammeringsvejledning til designer-indlæsning og hændelse af medier: 13 trin

Video: Interessant behandlingsprogrammeringsvejledning til designer-indlæsning og hændelse af medier: 13 trin

Video: Interessant behandlingsprogrammeringsvejledning til designer-indlæsning og hændelse af medier: 13 trin
Video: ARMADA GAZA (INTÉRESSANT ) 2024, November
Anonim
Interessant behandlingsprogrammeringsvejledning til designer-indlæsning af medier og begivenheder
Interessant behandlingsprogrammeringsvejledning til designer-indlæsning af medier og begivenheder

Behandling kan indlæses masser af eksterne data, blandt hvilke der er tre typer meget almindeligt anvendte. De er billede, lyd og video separat.

I dette kapitel skal vi tale om, hvordan man indlæser lyd og video i detaljer, kombineret med begivenheder. I sidste ende kan du oprette dit eget musiktastatur eller din musikpalet.

Trin 1: Læs billede

Inden vi starter, lad os se tilbage på metoden til billedindlæsning.

Trin 2: Billedrelaterede funktioner

Inden vi bruger disse funktioner, skal vi oprette et billedobjekt via PImage. Derefter kan vi bruge disse funktioner til at definere alle slags billedegenskaber.

Glem ikke at gemme dine billedkilder i datafilen, før du kører dit program.

Trin 3: Musikindlæsning, afspilning og stop

I det følgende begynder vi formelt at introducere påkaldelsen af musik til dig. Meget lig billedindlæsning, skal du erklære et lydobjekt i begyndelsen. Du kan henvise til eksemplet herunder fra selve grammatikken.

Kodeksempel (10-1):

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

SoundFile lyd;

ugyldig opsætning () {

størrelse (640, 360);

baggrund (255);

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

}

ugyldig tegning () {

}

void keyPressed () {

//Afspil lyd

hvis (key == 'p') {

sound.play ();

}

// Stop lyd

hvis (key == 's') {

sound.stop ();

}

} [/cceN_cpp]

Forberedelse:

Selve behandlingen indeholder ikke noget lydbibliotek. Du skal downloade det selv. Så før du skriver din kode, er det bedre at foretage følgende forberedelser.

Føj bibliotek til behandling. Her er den almindelige praksis. Vælg fra menulinjen for "Værktøj"- "Tilføj værktøj", og skift derefter til "Biblioteker". Indtast nøgleordene i biblioteket i søgesøjlen, så du kan downloade og installere det direkte.

Men hvis vi bruger denne funktion i vores hjemland (i Kina), kan vi ikke downloade den ved at forbinde internettet direkte. Vi skal starte VPN. Selvom vi starter det, vil der være ustabile forhold. Så du skal være tålmodig for at prøve det flere gange. Dette er den mest bekvemme metode til indlæsning. Hvis du ikke kan installere, skal du downloade fra det officielle websted manuelt. (https://processing.org/reference/libraries/) Fordi den manuelle installationsmetode er meget kompliceret, vil vi diskutere det yderligere i det andet kapitel.

Kode Exaplain:

Lydbiblioteket kan fungere korrekt efter forberedelsen er afsluttet. Håndter ovenstående kode, klik på KØR, så fungerer den. Tryk på tasten "P" for at afspille musik, "S" for at stoppe musik.

Hvis det er vant til programmet, skal vi først indlæse det. I begyndelsen skal vi tilføje en sætning "import processing.sound.*". "import" er nøgleordet, hvilket betyder at indlæse bogstaveligt. Tilføj biblioteksnavnet bag "import", så indlæser det biblioteket. Halen følger normalt et mærke med "*", og den indlæser derfor alle de bibliotekrelaterede klasser i programmet uden at skulle tilføje dem en efter en manuelt.

I den anden sætning har "SoundFile sound;" erklæret et lydobjekt. SoundFile ligner PImage.

Inden for funktionsopsætning bruges "sound = new SoundFile (denne," 1.mp3 ");" til at oprette et objekt og definere dets læsesti. Her er vi faktisk allerede begyndt at bruge et nyt koncept Class. Lige nu diskuterer vi det ikke dybt. Vi behøver kun at vide, at det er en fast skrivemetode, og den sidste parameter er til at udfylde adressen på musikkilden.

Blandt keyPressed () -begivenheder fungerer "sound.play ()" og "sound.stop ()" relativt som effekten af afspilning og stop. "." i midten angiver en medlemsfunktion, som afspilning og stop tilhører lydobjekter. Vi kan betragte medlemsfunktionen som den funktion, der er inkluderet i objektet. Det tilhører dette objekt, som er defineret på forhånd. Senere, når vi skal afspille flere lydobjekter, skal vi kun tilføje ".play ()" bag det relative variabelnavn.

Lydkilder skal gemmes i datafilen under det samme katalog over sketchfile (med pde -suffiks). Hvis der ikke er nogen, kan du manuelt oprette en.

Glem ikke at skrive funktionstegning. Selvom du ikke tegnede nogen grafik, er det nødvendigt at afspille musik med succes.

Ovenstående procedure virker ret kompleks, men du skal kun tilføje flere sætninger med kode, så kan du realisere afspilningsfunktionen. Det er meget praktisk.

Behandling understøtter almindelige lydformater som mp3, wav, ogg osv.

Trin 4: Kontrol af musikhastighed

De følgende eksempler vil begynde at blive meget interessante. Behandling har givet nogle funktioner, der kan styre musikens afspilningshastighed. På samme tid vil toner ændre sig med musikens afspilningshastighed. Når vi bruger musen til at styre, vil det generere en meget psykedelisk effekt.

Videoens websted:

Kodeksempel (10-2):

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

SoundFile lyd;

ugyldig opsætning () {

størrelse (640, 360);

baggrund (255);

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

}

ugyldig tegning () {

flydehastighed = mouseX/(float) bredde * 3;

lydhastighed (hastighed);

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

lyd.amp (bind);

}

void keyPressed () {

//Afspil lyd

hvis (key == 'p') {

sound.play ();

}

// Stop lyd

hvis (key == 's') {

sound.stop ();

}

} [/cceN_cpp]

Kode Forklar:

Funktion.rate () styrer lydafspilningshastigheden. Værdien i parentes bestemmer hurtig og langsom afspilningshastighed. Når værdien er 1, er afspilningshastigheden normal. Når det er over 1, accelerere derefter; mens den er under 1, sænk derefter farten.

Funktion.amp () styrer lydstyrken. Værdien i parentes bestemmer volumenværdien. Når den er 1, er lydstyrken normal. Når det er over 1, skal du øge lydstyrken; mens det er under 1, reducer derefter lydstyrken.

Her har vi bygget to lokale variabler hastighed og vol som parametre, der skal indlæses i. Derfor ændrer musens vandrette koordinat musiktonen, og den lodrette koordinat ændrer musikens lydstyrke.

Trin 5: Videoafspilning og stop

I behandling ligner videoindlæsning lydindlæsning. Du skal først downloade videobibliotek. (https://processing.org/reference/libraries/video/index.html)

Kodeksempel (10-3):

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

Film mov;

ugyldig opsætning () {

størrelse (640, 360);

baggrund (0);

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

}

void movieEvent (filmfilm) {

mov.read ();

}

ugyldig tegning () {

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

}

void keyPressed () {

hvis (key == 'p') {

mov.play ();

}

hvis (key == 's') {

mov.stop ();

}

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

mov.pause ();

}

} [/cceN_cpp]

Videoskærmbillede:

Kode Forklar:

Den første sætning "import processing.video.*;" Bruges til at indlæse videobibliotek.

Den anden sætning "Movie mov;" bruges til at erklære videoobjekt. Blandt dem ligner funktionen "Film" PImage.

I funktionsopsætning er effekten af "mov = new Movie (denne," 1.mov ");" at oprette objekt og definere dets læsesti. Den sidste parameter skal udfyldes med adressen på videokilden.

Bag konfigurationen repræsenterer movieEvent videobegivenhed. Det bruges til at opdatere og læse videoinformation. "mov.read ()" i hændelsen betyder læst.

Bortset fra visning af billeder kan funktionsbillede også vise video. Vi kan betragte videoobjekter som et dynamisk billede. Den første parameter, vi udfylder variabelnavnet på videoobjektet. Den anden og tredje parameter er den vandrette og lodrette koordinat tegnet af video. De fjerde og femte parametre bestemmer længden og bredden på videodisplayet.

Funktion.play () betyder leg. Funktion.stop () betyder stop, og det nulstiller videoen. Funktion.pause () betyder pause. Det afbryder den aktuelle afspilning, som fortsætter, indtil funktionen.play () aktiveres.

Trin 6: Kontrol af videohastighed

Kodeksempel (10-4):

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

Film mov;

ugyldig opsætning () {

størrelse (640, 360);

baggrund (0);

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

}

void movieEvent (filmfilm) {

mov.read ();

}

ugyldig tegning () {

billede (mov, 0, 0, bredde, højde);

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

mov.speed (newSpeed);

}

void keyPressed () {

hvis (key == 'p') {

mov.play ();

}

hvis (key == 's') {

mov.stop ();

}

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

mov.pause ();

}

}

[/cceN_cpp]

Kode Forklar:

Funktion.hastighed () kan bruges til at styre videoafspilningshastigheden. Når parameterværdien er 1, er afspilningshastigheden normal. Når værdien ud over 1, så accelerere; mens det er under 1, afkøl derefter.

Fordi vi har bygget den lokale variabel newSpeed og importeret den til funktionssetSpeed (), påvirker musens koordinat videoafspilningshastigheden direkte.

Hvad angår flere eksempler om video, kan du henvise til Biblioteker - Video i sagsbiblioteket.

Trin 7: Behandling af almindelige hændelser

Tidligere har vi kun introduceret keyPressed () -hændelse. Det udløses, efter at tastaturet er trykket. I det følgende introducerer vi andre almindelige begivenheder i Processing for dig.

Brugen af ovenstående hændelser ligner keyPressed. De har ingen sekvens i kodeskrivning. Med andre ord, uanset hvilken begivenhed du placerede før eller bag funktionsopsætningen, får du det samme resultat. Udførelsesordren er kun relateret til den udløsende tilstand for selve begivenheden. Kun hvis betingelsen er opfyldt, udføres den. Begivenheder ovenfor er alle meget lette at forstå. Du skal bare lave et lille eksperiment, så kan du hurtigt forstå deres anvendelser.

Begivenhedsforløb

Vi kan bruge et eksempel til at kende hændelsens rækkefølge.

Kodeksempel (10-5):

[cceN_cpp theme = "dawn"] ugyldig opsætning () {

frameRate (2);

println (1);

}

ugyldig tegning () {

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 funktionsopsætning har funktions frameRate () indstillet programmets hastighed til 2 billeder pr. Sekund. Sænkning af billedfrekvensen kan hjælpe os med at observere output i konsollen, hvis hændelser, der udløses, straks børstes af nye data bag på.

Prøv at flytte musen, klik med musen, slip musen og observer outputresultatet. Lær hændelsesudførelsesordren at kende via println.

Det, der er værd at være opmærksom på, er, at tegningsfunktioner ikke kan skrives ind i andre begivenheder undtagen funktionstegning, eller det kan ikke vises. Hvis vi vil kontrollere skjul og visning af grafiske komponenter gennem hændelser som keyPressed, kan vi overveje at bygge bool -variabel som medium.

Begivenheder udføres i rækkefølge. Først efter at al koden i den aktuelle begivenhed er implementeret, vil den udføre koden i næste begivenhed.

Trin 8: Omfattende eksempel-Musiktastatur

Ved at kombinere med de nyligt begrebne begivenheder kan vi tilføje nye interaktioner til vores program. Dernæst, kun med få minutter, kan vi let analog et musiktastatur.

Videoens websted:

Kodeksempel (10-6):

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

SoundFile lyd1, lyd2, lyd3, lyd4, lyd5;

boolsk nøgle1, nøgle2, nøgle3, nøgle4, nøgle5;

ugyldig opsætning () {

størrelse (640, 360);

baggrund (255);

noStroke ();

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

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

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

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

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

}

ugyldig tegning () {

baggrund (255, 214, 79);

rectMode (CENTER);

float w = bredde * 0,1;

flyde h = højde * 0,8;

hvis (nøgle1) {

fyld (255);

} andet {

fyld (238, 145, 117);

}

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

hvis (nøgle2) {

fyld (255);

} andet {

fyld (246, 96, 100);

}

ret (bredde/6 * 2, højde/2, w, h);

hvis (key3) {

fyld (255);

} andet {

fyld (214, 86, 113);

}

ret (bredde/6 * 3, højde/2, w, h);

hvis (nøgle4) {

fyld (255);

} andet {

fyld (124, 60, 131);

}

ret (bredde/6 * 4, højde/2, w, h);

hvis (nøgle5) {

fyld (255);

} andet {

fyld (107, 27, 157);

}

ret (bredde/6 * 5, højde/2, w, h);

}

void keyPressed () {

hvis (key == 'a') {

sound1.play ();

nøgle1 = sand;

}

hvis (key == 's') {

sound2.play ();

key2 = sand;

}

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

sound3.play ();

key3 = sand;

}

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

sound4.play ();

key4 = sand;

}

hvis (key == 'g') {

sound5.play ();

nøgle5 = sand;

}

}

void keyReleased () {

hvis (key == 'a') {

nøgle1 = falsk;

}

hvis (key == 's') {

key2 = falsk;

}

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

key3 = falsk;

}

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

nøgle4 = falsk;

}

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

nøgle5 = falsk;

}

} [/cceN_cpp]

Kode Forklar:

Vi er nødt til at oprette flere lydobjekter for at læse den relative lydinformation for at afspille forskellige lyde, når forskellige taster udløses.

Her bruger vi en ny hændelsesnøgleReleased (). Funktionen af denne begivenhed er at gendanne tastaturfarven til sin oprindelige farve. Når nøglen slippes, udløses den.

De 5 boolske værdier, der er angivet i hovedet, bruges til at registrere nøglens status.

Trin 9: Omfattende eksempel-musikpalet 1

Udover tastaturhændelse er musearrangement en god ting, at vi skal bruge det fleksibelt. Følgende eksempel er for os at oprette en musikpalet, blandt hvilken vi har brugt to musrelaterede begivenheder.

Videowebsted:

Kodeksempel (10-7):

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

SoundFile lyd1, lyd2, lyd3, lyd4, lyd5;

boolsk isTragging;

ugyldig opsætning () {

størrelse (640, 360);

baggrund (255, 214, 79);

noStroke ();

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

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

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

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

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

}

ugyldig tegning () {

hvis (isDragging) {

fyld (107, 27, 157, 100);

ellipse (mouseX, mouseY, 16, 16);

}

}

void mouseDragged () {

isDragging = sand;

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

sound1.play ();

}

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

sound2.play ();

}

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

sound3.play ();

}

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

sound4.play ();

}

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

sound5.play ();

}

}

void mouseReleased () {

isDragging = falsk;

} [/cceN_cpp]

Kode Forklar:

Vi håber, at først når vi har trykket på musen og trukket den, kan vi tegne billeder. Så vi skal bygge en boolsk variabel isDragging for at opnå den aktuelle status.

Når du trækker musen, bliver isDragging den sande værdi, så tegnefunktioner i Draw vil blive udført. Det vil efterlade spor på skærmen. Når vi slipper musen, bliver isDragging til en falsk værdi. Så tegnefunktionerne i funktionstegning stopper udførelsen.

Vi har designet flere udløsende betingelser i musekørsel. For eksempel, når den vandrette musekoordinat er mellem 100 og 105 pixels, afspilles musik automatisk. Dette får skærmen til at skabe flere usynlige strenge. Kun hvis musen passerer gennem de bestemte områder, vil den udløse den relative musik.

Trin 10: Omfattende eksempel-Music Palette 2 (opdateret version)

Effekten af ovenstående eksempel er allerede god nok. Men hvis vi ser det nøje, finder vi masser af problemer. For eksempel, når musen bevæger sig meget hurtigt, vil den efterlade et rundt punkt på skærmen hver gang den bevæger sig. Det er ikke en sammenhængende lige linje. I mellemtiden forårsager det også noget musiklækage. Mens når musen bevæger sig meget langsomt og passerer gennem positionen, når den vandrette koordinat er mellem 100 og 105, sender den musik flere gange inden for meget kort tid, hvilket giver dig en følelse af at sidde fast. Alle disse problemer, vi kan løse det gennem eksemplet herunder.

Du kan se videoer i nedenstående link:

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

Kodeksempel (10-8):

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

SoundFile lyd1, lyd2, lyd3, lyd4, lyd5;

boolsk isTragging;

ugyldig opsætning () {

størrelse (640, 360);

baggrund (255, 214, 79);

noStroke ();

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

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

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

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

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

}

ugyldig tegning () {

hvis (isDragging) {

slagtilfælde (107, 27, 157, 100);

strokeWeight (10);

linje (mouseX, mouseY, pmouseX, pmouseY);

}

}

void mouseDragged () {

isDragging = sand;

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

sound1.play ();

}

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

sound2.play ();

}

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

sound3.play ();

}

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

sound4.play ();

}

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

sound5.play ();

}

}

void mouseReleased () {

isDragging = falsk;

} [/cceN_cpp]

Kode Forklar:

Her har vi brugt to variabler pmouseX og pmouseY båret i selve behandlingssystemet. De ligner mouseX og mouseY, men hvad de opnåede er musens koordinat i den sidste ramme.

I Function draw har vi brugt funktionslinje () til at erstatte den originale funktionselipse (). Dette gør koordinaten for den sidste ramme forbundet med koordinaten for den aktuelle ramme direkte. Så vi kan tegne sammenhængende lige linjer eller kurver.

Hvis musen trækkes, har vi designet en ny udløsende tilstand. Gennem bedømmelse af, om koordinaten for den sidste ramme og nuværende ramme er i samme side for at vide, om en bestemt koordinat krydses. Tag denne betingelse som et eksempel: "if ((mouseX - 100) * (pmouseX - 100) <0)". Blandt den, fra den positive og negative værdi, der er resultatet af "mouseX - 100", kan vi vide, om mouseX er til højre eller venstre for det vandrette koodinat 100. På samme måde som "pmouseX - 100". Derfor, når de to punkter i for- og bagside ikke er på samme side, multiplicerer en positiv en negativ, vil den få et nyt negativt tal. Således er udførelsesbetingelsen opfyldt.

Ovenstående er et forenklet udtryk, som smart har brugt en bestemt matematisk algoritme-To negativer multiplicerer vil skabe en positiv. Du kan også opdele det i to situationer for at diskutere hver for sig. Det er imidlertid meget mere kompliceret at skrive domsbetingelser. Bedømmelsesbetingelserne "if ((mouseX = 100) || (mouseX> 100 && pmouseX <= 100))" svarer til de bestemmende betingelser for kildekoden.

Trin 11: Relative funktioner om lyd- og videokontrol

Ovenstående funktioner er tilstrækkelige til generelle brugsscenarier. Hvis du vil grave det dybt, har jeg her samlet nogle fælles funktioner i forhold til lyd og video til dig. Du kan udforske dens anvendelser i henhold til dine egne krav.

For mere introduktion kan du henvise til dokumenter fra det officielle websted.

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

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

Denne artikel kommer fra designer Wenzy.

Trin 12: Relative aflæsninger:

Interessant programmeringsvejledning til designer-behandling af første berøring

Interessant programmeringsvejledning til designer - Opret dit første behandlingsprogram

Interessant programmeringsvejledning til designer-Få dit billede til at køre (første del)

Interessant programmeringsvejledning til designer-Få dit billede til at køre (del to)

Interessant programmeringsvejledning til Designer – Program Process Control- Loop Statement

Interessant programmeringsvejledning til designer-Programproceskontrol-Tilstandserklæring (første del)

Interessant programmeringsvejledning til designer-Programproceskontrol-Tilstandserklæring (anden del)

Interessant programmeringsvejledning til designer-brugerdefinerede funktioner og fraktal rekursion

Interessant programmeringsvejledning til designer-brugerdefinerede funktioner og fraktal rekursion

Interessant behandlingsprogrammeringsvejledning til designer-farvekontrol

Trin 13: Kilde

Denne artikel er fra:

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

Anbefalede: