Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Gecko(firefox扩展)中的java对象检索的高效流式音频样本_Java_Javascript_Firefox Addon_Gecko_Liveconnect - Fatal编程技术网

从Gecko(firefox扩展)中的java对象检索的高效流式音频样本

从Gecko(firefox扩展)中的java对象检索的高效流式音频样本,java,javascript,firefox-addon,gecko,liveconnect,Java,Javascript,Firefox Addon,Gecko,Liveconnect,我正在编写一个firefox扩展,它需要播放特定的PCM流。通过LiveConnect从java模块检索示例: Java代码: public class Synthesizer { ... public float[] synthesizeFloats(int[] symbols) { // Some code to generate 32bit float PCM samples ... return floatSamples; } .

我正在编写一个firefox扩展,它需要播放特定的PCM流。通过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);
尖叫:函数(示例)
{
var start=0;
var=0;
开始=(新日期()).getTime();
var floatSamples=新的Float32Array(样本);
已用=(新日期()).getTime()-start;
Firebug.Console.log(“转换数组(2)-以毫秒为单位的运行时间”+运行时间);
var modulationProperties=this.defaultModulationProperties();
var audio=新音频();
音频.mozSetup(1,调制属性.sampleFrequency);
var=0;
while(书写
上面的代码工作起来很慢。看来,将java字节数组转换为Float32Array相当昂贵。转换是必要的,因为不能将java字节数组传递给mozWriteAudio函数

我的问题是:

  • 有没有办法更有效地进行转换
  • 有没有办法让java代码返回Javascript数组对象而不是java对象
  • 是否有java实现允许播放可能在firefox扩展中使用的PCM音频?在javascript代码中使用java实现不需要进行上述转换

  • 如果您还有其他想法/指导,我们将不胜感激。

    我想您的前两个问题的答案是“不”。任何东西都不可能比
    新的Float32Array(samples)
    更快,而LiveConnect通常不是最快的。AFAIK Java代码只能在Java对象中进行通信,它无法返回正确的JavaScript对象。我对这个扩展编程非常陌生-在firefox扩展中使用Java代码有更好的选择吗?是的,显然使用JavaScript。这意味着您的扩展不需要拖拽额外的VM。好的-这是最后的选择。。。可以在firefox扩展中使用Java声音API吗?也就是说,使用LiveConnect?我用java实现了一个小包装器,以满足java声音API中的需要。我的包装器对象方法采用短[],我的javascript代码只需将
    samples
    变量传递给它。不需要转换,而且性能令人满意,因为Javascript代码中没有进行转换。