Caricamento di file audio esterni

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

Ogni istanza della classe Sound serve per caricare e attivare la riproduzione di una risorsa audio specifica. Un'applicazione non può riutilizzare un oggetto Sound per caricare più di un suono. Per creare una nuova risorsa audio, è necessario creare un nuovo oggetto Sound.

Se si carica un file audio di piccole dimensioni, ad esempio un clic da associare a un pulsante, l'applicazione può creare un nuovo oggetto Sound e fare in modo che carichi automaticamente il file audio, come mostrato di seguito:

var req:URLRequest = new URLRequest("click.mp3"); 
var s:Sound = new Sound(req);

La funzione di costruzione Sound() accetta un oggetto URLRequest come primo parametro. Quando viene fornito un valore per il parametro URLRequest, il nuovo oggetto Sound inizia automaticamente il caricamento della risorsa audio specificata.

A eccezione dei casi più semplici, l'applicazione deve tenere in considerazione l'avanzamento del caricamento del file audio e controllare che non si verifichino errori durante il caricamento. Ad esempio, se il suono di un clic ha dimensioni piuttosto elevate, potrebbe non essere stato caricato completamente quando l'utente fa clic sul pulsante che attiva il suono. Il tentativo di riprodurre un suono non caricato può provocare un errore in fase di runtime. Pertanto, è preferibile attendere che il suono venga caricato completamente prima di consentire all'utente di effettuare operazioni che possono avviare la riproduzione di tale suono.

Un oggetto Sound invia una serie di eventi diversi durante il processo di caricamento dell'audio. L'applicazione può intercettare tali eventi per tenere traccia dell'avanzamento del caricamento e garantire che l'audio venga caricato completamente prima di essere riprodotto. La tabella seguente elenca gli eventi che possono essere inviati da un oggetto Sound.

Evento

Descrizione

open ( Event.OPEN )

Inviato appena prima dell'inizio dell'operazione di caricamento dell'audio.

progress ( ProgressEvent.PROGRESS )

Inviato periodicamente durante il caricamento dell'audio quando vengono ricevuti i dati dal file o dal flusso.

id3 ( Event.ID3 )

Inviato quando sono disponibili dati ID3 per un file audio mp3.

complete ( Event.COMPLETE )

Inviato quando sono stati caricati tutti i dati della risorsa audio.

ioError ( IOErrorEvent.IO_ERROR )

Inviato quando non è possibile individuare un file audio o quando il processo di caricamento viene interrotto prima che siano stati ricevuti tutti i dati audio.

Il codice riportato di seguito illustra come riprodurre un file audio dopo che ne è terminato il caricamento:

import flash.events.Event; 
import flash.media.Sound; 
import flash.net.URLRequest; 
 
var s:Sound = new Sound(); 
s.addEventListener(Event.COMPLETE, onSoundLoaded); 
var req:URLRequest = new URLRequest("bigSound.mp3"); 
s.load(req); 
 
function onSoundLoaded(event:Event):void 
{ 
    var localSound:Sound = event.target as Sound; 
    localSound.play(); 
}

Come prima cosa, l'esempio di codice crea un nuovo oggetto Sound senza assegnare un valore iniziale per il relativo parametro URLRequest. Quindi, intercetta l'evento Event.COMPLETE dall'oggetto Sound, provocando l'esecuzione del metodo onSoundLoaded() quando sono stati caricati tutti i dati audio. Infine, chiama il metodo Sound.load() con un nuovo valore di URLRequest per il file audio.

Il metodo onSoundLoaded() viene eseguito quando il caricamento dell'audio è completato. La proprietà target dell'oggetto Event è un riferimento all'oggetto Sound. Quando si chiama il metodo play() dell'oggetto Sound, viene avviata la riproduzione dell'audio.

Monitoraggio del processo di caricamento dell'audio

I file audio possono avere dimensioni notevoli e il loro caricamento può richiedere parecchio tempo. Mentre Flash Player e AIR consentono all'applicazione di riprodurre l'audio anche prima che ne sia terminato il caricamento, è possibile fornire all'utente un'indicazione di quanti dati audio sono stati caricati e di quanti sono già stati riprodotti.

La classe Sound invia due eventi che rendono relativamente facile la visualizzazione dell'avanzamento del caricamento di un file audio: ProgressEvent.PROGRESS e Event.COMPLETE . L'esempio seguente mostra come utilizzare questi eventi per visualizzare le informazioni sull'avanzamento del caricamento di un file:

import flash.events.Event; 
import flash.events.ProgressEvent; 
import flash.media.Sound; 
import flash.net.URLRequest; 
 
var s:Sound = new Sound(); 
s.addEventListener(ProgressEvent.PROGRESS, onLoadProgress); 
s.addEventListener(Event.COMPLETE, onLoadComplete); 
s.addEventListener(IOErrorEvent.IO_ERROR, onIOError); 
 
var req:URLRequest = new URLRequest("bigSound.mp3"); 
s.load(req); 
 
function onLoadProgress(event:ProgressEvent):void 
{ 
    var loadedPct:uint =         Math.round(100 * (event.bytesLoaded / event.bytesTotal)); 
    trace("The sound is " + loadedPct + "% loaded."); 
} 
 
function onLoadComplete(event:Event):void 
{ 
    var localSound:Sound = event.target as Sound; 
    localSound.play(); 
} 
function onIOError(event:IOErrorEvent) 
{ 
    trace("The sound could not be loaded: " + event.text); 
}

Questo codice crea innanzi tutto un oggetto Sound, quindi aggiunge dei listener a tale oggetto per gli eventi ProgressEvent.PROGRESS e Event.COMPLETE . Dopo che il metodo Sound.load() è stato chiamato e sono stati ricevuti i primi dati dal file audio, si verifica un evento ProgressEvent.PROGRESS che attiva il metodo onSoundLoadProgress() .

La percentuale dei dati audio caricati è uguale al valore della proprietà bytesLoaded dell'oggetto ProgressEvent divisa per il valore della proprietà bytesTotal . Le stesse proprietà bytesLoaded e bytesTotal sono disponibili anche nell'oggetto Sound. L'esempio precedente mostra semplicemente messaggi relativi all'avanzamento del caricamento dell'audio, ma potete utilizzare i valori bytesLoaded e bytesTotal per aggiornare i componenti della barra di avanzamento, ad esempio quelli forniti con il framework di Adobe Flex o con lo strumento di creazione di Adobe Flash.

Questo esempio mostra anche come un'applicazione riconosce e risponde a un errore mentre carica dei file audio. Ad esempio, se non è possibile individuare un file audio con un determinato nome, l'oggetto Sound invia un evento Event.IO_ERROR . Nel codice precedente, viene eseguito il metodo onIOError() , che visualizza un breve messaggio di errore quando si verifica un errore.