1

特定の PCM ストリームを再生する必要がある Firefox 拡張機能を作成しています。サンプルは、LiveConnect を介して Java モジュールから取得されます。

Java コード:

public class Synthesizer 
{
    ...

public 
float[] synthesizeFloats(int[] symbols) 
{   
    // Some code to generate 32bit float PCM samples
    ...
    return floatSamples;
}


    ...
}

Javascript コード:

    scream: function(samples)
    {
        var start = 0;
        var elapsed = 0;

        start = (new Date()).getTime();     
        var floatSamples = new Float32Array(samples);       
        elapsed = (new Date()).getTime() - start;
        Firebug.Console.log("Converting array (2) - Elapsed time in ms " + elapsed);        

        var modulationProperties = this.defaultModulationProperties();      
        var audio = new Audio();
        audio.mozSetup(1, modulationProperties.sampleFrequency);

        var written = 0;
        while (written < floatSamples.length) {
            written += audio.mozWriteAudio(floatSamples.subarray(written));
        }       
    },

// Synthesizer class was loaded and instantiaded over LiveConnect
var samples = synthesizer.synthesizeFloats(symbols);
scream(samples);

上記のコードは機能しますが、非常に遅くなります。Java バイト配列を Float32Array に変換すると、非常にコストがかかるようです。java バイト配列を mozWriteAudio 関数に渡すことができないため、変換が必要です。

私の質問は次のとおりです。

  1. 変換をより効率的に行う方法はありますか?
  2. JavaコードがJavaオブジェクトではなくJavascript Float32Arrayオブジェクトを返すようにする方法はありますか?
  3. Firefox 拡張機能で使用できる PCM オーディオの再生を可能にする Java 実装はありますか? JavaScript コード内からその Java 実装を使用する場合、上記の変換は必要ありません。

他のアイデア/指示をいただければ幸いです。

4

0 に答える 0