Carregamento de arquivos de som externos

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

Cada ocorrência da classe Sound existe para carregar e disparar a reprodução de um recurso de som específico. Um aplicativo não pode reutilizar um objeto Sound para carregar mais de um som. Para carregar um novo recurso de som, ele deve criar um novo objeto Sound.

Se estiver carregando um arquivo de som pequeno, como um som de clique a ser conectado a um botão, o aplicativo poderá criar um novo Sound e fazer com que ele carregue automaticamente o arquivo de som, conforme mostrado a seguir:

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

O construtor Sound() aceita um objeto URLRequest como seu primeiro parâmetro. Quando um valor é fornecido ao parâmetro URLRequest, o novo objeto Sound começa a carregar o recurso de som especificado automaticamente.

Em todos, menos nos casos mais simples, o aplicativo deve verificar se ocorrem erros durante o carregamento do som. Por exemplo, se o som de clique for razoavelmente grande, ele talvez não esteja completamente carregado quando o usuário clicar no botão que dispara o som. A tentativa de reproduzir um som não carregado pode provocar um erro em tempo de execução. É mais seguro aguardar que o carregamento do som seja concluído antes de permitir que os usuários executem ações que podem iniciar a reprodução de sons.

Um objeto Sound despacha vários eventos diferentes durante o processo de carregamento do som. O aplicativo pode ouvir esses eventos para controlar o progresso de carregamento e verificar se o som foi completamente carregado antes da reprodução. A tabela a seguir lista os eventos que podem ser despachados por um objeto Sound.

Evento

Descrição

abertura ( Event.OPEN )

Despachado imediatamente antes do início da operação de carregamento do som.

progresso ( ProgressEvent.PROGRESS )

Despachado periodicamente durante o processo de carregamento do som quando os dados são recebidos do arquivo ou do fluxo.

id3 ( Event.ID3 )

Despachado quando dados ID3 estão disponíveis para um som mp3.

concluído ( Event.COMPLETE )

Despachado quando todos os dados do recurso de som foram carregados.

ioError ( IOErrorEvent.IO_ERROR )

Despachado quando um arquivo de som não pode ser localizado ou quando o processo de carregamento é interrompido antes dos dados serem recebidos.

O código a seguir ilustra como reproduzir um som após a conclusão do carregamento:

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(); 
}

Primeiro, o código de amostra cria um novo objeto Sound sem dar a ele um valor inicial para o parâmetro URLRequest. Em seguida, ele ouve o evento Event.COMPLETE do objeto Sound, o que faz com que o método onSoundLoaded() seja executado quando todos os dados do som estão carregados. Em seguida, ele chama o método Sound.load() com um novo valor de URLRequest para o arquivo de som.

O método onSoundLoaded() é executado quando o carregamento do som é concluído. A propriedade target do objeto Event é uma referência ao objeto Sound. A chamada do método play() do objeto Sound inicia a reprodução do som.

Monitoramento do processo de carregamento do som

Arquivos de som podem ser muito grandes e levar muito tempo para serem carregados. Embora o Flash Player e o AIR permitam que o aplicativo reproduza sons mesmo antes de eles serem completamente carregados, talvez você queira dar ao usuário uma indicação da quantidade de dados de som carregada e da quantidade de som que já foi reproduzida.

A classe Sound despacha dois eventos que facilitam relativamente a exibição do progresso de carregamento de um som: ProgressEvent.PROGRESS e Event.COMPLETE . O exemplo a seguir mostra como usar esses eventos para exibir informações de progresso sobre o som que está sendo carregado:

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); 
}

Esse código primeiro cria um objeto Sound e, em seguida, adiciona ouvintes para esse objeto para os eventos ProgressEvent.PROGRESS e Event.COMPLETE . Após o método Sound.load() ter sido chamado e os primeiros dados terem sido recebidos do arquivo de som, ocorre um evento ProgressEvent.PROGRESS que dispara o método onSoundLoadProgress() .

A porcentagem dos dados de som que foi carregada é igual ao valor da propriedade bytesLoaded do objeto gressEvent dividido pelo valor da propriedade bytesTotal . As mesmas propriedades bytesLoaded e bytesTotal estão disponíveis no objeto Sound também. O exemplo acima simplesmente mostra mensagens sobre o progresso do carregamento do som, mas é possível usar facilmente os valores de bytesLoaded e bytesTotal para atualizar os componentes da barra de progresso, como os provenientes da estrutura do Adobe Flex ou da ferramenta de autoria do Adobe Flash.

Esse exemplo também mostra como um aplicativo pode reconhecer e responder a um erro ao carregar arquivos de som. Por exemplo, se um arquivo de som com o nome fornecido não puder ser localizado, um evento Event.IO_ERROR será despachado pelo objeto Sound. No código anterior, o método onIOError() executa e exibe uma breve mensagem de erro quando ocorre um erro.