特定の 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 関数に渡すことができないため、変換が必要です。
私の質問は次のとおりです。
- 変換をより効率的に行う方法はありますか?
- JavaコードがJavaオブジェクトではなくJavascript Float32Arrayオブジェクトを返すようにする方法はありますか?
- Firefox 拡張機能で使用できる PCM オーディオの再生を可能にする Java 実装はありますか? JavaScript コード内からその Java 実装を使用する場合、上記の変換は必要ありません。
他のアイデア/指示をいただければ幸いです。