AE 4/4拍子の曲を４カウントで繰り返し表示

#産物ですがメモ (エクスプレッション)
現在曲のテンポ（小節）に合わせて画面がスライド移動する事をやっていたのですが、その途中で理解した事が産物となりましたので、メモをしておきます。

#テンポに合わせて１・２・３・４・１・２・３・４と数字を表示させる

```jsx
var fixNum = 60 ;
var BPM = thisComp.layer("control").effect("BPM")("スライダー") ;
var compFrameRato = 1/thisComp.frameDuration;
var Onetemp = fixNum / BPM * compFrameRato;
var TToF = timeToFrames(time,compFrameRato );
var temp = TToF/Onetemp+1;
var result = Math.floor(temp ) % 4;

if (result == 0){
result = 4 ;
}
result
```


#ついでに簡易BPMマーカーも作成しました。（スクリプト）
とりあえず、さっと作ったので今私が必要な4/4拍子でしか使えません。
またフレームレートが29以下と59.94fpsに関してはちょっと曖昧かもしれません。
が目安にはなります。

```jsx
/////Script UI
var winObj = (this instanceof Panel) ? this : new Window("palette", "BPM Marker", undefined, {resizeable: true});
//実行ボタン 
var grp001 = winObj.add('group');
var information = grp001.add("statictext",undefined,"BPM:");
var bpmEdit = grp001.add("edittext",[0,0,40,20],"75");
var btn = winObj.add("button",undefined,"Do it!!")

winObj.onResizing = winObj.onResize = function () {this.layout.resize();};  

if (winObj instanceof Window) {  
winObj.center();  
winObj.show();  
}
else {  
winObj.layout.layout(true);  
winObj.layout.resize();  
}  

var activeComp;
var myAdust;

 btn.onClick = function(){
    activeComp   = app.project.activeItem
    addADLayer();
    addMarker();
}

function addADLayer(){
    var temp =activeComp.duration;
    myAdust = activeComp.layers.addNull (temp) ;
}

function  addMarker(){
    var compDur =activeComp.duration;
    var fixNum = 60 ;
    var BPM = bpmEdit.text;
    var compFrameRato = activeComp.frameRate;
        if (compFrameRato < 30){
        compFrameRato = 30;
        }
        if (compFrameRato = 59.94){
        compFrameRato = 60;
        }

    var Onetemp = fixNum / BPM * compFrameRato;
    var result = currentFormatToTime(Onetemp, compFrameRato, true)    
    var count = compDur /result ;

        for (var i = 0 ; i < count ; i++){
        var myMark01 = new MarkerValue(i+1);
        myAdust.property("ADBE Marker").setValueAtTime(result *i,myMark01);
        }
}

```

#Nullレイヤーでスライドの動き

```jsx
var fixNum = 60 ;
var BPM = 75 ;
var compFrameRato = 1/thisComp.frameDuration;
var Onetemp = fixNum / BPM * compFrameRato;
var TToF = timeToFrames(time,compFrameRato );
var result= TToF/Onetemp;

x = (result)*960;
y=value[1];
[-x,y]
```

##解説
BPMで出したテンポの１拍で任意（今回は960px）のPX分移動する。

まず初めに考え方としてはtime*960みたいに１秒ごとに960px動かす的な方法で考えました。
つまりtimeを１拍分の秒数にしてまえばいいという考えです。

BPMとフレームレートについてはこちらのブログを参考にさせてもらいました。
http://blog.livedoor.jp/kamqgm/archives/50538540.html

60÷BPM×FPS
この計算式で１拍の秒数が割り出せます。

まずは固定値
var fixNum 
こちら60ですので、変数を固定しておきます。

var BPM = 75 ;
こちらは曲のテンポ数（BPM）です。

余談ですが私は昔バンドをしていたのですが、BPMというと打ち込み関係の言い方なのでテンポ数というのがしっくりきます。
生演奏＝（テンポ）打ち込み＝（BPM）という感じです。先輩のミュージシャンにBPMというと怒られます(笑)
と余談はさておき・・・

var compFrameRato = 1/thisComp.frameDuration;
こちらはコンポジションのフレームレートを取っています。

まずはこの３つを計算式に割り当てます。
var Onetemp = fixNum / BPM * compFrameRato;
これで１拍分の秒数が取れました。

そしてコンポジションのtimeをフレーム数に変換します。
var TToF = timeToFrames(time,compFrameRato );
コンポジションのFPSが24で設定されていたとして
0:00:01:00　を　24　という数字で返してくれます。
0:00:01:01　なら25ですね。

そして最後に
var result= TToF/Onetemp;
これで今回は19.2フレーム毎にカウントがアップしていきます。

これでtimeの代わりにresultで動かしています。

粗編ですが、どういった動きかをyoutube限定公開でアップしておきます。
https://www.youtube.com/watch?v=npeR8_5-BXg&feature=youtu.be