@mezzo-forte/webaudio v1.0.0-beta.0
Mezzo Forte Web Audio module
Folder structure
/srcjs source files/exampleexample/test webpage
Testare l'applicazione
- clone
git clone https://github.com/francescocretti/mezzoforte-webaudio.git - install dependencies
npm install - link current module to npm global space
npm link /absolute/path/to/mezzoforte-webaudio(e.g.npm link ~/git/MezzoForte/webaudio-module/) - build with webpack
npm run build - run webpack development server
npm run start
Formati supportati
Formato mp3, aac (con contenitore m4a), wav, ogg (non supportato da Safari).
Tendenzialmente è preferibile non caricare file wav date le dimensioni dei file.
Fare riferimento a questa tabella per approfondire i formati audio supportati dai vari browser.
In sunto:
| FORMAT | CONTAINER | CHROME | FIREFOX | SAFARI | EDGE |
|---|---|---|---|---|---|
| PCM | wav | yes | yes | yes | yes |
| MP3 | mp3 | yes | if installed in OS | yes | yes |
| AAC | mp4 | yes | if installed in OS | yes | yes |
| VORBIS | ogg | yes | yes | NO | with WebMediaExtensions |
| OPUS | ogg | yes | yes | NO | with WebMediaExtensions |
Utilizzare i suoni nell'applicazione
Per utilizzare i suoni all'interno dell'applicazione esistono due alternative:
- Buffer Sources
- Media Stream Sources
Buffer Source Nodes
Sfruttano il metodo createBufferSource per caricare, decodificare e rendere disponibili il contenuto audio sotto forma di buffer, per essere riprodotto attraverso nodi AudioBufferSourceNode.
Questo approccio garantisce più precisione e controllo sull'audio ma, dato che il suono viene caricato direttamente in memoria, è consigliato per suoni più brevi (approssimativamente di durata inferiore al minuto).
Media Stream Sources
Sfruttano il metodo createMediaElementSource per wrpappare il contenuto di un elemento HTML5 <audio> o <video> dentro un nodo di tipo MediaElementAudioSourceNode, che sfrutta le potenzialità di streaming out-of-the-box dei tag HTML e wrappa il contenuto audio dentro il grafo di WebAudio API.
È meno flessibile di un Audio Buffer, ma è molto utile per contenuti audio lunghi.
Best practices
Prima di iniziare a lavorare con Web Audio API, è vivamente consigliata la lettura di questo articolo -> Web Audio API best practices
Definire i suoni da caricare
Per definire quali sono (e di che tipo) i suoni da utilizzare, occorre dichiarare un array di configurazione (nell'esempio qui sotto la variabile audioAssets),
specificando, per ogni suono, un identificativo a piacere (key), il path del file (url), se si tratta di un suono stereo o mono (channels) e se
si desidera un source node buffer o media-stream (type).
Ad esempio:
const audioAssets = [
{
key: 'suono_1',
url: '/audio/sound1.wav',
channels: 'stereo',
type: 'buffer'
},
{
key: 'suono_2',
url: '/audio/sound2_lossy.mp3',
channels: 'stereo',
type: 'media-stream'
}
];Per caricare i suoni richiamare il metodo App.load, che ha come unico argomento la configurazione dei file audio e restituisce una Promise.
Dopodichè si possono utilizzare i suoni caricati e decodificati, se ti tipo Buffer Source, o avviare lo streaming, se di tipo Media Stram Source.
Ad esempio (con riferimento ai suoni di esempio indicati qui sopra):
import MezzoForteAudioEngine from '@mezzo-forte/webaudio';
const App = new MezzoForteAudioEngine(audioContext);
App.load(audioAssets)
.then() => {
// avvia il suono sound1.wav
App.start('suono_1');
// setto un listnere sulla fine del suono /bch_mix.m4a
App.onended('suono_2', () => {
// suono_2 è terminato, posso fare qualcosa (ad esempio mostrare un messaggio, o triggerare un nuvo suono)
});
})
.catch(error => {
console.error('Opz, qualcosa è andato storto', error);
});I metodi attualmente disponibili per i suoni sono:
App.onended(sound_key, callback); // imposto una callback che viene eseguita al termine di sound_key
App.start(sound_key); // avvio sound_key dall'inizio
App.stop(sound_key); // stop
App.resume(sound_key); // riprendo sound_key dall'ultima posizione in cui si è stoppatoTODO
- aggiungere funzioni di fade
- aggiungere gestione di suoni azione (con solo metodo
trigger) - aggiungere qualche effetto (pan, gain, reverb?, distortion?)
- aggiungere possibilità di creare una sorta di playlist con i propri metodi
- altro? ogni suggerimento è ben accetto
4 years ago
4 years ago