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.