Actionscript 3, несколько звуковых дорожек
У меня есть четыре разных трека (гитара, бас, ударные, вокал) в музыкальном проигрывателе. Все они названы флажками, чтобы установить / снять флажок, какой из треков в данный момент слышим, и у меня также есть кнопка воспроизведения, чтобы начать. Поэтому, когда вы проверяете, например, вокал и гитару, я хочу услышать только то, как эти два инструмента, а также бас и барабаны просто приглушены на заднем плане.
Проблема в том, что когда я начинаю с этими двумя флажками, я не могу изменить другие блоки во время игры, потому что статус статичен и не изменяется динамически при попадании в блоки.
Просто отрывок моего кода только с гитарой и вокалом для легкого понимания:
var vocals:Sound = new Sound();
var vocalsChannel:SoundChannel = new SoundChannel();
var vocalsTransform = new SoundTransform();
vocalsChannel.soundTransform = vocalsTransform;
vocals.load(new URLRequest("songsample.mp3"));
var guitar:Sound = new Sound();
var guitarChannel:SoundChannel = new SoundChannel();
var guitarTransform = new SoundTransform();
guitarChannel.soundTransform = guitarTransform;
guitar.load(new URLRequest("funky.mp3"));
voc_mc.addEventListener(MouseEvent.CLICK, _selectedVoc);
git_mc.addEventListener(MouseEvent.CLICK, _selectedGit);
function _selectedVoc(e:MouseEvent):void
{
var bool:Boolean = e.target.selected;
if(bool)
{
vocalsTransform.volume = 1;
}
else
{
vocalsTransform.volume = 0;
}
}
function _selectedGit(e:MouseEvent):void
{
var bool:Boolean = e.target.selected;
if(bool)
{
guitarTransform.volume = 1;
}
else
{
guitarTransform.volume = 0;
}
}
play_mc.addEventListener(MouseEvent.CLICK,
function(evt:MouseEvent)
{
vocalsChannel = vocals.play(0,0,vocalsTransform);
guitarChannel = guitar.play(0,0,guitarTransform);
})
stop_mc.addEventListener(MouseEvent.CLICK,
function(evt:MouseEvent)
{
vocalsChannel.stop();
guitarChannel.stop();
})
1 ответ
Вам необходимо сбросить свойство soundTransform на канале:
function _selectedVoc(e:MouseEvent):void
{
var bool:Boolean = e.target.selected;
if(bool)
{
vocalsTransform.volume = 1;
}
else
{
vocalsTransform.volume = 0;
}
vocalsChannel.soundTransform = vocalsTransform;
}