3

Web アプリケーション用の次のコードがあり、改善が必要です。何とか機能しますが、結果は非常に遅いです。

このコードの背後にある考え方は次のとおりです。

  • この関数は現在のバッファを取得し、それを配列に転置します (50ms のサンプリング レートで)
  • サンプリングごとに、updateWave 関数で各要素を渡すことにより、配列の要素をレンダリングする必要があります。
  • 次の反復では、現在のバッファーが再度フェッチされますが、以前のデータが含まれているため (以前のデータ/要素はレンダリングされません)、新しい要素を再度レンダリングする必要があります。

更新(簡略化されたコード)

private String data = "";   
// This function renders the waveform in the page, has been tested to
// render properly and smoothly by passing random double value at 50ms interval    
public void updateWave(String waveValue){
    wave.renderWaveOnFly(Double.parseDouble(waveValue));
}

public final native void waveIt()/*-{   
    var instance = this;
    $wnd._waver = setInterval(function(){
            // Get the current buffer from the flash interface
            // Note it fetches everything in the buffer
            var newData = $wnd.Recorder.audioData().toString();
            var strData = newData.toString();
            var arr = strData.split(',');
            var arrEl = arr.pop();
            instance.@com.mycode.wavegwt.showcase.client.Showcase::updateWave(Ljava/lang/String;)(arrEl.toString());
            //console.log(arrEl);
        }
    ,50);
}-*/;

// This function renders the waveform from math function 
// and the waveform is smooth and the UI is still responsive
public final native void waveItByRandomValue()/*-{  
    var instance = this;
    $wnd._waver = setInterval(function(){
            var arrEl = Math.cos(i++/25) - 0.2 + Math.random() * 0.3;
            instance.@com.mycode.wavegwt.showcase.client.Showcase::updateWave(Ljava/lang/String;)(arrEl.toString());
        }
    ,50);
}-*/;

public native void renderWaveOnFly(Double _data)/*-{
    var data = $wnd.data;
    data.push(_data);
    $wnd._waveform.update({
        data: data
    });
}-*/;

waveIt()フラッシュ インターフェイス (マイクからデータを取得する) からバッファを読み取る関数です。デモでは、トリガーされたときに 10 秒間録音するようにマイク レコーダーを設定し、録音が開始されるwaveIt()と、10 秒の通話後にclearInterval($wnd._waver)

これに関する問題:

  • waveIt()つまり、これを実行すると UI が応答せず、レンダリングが非常に遅くなります。
  • waveItByRandomValue()この関数を実行すると、レンダリングが速く、UI の応答性が高いものと比較して

これを正しく機能させる方法についての戦略が不足しています。

私のプロジェクトをライブで見るには、これを参照してください: http://bitly.com/XGboA1

また、Google グループでこの問題についてもう少し説明しました: http://bitly.com/SqSZVl

4

1 に答える 1

0

これは、ソリューションの一部である型付き配列である可能性があります。

http://www.html5rocks.com/en/tutorials/webgl/typed_arrays/

于 2012-10-28T23:15:53.303 に答える