CROSSFADE SOUND为3.0

时间:2013-12-18 09:37:24

标签: actionscript-3 audio

我是一个AS 3.0项目,我正在进入一个数组声音来组成一组特定的短语。问题在于它听起来太震撼了,并且想要制作交叉淡入淡出效果以更好地将一个单词相互连接起来。 我的问题是我无法加入他们,因为每个声音都是一个接一个地播放,有没有什么方法可以合并到下一个开头的声音结束?

非常感谢。


我正在使用的代码是这样的:

for (iii = 0; iii < numpalabras; iii ++)
{ 
 if (abuscar2 = abuscarArray[iii])
  {
   vocaliza(abuscar2, iii);
  }
}

iii = 0;
localSound = lossonidosArray[iii];
var soundTrans:SoundTransform = new SoundTransform;
soundTrans=SoundMixer.soundTransform;
soundTrans.volume=1;
soundTrans.pan=0;
elcanal.soundTransform = soundTrans;
elcanal = localSound.play(85, 0, soundTrans);   
elcanal.addEventListener(Event.SOUND_COMPLETE, locutapalabra);
}

function locutapalabra(event:Event)
{
if (iii < (ii))
{
  iii=iii+1;
  localSound = lossonidosArray[iii];
  var soundTrans:SoundTransform = new SoundTransform;
  soundTrans=SoundMixer.soundTransform;
  soundTrans.volume=1;
  soundTrans.pan=0;
  elcanal.soundTransform = soundTrans;
  elcanal = localSound.play(85, 0, soundTrans);
  elcanal.addEventListener(Event.SOUND_COMPLETE, locutapalabra);
}

function vocaliza(abuscar2, iii)
{
if (datosXML.palabras.(palabra == abuscar2).palabra == abuscar2)
 {
  ii++;
  elfic = "mp3/" + datosXML.palabras.(palabra == abuscar2).fichero;
  var elsonido :Sound = new Sound();
  elsonido.addEventListener(IOErrorEvent.IO_ERROR, errorprogreso);
  var laurl:URLRequest = new URLRequest(elfic);
  elsonido.load(laurl);
  lossonidosArray[ii] = elsonido;
 }
}       

我是AS 3.0编程的新手,我不清楚我的代码使这些单词相互融合,因为我可以构建几个单词的短语。

非常感谢。

2 个答案:

答案 0 :(得分:0)

var timer:Timer = new Timer(3000) //set to how long to wait
timer.addEventListener(TimerEvent.TIMER, nextSound);

function nextSound(e:Event):void
{
   listenForNextSound(); //this is where you play your next sound
}

timer是一个计时器变量,当3秒钟过去(或者你想要多长时间)时,下一个声音将开始播放。

要使timer变量更准确一些,您可以通过收听COMPLETE事件来使其成为声音的持续时间:

yourTimer.addEventListener(Event.COMPLETE, function() { 
timer.delay = yourTimer.length - howMuchTimeBefore; 
});

答案 1 :(得分:0)

对于交叉淡入淡出,您可以使用补间库(如greensock)来补间声道的音量:

var sound:Sound = new Sound(...);

// start volume at 0
var soundChannel = sound.play(0, 0, new SoundTransform(0));

// tween volume to 1
TweenMax.to(soundChannel, 1, { volume: 1 } );

// half a second before the sound is complete, tween volume to 0
TweenMax.to(soundChannel, .5, {volume: 0, delay:(sound.length/1000)-.5});