Innehållsförteckning:
- Steg 1: Läs bild
- Steg 2: Bildrelaterade funktioner
- Steg 3: Musikladdning, uppspelning och stopp
- Steg 4: Musikhastighetskontroll
- Steg 5: Videospelning och stopp
- Steg 6: Videohastighetskontroll
- Steg 7: Bearbetning av vanliga händelser
- Steg 8: Omfattande exempel-Musiktangentbord
- Steg 9: Omfattande exempel-musikpalett 1
- Steg 10: Omfattande exempel-Music Palette 2 (uppdaterad version)
- Steg 11: Relativa funktioner om ljud- och videokontroll
- Steg 12: Relativa avläsningar:
- Steg 13: Källa
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
Bearbetning kan laddas massor av extern data, bland vilka det finns tre typer som är mycket vanliga. De är bild, ljud och video separat.
I det här kapitlet kommer vi att prata om hur man laddar in ljud och video i detalj, i kombination med händelser. I slutändan kan du skapa ditt eget musiktangentbord eller musikpalett.
Steg 1: Läs bild
Innan vi börjar, låt oss titta tillbaka på metoden för bildladdning.
Steg 2: Bildrelaterade funktioner
Innan vi använder dessa funktioner måste vi skapa ett bildobjekt genom PImage. Sedan kan vi använda dessa funktioner för att definiera alla typer av bildegenskaper.
Glöm inte att lagra dina bildkällor i datafilen innan du kör programmet.
Steg 3: Musikladdning, uppspelning och stopp
I det följande börjar vi formellt introducera tillkallelse av musik för dig. Mycket liknar bildladdning, du måste deklarera ett ljudobjekt i början. Du kan hänvisa till exemplet nedan för själva grammatiken.
Kodexempel (10-1):
[cceN_cpp theme = "gryning"] importera bearbetning. ljud.*;
SoundFile ljud;
void setup () {
storlek (640, 360);
bakgrund (255);
sound = new SoundFile (detta, "1.mp3");
}
void draw () {
}
void keyPressed () {
//Spelljud
if (key == 'p') {
sound.play ();
}
// Stoppa ljud
if (key == 's') {
sound.stop ();
}
} [/cceN_cpp]
Förberedelse:
Själva bearbetningen innehåller inget ljudbibliotek. Du måste ladda ner den själv. Så innan du skriver din kod är det bättre att göra följande förberedelser.
Lägg till bibliotek i bearbetning. Här är den vanliga praxisen. Välj från menyraden för "Verktyg"- "Lägg till verktyg" och växla sedan till "Bibliotek". Mata in nyckelorden i biblioteket i sökkolumnen så att du kan ladda ner och installera det direkt.
Men om vi använder den här funktionen i vårt hemland (i Kina) kan vi inte ladda ner den genom att ansluta webben direkt. Vi måste starta VPN. Även om vi startar det kommer det att finnas instabila förhållanden. Så du måste ha tålamod för att prova det flera gånger. Detta är den mest bekväma sättet att ladda. Om du inte kan installera måste du ladda ner från den officiella webbplatsen manuellt. (https://processing.org/reference/libraries/) Eftersom den manuella installationsmetoden är mycket komplicerad kommer vi att diskutera det ytterligare i det andra kapitlet.
Kod Exaplain:
Ljudbiblioteket kan fungera korrekt efter att förberedelserna har slutförts. Koppla ovanstående kod, klicka på KÖR, sedan fungerar den. Tryck på knappen "P" för att spela musik, "S" för att stoppa musiken.
Om det är van vid programmet måste vi ladda det först. I början måste vi lägga till en mening "import processing.sound.*". "import" är nyckelordet, vilket betyder att ladda bokstavligen. Lägg till bibliotekets namn bakom "import", då laddar det biblioteket. Svansen följer vanligtvis märket "*", så den laddar alla bibliotekrelaterade klasser i programmet utan att behöva lägga till dem en efter en manuellt.
I den andra meningen har "SoundFile sound;" deklarerat ett ljudobjekt. SoundFile liknar PImage.
Inom funktionsinställningen används "sound = new SoundFile (detta," 1.mp3 ");" för att skapa ett objekt och definiera dess läsväg. Här har vi faktiskt redan börjat använda ett nytt koncept Class. Just nu diskuterar vi det inte djupt. Vi behöver bara veta att det är en fast skrivmetod och den sista parametern är för att fylla adressen till musikkällan.
Bland keyPressed () -händelser fungerar "sound.play ()" och "sound.stop ()" relativt som effekten av spel och stopp. "." i mitten indikerar en medlemsfunktion som spelar och stoppar hör till ljudobjekt. Vi kan betrakta medlemsfunktionen som den funktion som ingår i objektet. Det tillhör detta objekt, som definieras på förhand. Senare, när vi behöver spela flera ljudobjekt, behöver vi bara lägga till ".play ()" bakom det relativa variabelnamnet.
Ljudkällor ska lagras i datafilen under samma katalog över sketchfile (med pde -suffix). Om det inte finns någon kan du skapa en manuellt.
Glöm inte att skriva funktionsteckning. Även om du inte ritade någon grafik, är det nödvändigt att spela musik framgångsrikt.
Ovanstående procedur verkar ganska komplex, men du behöver bara lägga till flera meningar med kod, då kan du förverkliga spelfunktionen. Det är mycket bekvämt.
Bearbetning stöder vanliga ljudformat som mp3, wav, ogg, etc.
Steg 4: Musikhastighetskontroll
Följande exempel kommer att bli mycket intressanta. Bearbetning har gett några funktioner som kan styra musikhastigheten. Samtidigt kommer tonerna att ändras med musikens hastighet. När vi använder musen för att styra kommer det att generera en mycket psykedelisk effekt.
Videos webbplats:
Kodexempel (10-2):
[cceN_cpp theme = "gryning"] importera bearbetning. ljud.*;
SoundFile ljud;
void setup () {
storlek (640, 360);
bakgrund (255);
sound = new SoundFile (detta, "1.mp3");
}
void draw () {
flottörhastighet = mouseX/(float) bredd * 3;
ljudhastighet (hastighet);
float vol = musY/(float) höjd * 4;
sound.amp (vol);
}
void keyPressed () {
//Spelljud
if (key == 'p') {
sound.play ();
}
// Stoppa ljud
if (key == 's') {
sound.stop ();
}
} [/cceN_cpp]
Kod Förklara:
Funktionen.rate () styr ljuduppspelningshastigheten. Värdet inom parentes avgör hur snabbt och långsamt spelhastigheten är. När värdet är 1 är spelhastigheten normal. När det är över 1, accelerera sedan; medan det under 1, sedan sakta ner.
Funktion.amp () styr ljudvolymen. Värdet inom parentes bestämmer volymvärdet. När det är 1 är volymvärdet normalt. När det är över 1, öka sedan volymen; medan den är under 1, minska sedan volymen.
Här har vi byggt två lokala variabler hastighet och vol som parametrar att ladda in i. Därför ändrar musens horisontella koordinat musiktonen och den vertikala koordinaten ändrar musikvolymen.
Steg 5: Videospelning och stopp
Vid bearbetning liknar videoladdning ljudladdning. Du måste ladda ner videobiblioteket först. (https://processing.org/reference/libraries/video/index.html)
Kodexempel (10-3):
[cceN_cpp theme = "dawn"] importera bearbetning.video.*;
Film mov;
void setup () {
storlek (640, 360);
bakgrund (0);
mov = ny film (detta, "1.film");
}
void movieEvent (filmfilm) {
mov.read ();
}
void draw () {
bild (mov, 0, 0, 640, 360);
}
void keyPressed () {
if (key == 'p') {
mov.play ();
}
if (key == 's') {
mov.stop ();
}
if (key == 'd') {
mov.pause ();
}
} [/cceN_cpp]
Videoskärmdump:
Kod Förklara:
Den första meningen "import processing.video.*;" Används för att ladda videobibliotek.
Den andra meningen "Movie mov;" används för att deklarera videoobjekt. Bland dem liknar funktionen "Film" PImage.
I funktionsinställningen är effekten av "mov = new Movie (denna," 1.mov ");" att skapa objekt och definiera dess läsväg. Den sista parametern ska fyllas i med videokällans adress.
Bakom installationen representerar movieEvent videohändelse. Den används för att uppdatera och läsa videoinformation. "mov.read ()" i händelsen betyder läst.
Med undantag för visning av bilder kan funktionsbild också visa video. Vi kan betrakta videoobjekt som en dynamisk bild. Den första parametern, vi fyller i variabelnamnet på videoobjektet. Den andra och tredje parametern är den horisontella och vertikala koordinaten som ritas av video. Den fjärde och femte parametern bestämmer längden och bredden på videodisplayen.
Funktion.play () betyder spel. Funktion.stop () betyder stopp, och det kommer att återställa videon. Funktion.pause () betyder paus. Det avbryter det aktuella spelet, vilket fortsätter tills funktionen.play () åberopas.
Steg 6: Videohastighetskontroll
Kodexempel (10-4):
[cceN_cpp theme = "dawn"] importera bearbetning.video.*;
Film mov;
void setup () {
storlek (640, 360);
bakgrund (0);
mov = ny film (detta, "transit.mov");
}
void movieEvent (filmfilm) {
mov.read ();
}
void draw () {
bild (mov, 0, 0, bredd, höjd);
float newSpeed = mouseX/(float) bredd * 4;
mov.speed (newSpeed);
}
void keyPressed () {
if (key == 'p') {
mov.play ();
}
if (key == 's') {
mov.stop ();
}
if (key == 'd') {
mov.pause ();
}
}
[/cceN_cpp]
Kod Förklara:
Funktion.hastighet () kan användas för att styra videouppspelningshastigheten. När parametervärdet är 1 är spelhastigheten normal. När värdet överstiger 1, accelerera sedan; medan det är under 1, avkaser sedan.
Eftersom vi har byggt en lokal variabel newSpeed och importerat den till funktionssetSpeed () påverkar musens koordinat direkt uppspelningen av videon.
När det gäller fler exempel på video kan du hänvisa till bibliotek - video i fallbiblioteket.
Steg 7: Bearbetning av vanliga händelser
Tidigare har vi bara introducerat keyPressed () -händelse. Det kommer att aktiveras efter att tangentbordet har tryckts in. I det följande kommer vi att introducera andra vanliga händelser i Processing för dig.
Användningen av ovanstående händelser liknar keyPressed. De har ingen sekvens i kodskrivning. Med andra ord, oavsett vilken händelse du placerade före eller bakom funktionsinställningen får du samma resultat. Exekveringsordern är endast relaterad till det utlösande tillståndet för själva händelsen. Endast om villkoret är uppfyllt kommer det att köras. Händelserna ovan är alla väldigt lätta att förstå. Du måste bara göra ett litet experiment, då kan du snabbt förstå deras användningsområden.
Händelseflöde
Vi kan använda ett exempel för att känna till genomförandeordningen för händelser.
Kodexempel (10-5):
[cceN_cpp theme = "dawn"] ogiltig inställning () {
frameRate (2);
println (1);
}
void draw () {
println (2);
}
void mousePressed () {
println (3);
}
void mouseMoved () {
println (4);
}
void mouseReleased () {
println (5);
}
void keyPressed () {
println (6);
}
void keyReleased () {
println (7);
} [/cceN_cpp]
Kod Förklara:
I funktionsinställningen har function frameRate () ställt in programmets hastighet till 2 bilder per sekund. Att sänka bildhastigheten kan hjälpa oss att observera utmatningen i konsolen om händelser som utlöses omedelbart kommer att borstas av nya data bakåt.
Försök att flytta musen, klicka på musen, släpp musen och observera resultatet. Lär känna händelseutförandet genom println.
Det som är värt att uppmärksamma är att ritfunktioner inte kan skrivas in i andra händelser förutom funktionsteckning, eller så kan den inte visas. Om vi vill styra dolda och visa grafiska komponenter genom händelser som keyPressed, kan vi överväga att bygga bool -variabel som medium.
Händelser kommer att köras i ordning. Först när all kod i aktuell händelse har implementerats kommer den att köra koden i nästa händelse.
Steg 8: Omfattande exempel-Musiktangentbord
I kombination med de nyligen uppfattade händelserna kan vi lägga till nya interaktioner i vårt program. Därefter, bara med några minuter, kan vi enkelt analoga ett musiktangentbord.
Videos webbplats:
Kodexempel (10-6):
[cceN_cpp theme = "gryning"] importera bearbetning. ljud.*;
SoundFile sound1, sound2, sound3, sound4, sound5;
booleskt nyckel1, nyckel2, tangent3, tangent4, tangent5;
void setup () {
storlek (640, 360);
bakgrund (255);
noStroke ();
sound1 = ny SoundFile (detta, "do.wav");
sound2 = ny SoundFile (detta, "re.wav");
sound3 = ny SoundFile (detta, "mi.wav");
sound4 = ny SoundFile (detta, "fa.wav");
sound5 = ny SoundFile (detta, "so.wav");
}
void draw () {
bakgrund (255, 214, 79);
rectMode (CENTER);
flottör w = bredd * 0,1;
flyta h = höjd * 0,8;
if (key1) {
fyllning (255);
} annat {
fyllning (238, 145, 117);
}
rekt (bredd/6, höjd/2, w, h);
if (key2) {
fyllning (255);
} annat {
fyllning (246, 96, 100);
}
rekt (bredd/6 * 2, höjd/2, w, h);
if (key3) {
fyllning (255);
} annat {
fyllning (214, 86, 113);
}
rekt (bredd/6 * 3, höjd/2, w, h);
if (key4) {
fyllning (255);
} annat {
fyllning (124, 60, 131);
}
rekt (bredd/6 * 4, höjd/2, w, h);
if (key5) {
fyllning (255);
} annat {
fyllning (107, 27, 157);
}
rekt (bredd/6 * 5, höjd/2, w, h);
}
void keyPressed () {
if (key == 'a') {
sound1.play ();
key1 = true;
}
if (key == 's') {
sound2.play ();
key2 = true;
}
if (key == 'd') {
sound3.play ();
key3 = true;
}
if (key == 'f') {
sound4.play ();
key4 = true;
}
if (key == 'g') {
sound5.play ();
key5 = true;
}
}
void keyReleased () {
if (key == 'a') {
key1 = false;
}
if (key == 's') {
key2 = false;
}
if (key == 'd') {
key3 = false;
}
if (key == 'f') {
key4 = false;
}
if (key == 'g') {
key5 = false;
}
} [/cceN_cpp]
Kod Förklara:
Vi måste skapa flera ljudobjekt för att läsa den relativa ljudinformationen för att spela olika ljud när olika tangenter utlöses.
Här använder vi en ny händelse keyReleased (). Funktionen för denna händelse är att återställa tangentbordets färg till sin ursprungliga färg. När du släpper nyckeln aktiveras den.
De fem booleska värdena som deklareras i huvudet används för att detektera nyckelstatus.
Steg 9: Omfattande exempel-musikpalett 1
Förutom tangentbordshändelse är musevenemang en bra sak att vi måste använda det flexibelt. Följande exempel är för oss att skapa en musikpalett, bland vilken vi har använt två musrelaterade händelser.
Videos webbplats:
Kodexempel (10-7):
[cceN_cpp theme = "gryning"] importera bearbetning. ljud.*;
SoundFile sound1, sound2, sound3, sound4, sound5;
boolean isDragging;
void setup () {
storlek (640, 360);
bakgrund (255, 214, 79);
noStroke ();
sound1 = ny SoundFile (detta, "do.wav");
sound2 = ny SoundFile (detta, "re.wav");
sound3 = ny SoundFile (detta, "mi.wav");
sound4 = ny SoundFile (detta, "fa.wav");
sound5 = ny SoundFile (detta, "so.wav");
}
void draw () {
if (isDragging) {
fyllning (107, 27, 157, 100);
ellips (mouseX, mouseY, 16, 16);
}
}
void mouseDragged () {
isDragging = true;
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 = false;
} [/cceN_cpp]
Kod Förklara:
Vi hoppas att vi först kan rita bilder när vi har tryckt på musen och dragit den. Så vi måste bygga en booleska variabel isDragging för att få aktuell status.
När du drar musen blir isDragging verkligt värde så att ritfunktioner inom Draw kommer att utföras. Det kommer att lämna spår på skärmen. När vi släpper musen blir isDragging falskt värde. Så ritningsfunktionerna i funktionen draw kommer att stoppa körningen.
Vi har utformat flera utlösande förhållanden vid musdragning. Till exempel, när den horisontella koordinaten för musen är mellan 100 och 105 pixlar, spelas musik upp automatiskt. Detta gör att skärmen skapade flera osynliga strängar. Endast om musen passerar genom vissa områden, kommer den att utlösa den relativa musiken.
Steg 10: Omfattande exempel-Music Palette 2 (uppdaterad version)
Effekten av exemplet ovan är redan bra nog. Men om vi tittar noga på det kommer vi att hitta massor av problem. Till exempel, när musen rör sig mycket snabbt, kommer den att lämna en rund punkt på skärmen varje gång den rör sig. Det är inte en sammanhängande rak linje. Samtidigt orsakar det också viss musikläcka. Medan musen rör sig mycket långsamt och passerar genom positionen när den horisontella koordinaten är mellan 100 och 105, kommer den att sända musik flera gånger på mycket kort tid, vilket ger dig en känsla av att fastna. Alla dessa problem, vi kan lösa det genom exemplet nedan.
Du kan titta på videor i länken nedan:
v.qq.com/x/page/w03226o4y4l.html
Kodexempel (10-8):
[cceN_cpp theme = "gryning"] importera bearbetning. ljud.*;
SoundFile sound1, sound2, sound3, sound4, sound5;
boolean isDragging;
void setup () {
storlek (640, 360);
bakgrund (255, 214, 79);
noStroke ();
sound1 = ny SoundFile (detta, "do.wav");
sound2 = ny SoundFile (detta, "re.wav");
sound3 = ny SoundFile (detta, "mi.wav");
sound4 = ny SoundFile (detta, "fa.wav");
sound5 = ny SoundFile (detta, "so.wav");
}
void draw () {
if (isDragging) {
stroke (107, 27, 157, 100);
strokeWeight (10);
line (mouseX, mouseY, pmouseX, pmouseY);
}
}
void mouseDragged () {
isDragging = true;
if ((mouseX - 100) * (pmouseX - 100) <0) {
sound1.play ();
}
if ((mouseX - 200) * (pmouseX - 200) <0) {
sound2.play ();
}
if ((mouseX - 300) * (pmouseX - 300) <0) {
sound3.play ();
}
if ((mouseX - 400) * (pmouseX - 400) <0) {
sound4.play ();
}
if ((mouseX - 500) * (pmouseX - 500) <0) {
sound5.play ();
}
}
void mouseReleased () {
isDragging = false;
} [/cceN_cpp]
Kod Förklara:
Här har vi använt två variabler pmouseX och pmouseY som bärs i själva processsystemet. De liknar mouseX och mouseY men vad de erhållit är musens koordinat i den sista ramen.
I Function draw har vi använt funktionsrad () för att ersätta den ursprungliga funktionen ellips (). Detta gör koordinaten för den sista ramen direkt ansluten till koordinaten för den aktuella ramen. Så vi kan rita sammanhängande raka linjer eller kurvor.
Om musen dras har vi utformat ett nytt utlösande tillstånd. Genom att bedöma om koordinaten för den sista ramen och den aktuella ramen är på samma sida för att veta om en viss koordinat korsas. Ta detta villkor som ett exempel: "if ((mouseX - 100) * (pmouseX - 100) <0)". Bland det, från det positiva och negativa värdet som härrör från "mouseX - 100", kan vi veta om mouseX är till höger eller vänster om det horisontella koodinatet 100. På samma sätt som "pmouseX - 100". Därför, när de två punkterna på framsidan och baksidan inte är på samma sida, multiplicerar en positiv en negativ, det kommer att få ett nytt negativt tal. Således är utförandevillkoret uppfyllt.
Ovanstående är ett förenklat uttryck, som smart har använt en viss matematisk algoritm-Två negativa multiplicerar kommer att skapa en positiv. Du kan också dela upp det i två situationer för att diskutera separat. Det är dock mycket mer komplicerat att skriva bedömningsvillkor. Bedömningsvillkoren "if ((mouseX = 100) || (mouseX> 100 && pmouseX <= 100))" motsvarar de bestämmande villkoren för källkoden.
Steg 11: Relativa funktioner om ljud- och videokontroll
Ovannämnda funktioner är tillräckliga för allmänna användningsscenarier. Om du vill gräva djupt, här har jag samlat några vanliga funktioner i förhållande till ljud och video för dig. Du kan utforska dess användning enligt dina egna krav.
För mer introduktion kan du hänvisa till dokument från den officiella webbplatsen.
Ljud (https://processing.org/reference/libraries/sound/index.html)
Video (https://processing.org/reference/libraries/video/index.html)
Denna artikel kommer från designern Wenzy.
Steg 12: Relativa avläsningar:
Intressant programmeringsvägledning för designer-bearbetning av inledande beröring
Intressant programmeringsvägledning för Designer - Skapa ditt första bearbetningsprogram
Intressant programmeringsvägledning för designer-få din bild att köras (del ett)
Intressant programmeringsvägledning för designer-få din bild att köras (del två)
Intressant programmeringsvägledning för Designer – Program Process Control- Loop Statement
Intressant programmeringsvägledning för Designer-Programprocesskontroll-Villkorsuttalande (del ett)
Intressant programmeringsvägledning för Designer-Programprocesskontroll-Villkor (del två)
Intressant programmeringsvägledning för designer-anpassade funktioner och fraktal rekursion
Intressant programmeringsvägledning för designer-anpassade funktioner och fraktal rekursion
Intressant bearbetningsprogrammeringsguide för designer-färgkontroll
Steg 13: Källa
Denna artikel är från:
Om du har några frågor kan du kontakta : [email protected].