2017-03-28 14 views
1

ためのJavaScriptで私はすでにかなりの数の他の質問を見てきましたが、私はだから私はこれに取り組んで、これに来てきたのsetTimeoutトラブルMaxM​​SP

で、この問題を解決するように見えることはできません何らかの理由でsetTimeoutが機能しない場合、ヒントはありますか?

function curves(val_name, mini, maxi, t_amount, steps) { 
    //t_amount MUST be in ms 
    for (x = 0; x < steps; x++) { 
     var x_mod = scale(x, -6, 0, 0, steps); 
     var value = setTimeout(calculate_curve, (t_amount/steps), x_mod); 

     switch (val_name) { 
      case "vol_stretch1": 
       var vol_stretch1 = this.patcher.getnamed("stretching").subpatcher(0).getnamed("vol_stretch1"); 
       vol_stretch1 = value 
       break; 
      case "vol_stretch2": 
       var vol_stretch2 = this.patcher.getnamed("stretching").subpatcher(0).getnamed("vol_stretch2"); 
       vol_stretch2 = value 
       break; 
      case "vol_stretch3": 
       var vol_stretch3 = this.patcher.getnamed("stretching").subpatcher(0).getnamed("vol_stretch3"); 
       vol_stretch3 = value 
       break; 
     } 
    } 
} 

function calculate_curve(x) { 
    var constant_e = 2.718281828459; 
    var result = (1/1 + (constant_e^(x * -1))) * -1; //sigmoid function * -1 to have the nice rise 
} 

function scale(unscaledNum, minAllowed, maxAllowed, minimum, maximum) { 
    return (maxAllowed - minAllowed) * (unscaledNum - minimum)/(maximum - minimum) + minAllowed; 
} 

スイッチはMaxMSP用の拡張機能で動作するため無視できますが、ここではそれほど重要ではありません。私が返すエラーは "Javascript ReferenceError:setTimeoutは定義されていません"です。どんな助けでも大歓迎です!

+0

どのようにこのJSを実行していますか?それはブラウザ/ノード/ etcにあります – George

+0

@George - Max *は環境ですが、setTimeoutの実装はありません。 – Hecksa

+0

@Hecksaそれは私が考えていたものです、あなたの答えはそれが非常にうまくカバーする場合 – George

答えて

2

私は以前はMaxで働いていませんでしたが、少量の検索から、プラグインの行に沿って何かを書いているようです。

Maxは、ある種のJavascript環境を実行しているようです。 setTimeoutは、JavaScriptのブラウザのオブジェクトのwindowのメソッドであるため、Maxのように、ブラウザの外でJavaScriptが必ずしも実装されているとは限りません。

推奨代替はここにいくつかのドキュメントを持っている環境によって公開されたTaskオブジェクトを使用するように思わ: https://docs.cycling74.com/max5/vignettes/js/jstaskobject.html

私はこれをテストする方法はありませんが、ドキュメントから、それに沿って何かのように見えます

var task = new Task(function() { 
    calculate_curve(x_mod); 
}, this); 
task.schedule((t_amount/steps)); 
+0

あなたとジョージに非常に感謝します。私はJSタスクオブジェクトについて聞いていましたが、何らかの理由でここでそれを考えたことはありませんでした。私はあなたの助けに感謝します – maladie