0

私はアニメーションプロジェクトに取り組んでいます。私はプログラマーではありません。私はFlash CS3で作業しています。ポストサウンド担当者が使用するオーディオ トラックの配置を出力する必要があるアニメーションを作成しました。録音セッションの後、音響担当者がすべての音声を含む 1 つの大きなファイルをくれました。必要なクリップごとに、オーディオ トラックの正しい位置にスクラブする必要がありました。

アニメーションが完成したので、オーディオはすべて整っていますが、Flash タイムラインのどこにあるのかを記録する必要があります。音声編集ソフト。

私が疑問に思っているのは、トレースを実行したり、次のことを行うテキスト ファイルを生成したりする方法があるかどうかです。

  1. メイン タイムライン上のオーディオ クリップの開始位置 (キー フレーム) のリスト (ムービー タイムラインの開始位置からの絶対フレーム番号を返します)
  2. クリップの再生時間 (フレーム数)
  3. キー フレームに関するメモ
  4. シンボル名/オーディオ クリップ ファイル名
  5. その選択範囲で再生されるオーディオ クリップ ファイル内の位置。

私は約 4 年前に Actionscript 3.0 の短期集中コースを受講しましたが、それは私の経験の範囲です。

4

3 に答える 3

3

JSFL はおそらくこれを行うための最良の方法です。

File > New... > Flash JavaScript Fileで新しい JSFL ファイルを作成できます。

その後、スクリプト エディタの再生ボタンを使用してスクリプトを実行できます。

このヘルプページには、スクリプトをコマンドとして保存する場合の構成ディレクトリの一般的な場所が示されています。

また、役に立つかもしれない一連のチュートリアルをまとめています。

以下は、現在のドキュメントの現在のタイムラインにオーディオの位置を出力するサンプル スクリプトです。

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-11T04:53:01.653 に答える
0

これがどのように設定されているかを正確に伝えるのは難しいですが、あなたが言ったことに基づいて、私はこのようなことを試してみます. アニメーション タイムラインの最初のフレームに次のコードを配置します。

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
----------------------------------------------------------
于 2011-03-03T01:42:11.137 に答える
0

ActionScript 内からではありません。タイムライン上のサウンドは悪名高いブラック ボックスであり、実行時にタイムライン サウンドが「生きている」場所を知る方法がないなど、厄介な落とし穴がたくさんあります。ただし、これは JSFL スクリプトを使用して実行できることかもしれません。JSFL は一種の「Javascript」であり、.fla の内容を操作および検査したり、トレース ウィンドウにメッセージを出力したりできます。

明確にするために、JSFL は「オーサリング時間」中にフラッシュ オーサリング ツール自体に対して実行するものです。ランタイム言語ではありません。swf ファイルには適用されません。

これがJSFLのドキュメントです。

http://help.adobe.com/en_US/Flash/10.0_ExtendingFlash/WS5b3ccc516d4fbf351e63e3d118a9024f3f-7fe8.html

于 2011-03-02T22:45:32.080 に答える