2014-05-31 1 views
1

У меня есть музыкальный файл WAV, который я хочу объединить в Flash Pro. Тем не менее, я не уверен, как работать с этой дорожкой, у которой есть открывающая часть и петля .Сложная беспроблемная звуковая петля в AS3

аудиофайл будет 'разделить' на три очка: , B и C. зацикливания части будет все аудио между точками B и C, в то время как аудио между и B бы быть открытой частью, который будет воспроизводиться только один раз.

Я попытался разделить WAV на два файла: A-B будет вполне intro файл, и B-C looping файл, так что сразу после intro звука отделки, то looping звук начинается. Оба файла находятся в библиотеке (прямо сейчас я сосредоточен только на локальных файлах).

Итак, вот код AS3:

import flash.media.Sound; 
import flash.events.Event; 
import flash.media.SoundChannel; 

var introMusic:Sound = new heroIntro(); 
var loopingMusic:Sound = new heroLoop(); 
var musicChannel:SoundChannel = new SoundChannel(); 
musicChannel = introMusic.play(); 
musicChannel.addEventListener(Event.SOUND_COMPLETE,continueMusic); 

function continueMusic(e:Event):void{ 
    musicChannel.removeEventListener(Event.SOUND_COMPLETE,continueMusic); 
    musicChannel= introMusic.play(); 
    musicChannel.addEventListener(Event.SOUND_COMPLETE,continueMusic); 
} 

Петля полностью бесщелевая, но переход между интро и сквозными частями делает раздражающий звук разрыва. Как я могу сделать этот переход бесщелевым?

ответ

0

Возможно, вы сможете избежать звука зазора, играя второй звук в другом SoundChannel секунду или около того, прежде чем 1-й звук закончит воспроизведение. Это не изящное решение, но оно может работать. Возможно, что-то вроде этого:

import flash.media.Sound; 
import flash.events.Event; 
import flash.media.SoundChannel; 

var introMusic:Sound = new heroIntro(); 
var loopingMusic:Sound = new heroLoop(); 
var introChannel:SoundChannel = new SoundChannel(); 
var loopingChannel:SoundChannel = new SoundChannel(); 
var hasBegunLooping:Boolean = false; 
introChannel = introMusic.play(); 

function update():void{ //called every tick 
    if(!hasBegunLooping && introChannel.position > introMusic.length - 1000){ 
     loopingChannel = loopingMusic.play(0, int.MAX_VALUE); 
     hasBegunLooping = true; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^