我在做一个动画项目。我不是程序员。我在Flash CS3工作。我有一个动画,我已经制作了,我需要输出我的音频轨道的位置,以供后声音的家伙使用。录音之后,我的音响员给了我一个大文件,里面有我所有的音频。我不得不擦洗到正确的位置上的音频轨道上,我想要的每一个剪辑。
现在我的动画已经完成了,我已经把我的音频都准备好了,但是我需要一份它在Flash时间线中的位置的记录,这样我就可以把它给我的声音后的家伙,这样他就可以在他的声音编辑软件中重建它了。
我想知道的是,是否有一种方法可以运行跟踪或生成将执行以下操作的文本文件:
大约4年前,我在Actionscript 3.0上了一门速成课程,但这是我的经验,所以请友好点。
发布于 2011-03-02 22:45:32
不是来自ActionScript内部,不是。时间线上的声音是一个臭名昭著的黑匣子,充满了令人讨厌的问题,其中之一就是你真的无法知道时间线声音在运行时“生活”在哪里。然而,这可能是您可以使用JSFL脚本来完成的事情。JSFL是一种"Javascript“,它允许您操作和检查.fla内容,以及将消息输出到跟踪窗口。
要明确的是,JSFL是在“创作时间”期间针对flash创作工具本身执行的。它不是运行时语言。它不适用于swf文件。
这是JSFL的文档。
ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7fe8.html
发布于 2011-03-11 04:53:01
JSFL可能是最好的方法。
您可以使用文件> new创建一个新的JSFL文件。> Flash JavaScript File.
然后,可以使用脚本编辑器中的play按钮运行脚本。
如果要将脚本保存为命令,这种帮助页面将显示配置目录的公共位置。
我还准备了一系列可能有帮助的教程:
下面是一个示例脚本,它将输出当前文档当前时间线中音频的位置:
fl.outputPanel.clear();
var dom = fl.getDocumentDOM();
fl.trace('Timeline sound for ' + dom.name);
fl.trace('-------------------');
var divider = ' \t\t ';
var tl = dom.getTimeline();
for(var i=0; i < tl.layerCount; i++){
var tLayer = tl.layers[i];
for(var j=0; j < tLayer.frameCount; j++){
var tFrame = tLayer.frames[j];
if(tFrame == undefined) {
break;
}
if(tFrame.startFrame == j) { //only run on keyframes
if(tFrame.soundLibraryItem != null && tFrame.soundName.length > 0) {
var seconds = j * dom.frameRate;
//output info
fl.trace('layer: ' + tLayer.name + divider + 'start (frame): ' + j + 1 + divider + ' start (sec): ' + seconds + divider + 'sound file: ' + tFrame.soundName);
}
} else { //skip to next keyframe
j = tFrame.startFrame + tFrame.duration - 1;
continue;
}
}
}
fl.trace('-------------------');
fl.trace('Output complete.');输出将如下所示:
Timeline sound for testAudio2.fla
-------------------
layer: audio 2 start (frame): 31 start (sec): 36 sound file: BUMMER.WAV
layer: audio 2 start (frame): 131 start (sec): 156 sound file: COOL_F.WAV
layer: audio 2 start (frame): 411 start (sec): 492 sound file: preparetodie.wav
layer: audio 2 start (frame): 2721 start (sec): 3264 sound file: mcc_hello.mp3
layer: audio 2 start (frame): 2971 start (sec): 3564 sound file: mcc_seriously.mp3
layer: audio 2 start (frame): 3301 start (sec): 3960 sound file: point.wav
layer: audio 2 start (frame): 4321 start (sec): 5184 sound file: happy5.wav
-------------------
Output complete.自定义您认为合适。例如,如果要搜索所有时间线或多个文档,则需要对其进行修改。
发布于 2011-03-03 01:42:11
很难准确地知道你是如何设置这些的,但基于你所说的,我会尝试这样的方法。将以下代码放在动画时间线的第一帧上:
var movieFrameRate:Number = 20; //frame rate of your movie
var totalFramesOfMovie:Number = this.totalFrames;
var startingFrameOfSoundClip:Number;
var endingFrameOfSoundClip:Number;
var startingMilSecsOfSoundClip:Number;
var endingMilSecsOfSoundClip:Number;
var currentClipName:String;
function findMilSecsFromStart(startingFrameOfSoundClip:Number):Number
{
var MilSecs:Number = (startingFrameOfSoundClip / movieFrameRate) * 1000;
return MilSecs;
}
function findFramesFromStart(startingFrameOfSoundClip:Number):Number
{
var frames:Number = startingFrameOfSoundClip;
return frames;
}
function durationInFrames(startingFrame, endingFrame):Number
{
var durationInFrames:Number = endingFrame - startingFrame;
return durationInFrames;
}
function durationInMilliseconds(startingFrame, endingFrame):Number
{
var durationInMilSecs:Number = ((endingFrame - startingFrame) / movieFrameRate) * 1000;
return durationInMilSecs;
}
function collectInitialInfo():void
{
trace("Clip Name: " + currentClipName);
trace("Number of frames from beginning: " + findFramesFromStart(startingFrameOfSoundClip));
trace("Time from beginning in MilSecs: " + findMilSecsFromStart(startingFrameOfSoundClip));
}
function collectFinalInfo():void
{
trace("Duration of sound clip in frames: " + durationInFrames(startingFrameOfSoundClip, endingFrameOfSoundClip));
trace("Duration of sound clip in milSecs: " + durationInMilliseconds(startingFrameOfSoundClip, endingFrameOfSoundClip));
trace("----------------------------------------------------------");
} 然后,在声音剪辑开始的每一帧上放置以下位置,其中mySoundClip_1始终是从那里开始的声音剪辑的实例名称:
currentClipName = 'mySoundClip_1';
startingFrameOfSoundClip = this.currentFrame;
collectInitialInfo();然后在声音结束的每一个帧上放置以下代码:
endingFrameOfSoundClip = this.currentFrame;
collectFinalInfo();我已经做了一个时间线,用一个简单的正方形电影的多个实例来模仿你所描述的声音剪辑的位置,比如名字是mySoundClip_1,mySoundClip_2等等。
我已经测试过它,它在输出窗口中生成以下跟踪:
Clip Name: mySoundClip_1
Number of frames from beginning: 4
Time from beginning in MilSecs: 200
Duration of sound clip in frames: 35
Duration of sound clip in milSecs: 1750
----------------------------------------------------------
Clip Name: mySoundClip_2
Number of frames from beginning: 75
Time from beginning in MilSecs: 3750
Duration of sound clip in frames: 55
Duration of sound clip in milSecs: 2750
----------------------------------------------------------
Clip Name: mySoundClip_3
Number of frames from beginning: 179
Time from beginning in MilSecs: 8950
Duration of sound clip in frames: 18
Duration of sound clip in milSecs: 900
----------------------------------------------------------
Clip Name: mySoundClip_4
Number of frames from beginning: 219
Time from beginning in MilSecs: 10950
Duration of sound clip in frames: 56
Duration of sound clip in milSecs: 2800
----------------------------------------------------------
Clip Name: mySoundClip_5
Number of frames from beginning: 289
Time from beginning in MilSecs: 14450
Duration of sound clip in frames: 32
Duration of sound clip in milSecs: 1600
----------------------------------------------------------https://stackoverflow.com/questions/5173989
复制相似问题