Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. Sound Design
Gamedevelopment

Comprensione ed implementazione del audio 3D in Game Maker: Studio

by
Difficulty:IntermediateLength:LongLanguages:

Italian (Italiano) translation by Chip (you can also view the original English article)

What You'll Be Creating

L'audio è un elemento fondamentale dell'esperienza di gioco generale, GameMaker: Studio fornisce un modo relativamente semplice per di implementare l'audio 3D nei vostri progetti.

Per capire meglio il concetto di audio 3D, immaginate semplicemente di aggiungere un paio di orecchie digitali ad un oggetto di gioco controllato dal giocatore. Come il giocatore si avvicina ad una sorgente sonora all'interno del gioco, il volume di tale fonte diventa più forte; come il giocatore si allontana, il volume diminuisce fino a diventare silenzioso. La posizione del giocatore rispetto alla sorgente audio comporterà anche audio stereo direzionale e la velocità del suono applicata ad un oggetto in movimento potrà generare un effetto effetto Doppler.

Questo insieme di caratteristiche audio immersive può essere realizzato attraverso un sistema di emettitori audio e un ascoltatore audio. In questo tutorial, creeremo due scene che incorporano audio 3D in modi diversi, come si vede nel video dimostrativo. È possibile scaricare i file sorgente e la demo EXE compilata da GitHub.

Comprendere l'audio 3D

I concetti coinvolti nell'audio 3D sono simili per tutti gli ambienti di sviluppo del gioco, perché si basano su regole del mondo reale: il suono diventa più forte quando ci si avvicina alla fonte sonora e il suono proveniente dalla destra sarà più forte al vostro orecchio destro. Questi principi di base possono essere realizzati manualmente calcolando il guadagno e l'uscita di una sorgente audio in relazione ad un particolare oggetto di gioco, ma GameMaker: Studio fornisce una serie di potenti funzioni facili da utilizzare che vi daranno il controllo diretto delle API audio .

L'emettitore

In GameMaker: Studio, gli emettitori audio agiscono come fonte di un asset sonoro 3D. L'emettitore è definito da una variabile creata dall'utente e da una posizione (x, y, z) che può essere statica o dinamica. Il volume dell'emettitore è controllato dai valori di gain (guadagno) e di falloff (caduta) e gli effetti in tempo reale possono essere applicati attraverso i valori di pitch (intensità) e di velocity (velocità). Il modo in cui l'emettitore gestisce lo smorzamento audio è determinato dal modello di distanza applicato. Possono esistere molteplici emettitori audio all'interno della stessa scena.

L'ascoltatore

L'ascoltatore audio agisce come le "orecchie" che ricevono il suono 3D inviato tramite l'emettitore. L'ascoltatore si trova in una posizione (x, y, z) che può essere statica o dinamica, ma anche l'orientamento della ascoltatore è altrettanto importante.

Orientamento dell'ascoltatore determina la direzione precisa e l'angolo verso cui sta "guardando". L'orientamento predefinito dell'ascoltatore in GameMaker: Studio risulta invertito nei canali audio destro e sinistro per l'audio 3D  e viene corretto successivamente nella fase di realizzazione.

L'effetto Doppler

Senza entrare in una lunga e completa spiegazione, l'effetto Doppler può essere descritto come la variazione di frequenza del suono in relazione al movimento e alla velocità del trasmettitore o dell'ascoltatore. In Game Maker: Studio, l'effetto Doppler è ottenuto assegnando vettori alla velocità dell'emettitore audio o dell'ascoltatore. Per una spiegazione approfondita, leggere la voce sull'effetto Doppler da Wikipedia.

Implementazione dell'audio 3D

Implementare l'audio 3D nel vostro progetto GameMaker è un processo in tre fasi. È necessario definire correttamente l'emettitore all'interno di un oggetto di gioco esistente, inserire l'oggetto nella stanza, e dire all'emettitore quando e come riprodurre un suono. È quindi necessario definire l'orientamento e la posizione dell'ascoltatore all'interno di un oggetto di gioco esistente che sia presente nella stessa stanza insieme all'emettitore.

Il primo passo, però, comporta l'importazione e la definizione delle risorse audio.

Importare gli Assets

Iniziate cliccando su Resources nella barra degli strumenti principale di GameMaker e selezionate Create Sound dal menu a discesa. Inserire un nome per l'asset del suono e selezionare gli attributi il suono desiderati per lo streaming e la compressione dei file. Poi, nella Target Options della sezione Sound Properties, fare clic sul primo menu a tendina e selezionare 3D dalla lista di opzioni.

Designando l'asset come un suono 3D, siamo in grado di trarre vantaggio dalle API audio di GameMaker in modo unico.

Un Emettitore stazionario

Nel nostro primo esempio, creeremo una sorta di istanza di città isometrica in stile Sim con audio 3D con un emettitore fisso. Il nostro ascoltatore sarà legato ad un oggetto di gioco che segue il cursore del mouse e l'emettitore del suono 3D rimarrà all'interno di un oggetto che non si muove. Questo oggetto sarà rappresentato da un piccolo gruppo di edifici e l'emettitore suonerà un suono da ambiente cittadino con clacson e altri suoni da traffico di automobili.

Questo ci permetterà di testare la proprietà falloff audio del sistema audio 3D e saremo in grado di comprendere meglio l'importanza dell'orientamento dell'ascoltatore.

Creazione dell'ascoltatore

Il nostro ascoltatore audio 3D esisterà all'interno di un oggetto che segue il cursore del mouse. In questo esempio, l'oggetto sarà identificato da uno sprite che assomiglia ad un marcatore GPS. L'oggetto obj_listener contiene due importanti blocchi di codice: uno nell'evento Create e uno nell'evento Step.

Fare clic sul pulsante Add Event e selezionare Create per aggiungere un Create evento al obj_listener. Trascinare l'icona Execute Code dal tab Control della finestra delle proprietà di obj_listener nella sezione Actions del pannello Create event. Fare doppio clic sull'icona di Execute Code per aprire l'editor di codice GML e aggiungere la seguente riga di codice:

Questo codice assicura che, non appena si crea l'oggetto ascoltatore, venga posizionato nello spazio 3D per guardare verso la parte alta a destra dello schermo. L'audio proveniente da un emettitore situato a destra dell'ascoltatore sarà più presente nell'altoparlante destro, e viceversa. Questa è la configurazione standard che solitamente si usa per quasi ogni tipo di implementazione dell'ascoltatore in GameMaker: Studio.

Se volevamo scambiare l'audio sinistro e destro, allora dovevamo utilizzare il seguente codice per l'orientamento:

Aggiungete un evento Step per obj_listener e trascinate un'altra icona Execute Code nel pannello Actions. Aprite, ancora una volta, l'editor di codice GML ed inserite le seguenti righe di codice:

Questo codice rileva la posizione corrente del cursore del mouse e assegna queste coordinate alla posizione dell'oggetto obj_listener. Anche la posizione dell'ascoltatore audio è definita da queste coordinate. Inserendo questo codice nell'evento Step, ci assicuriamo che l'oggetto obj_listener, il suo sprite che lo rappresenta e l'ascoltatore siano sempre nella stessa posizione, dal momento che il codice evento di Step viene eseguito ad ogni fotogramma a runtime.

(Lo 0 in questo codice è la posizione z dell'ascoltatore. Poiché il nostro gioco è in 2D, il nostro ascoltatore sarà sempre a 0 sulla z.)

Aprite stanza in cui si vuole che l'oggetto ascoltatore appaia. Fare clic sulla scheda Objects e fare clic all'interno del pannello per visualizzare l'elenco degli oggetti disponibili. Selezionare il vostro oggetto ascoltatore e fare clic all'interno della stanza per posizionarlo. La posizione di partenza di questo oggetto non ha importanza, perché sarà aggiornata in modo che corrisponda alla posizione del cursore del mouse in fase di runtime.

Questo è tutto per l'ascoltatore. Ora dobbiamo creare qualcosa da ascoltare per l'ascoltatore.

Creazione del emettitore

Come con l'ascoltatore, ci concentreremo esclusivamente sugli eventi Create e Step dell'oggetto emettitore. In questo caso, piazzeremo l'emettitore nell'oggetto obj_city.

Aggiungete gli eventi Create e Step a obj_city e aggiungete un Execute Code per entrambi gli eventi.

Nel codice GML dell'evento Create, aggiungere il seguente:

(s_emit è il nome del nostro nuovo emettitore.)

Abbiamo scelto il modello di distanza a decadimento esponenziale per questo esempio perché dà un costante aumento di decadimento in forte crescita, una volta che si incontra il punto di distanza riferimento. In questo modo il volume dell'audio 3D diminuisce man mano ci si allontana dall'oggetto, senza intoppi, senza salti, finché non arrivate molto vicino alla fonte. Per un elenco completo di modelli di smorzamento con le rispettive descrizioni approfondite, leggere la documentazione modelli falloff di GameMaker.

audio_emitter_falloff (emitter, falloff_ref, falloff_max, falloff_factor) è dove abbiamo impostato gli attributi del modello di decadimento (falloff):

  • emetter è la nostra variabile s_emit.
  • falloff_ref è il punto in cui la riduzione del volume inizierà.
  • falloff_max è il punto in cui l'ascoltatore sarà in grado di sentire l'emettitore di più.
  • falloff_factor è un numero utilizzato nel calcolo audio_falloff_set_model per determinare il risultato del decadimento. Nel nostro esempio, usiamo il valore di default di 1 in modo che il nostro emettitore s_emit cominci a decadere una volta che l'ascoltatore è a 100 pixel di distanza dall'emettitore, e l'ascoltatore sarà in grado di sentire l'emettitore a una distanza di 300 pixel o superiori .

audio_play_sound_on (emitter, sound, loop, priority) è come facciamo iniziare ad emettere il suono 3D all'emettitore:

  • emitter è la nostra variabile s_emit.
  • sound è il nostro asset audio 3D snd_cityaudio che abbiamo importato in precedenza.
  • loop determina se, alla fine, questo suono deve ripetersi o no.
  • priority è un valore da 0 a 100 che determina la 'importanza' del suono in riproduzione, numeri più grandi rappresentano suoni con priorità maggiore.

Nel nostro esempio, abbiamo un solo suono riprodotto, così che la priorità non importa. E dal momento che questo codice viene eseguito nell'evento Create e abbiamo scelto di ciclare il suono, questo risorsa audio 3D suonerà non appena viene caricata la stanza e continuerà a suonare fino a quando non viene indicato di fermarsi. E questo ci porta ad un passo molto importante:

Tale attività audio verrà riprodotta anche quando si carica un'altra stanza che non contiene l'emettitore. Al fine di fermare efficacemente il suono di questo asset una volta in una stanza diversa da quella che contiene l'emettitore, dobbiamo aggiungere un evento Room_End al obj_city.

Nel pannello Actions della Room End, aggiungiamo un altra icona Execute Code con il seguente codice GML:

Ora tutto quello che resta da fare è inserire l'oggetto obj_city nella stanza così come era stato posizionato prima l'ascoltatore. Lanciamo il gioco e sperimentiamo con la posizione del cursore del mouse per modificare la posizione dell'ascoltatore in relazione al emettitore per vedere esattamente come funziona nella pratica l'audio 3D.

Un emettitore in movimento con l'effetto Doppler

Nel secondo esempio, collegheremo all'emettitore un oggetto in movimento e applicheremo l'effetto Doppler mentre useremo lo stesso oggetto ascoltatore (listener) che abbiamo creato in precedenza.

Un oggetto proiettile si muove dal lato destro dello schermo verso sinistra. Quando il proiettile raggiunge il bordo dello schermo, si rovescia e riprende da dove era iniziato. (Non vedremo come creare questo movimento.) L'oggetto proiettile emette un suono in ciclo che può essere descritto come uno "whizzing" o "ronzio". Quando l'oggetto si avvicina all'ascoltatore, la frequenza del suono cambia, per l'effetto Doppler.

Creazione del emettitore

Aggiungere a Create e un evento Step all'oggetto obj_bullet, e aggiungere l'azione di Execute Code per entrambi gli eventi.

Nell'evento Create, aggiungere il seguente codice con l'editor di GML:

Qui, s_emit2 è il nome del nostro nuovo emettitore.

Questo emettitore userà lo stesso modello di decadimento definito nella stanza precedente, dal momento che solo un tipo di modello di decadimento può essere attivo alla volta, il nostro modello originale è adatto per questo esempio. Le nuove proprietà falloff utilizzano un riferimento di decadimento di 25 pixel, un massimo di decadimento di 200 pixel e un fattore di decadimento di 2.5 per il calcolo. L'asset snd_bullet inizia a suonare non appena viene creato l'oggetto, con priorità 1 e in loop all'infinito.

Nell'editor GML per l'evento Step, aggiungete questa riga di codice:

Poiché l'oggetto si muove e i valori della x e y cambiano continuamente, anche la posizione dell'emettitore verrà aggiornata nella nuova posizione ad ogni passo.

Non dimenticate di aggiungere l'oggetto proiettile alla camera, ed siate sicuri di aggiungere il codice sound_stop(snd_bullet) all'evento Room End dell'oggetto.

Creazione l'effetto Doppler

Il sistema audio 3D per l'oggetto proiettile è stato piazzato e l'ascoltatore funziona correttamente, ma cerchiamo di rendere le cose più interessanti con l'effetto Doppler.

L'aggiunta dell'effetto Doppler, in realtà, è molto semplice. Basta aprire l'azione Execute Code nel Create del obj_bullet e aggiungere la seguente riga di codice:

audio_emitter_velocity (emitter, vx, vy, vz) ci permette di definire le proprietà dell'effetto Doppler:

  • emitter è la nostra variabile s_emit 2.
  • vx è la velocità (in pixel per step) lungo l'asse x.
  • vy è la velocità (in pixel per step) lungo l'asse y.
  • vz si applica alla velocità lungo l'asse z, ma il nostro gioco è in 2D, quindi la impostando a 0.

Tipiche impostazioni di effetto Doppler utilizzano le variabili hspeed e vspeed di un oggetto per determinare i valori di velocità, ma in questo caso, abbiamo utilizzano un valore di -25 per creare il suono più realistico di un proiettile. È possibile testare l'oggetto con il seguente codice per notare la differenza:

Idee di implementazione

L'audio 3D può aggiungere, con il minimo sforzo richiesto, una notevole profondità e l'atmosfera al vostro progetto di gioco. Qui ci sono solo alcuni esempi per iniziare:

  • Un gioco hide-and-seek (nascondi e cerca) in cui devi ascoltare indizi sonori per trovare un oggetto nascosto.
  • Elettricità o pericolo di incendi in un platform dove si avvertono dei pericoli, man mano che ci si avvicina.
  • Un gioco in stile Frogger dove le auto sfrecciano tra voi utilizzando l'effetto Doppler.
  • Acqua che scorre in una grotta o vento che soffia attraverso un condotto d'aria per condurvi verso l'uscita.
  • Un gioco di spionaggio in cui devi avvicinarti a un obiettivo per ascoltare una conversazione.
Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.