gecko java_从Gecko中的java对象(firefox扩展)中有效地流式传输音频样本

作者探讨如何改进Firefox扩展中,通过LiveConnect从Java模块获取PCM样本时的转换效率。提出将Java字节数组直接转化为JavaScript Float32Array以减少性能损耗,并寻求Java实现播放PCM音频的方法,以及可能的替代解决方案和优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在写一个需要播放某个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代码返回一个JavaScript Float32Array对象而不是java对象?

是否有可以播放可用于Firefox扩展的PCM音频的java实现?使用该JavaScript代码的Java实现不需要上述转换。

任何其他的想法/方向将不胜感激。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值