Devido há um bug que acompanha o Flash desde suas primeiras versões, se definimos vários sons na mesma linha de tempo e desejamos controlar seu volume de maneira autônoma com ActionScript, não iremos conseguir.


Ao modificar o volume de um dos sons com o método setVolume, todos os demais sons terão o seu volume alterado ao mesmo tempo.


Seguindo a documentação do Flash, e supondo que teremos 2 sons na biblioteca do documento aberto, e que estes sons têm ativada a opção de vinculação ao exportar com seus respectivos identificadores, o código abaixo deveria funcionar:


var grilos_snd:Sound=new Sound();
var passaros_snd:Sound=new Sound();
grilos_snd.attachSound("grilos");
passaros_snd.attachSound("passaros");
grilos_snd.start(0, 5000);
passaros_snd.start(0, 5000);
passaros_snd.setVolume(20); // aqui se estabelce o volume para os dois sons


O modo de solucionar este problema é definido cada son para uma linha de tempo diferente passando um clip como parâmetro na função construtora de cada objeto Sound, assim:


var meuSom:Sound= new Sound(parametro_clip);


Podemos automatizar esse processo com a seguinte função do AS 2.0, onde passamos como parâmetro o identificador do son na biblioteca:


function criarSom(identificador:String):Sound {
var clip:MovieClip = this.createEmptyMovieClip("identificador"+this.getNextHighestDepth(), this.getNextHighestDepth());
var som:Sound = new Sound(clip);
som.attachSound(identificador);
return som;
}


Um exemplo de uso, tendo a função definida seria:


var grilos_snd:Sound = criarSom("grilos");
var passaros_snd:Sound = criarSom("passaros");
grilos_snd.start(0, 5000);
passaros_snd.start(0, 5000);
grilos_snd.setVolume(20); // agora sim controlamos os dois
passaros_snd.setVolume(70); // sons de modo independente


Com esta função no lugar de definiar um som com var meuSom:Sound=new Sound(); e logo fazer o attachSound, o que fazemos é usar var meuSom:Sound=criarSom("identificador_na_biblioteca");