AS3客户端+ grails服务器 - 在客户端处理音频并将其发送回服务器

时间:2012-03-08 23:44:20

标签: actionscript-3 grails audio-processing

我们正在编写一个可以下载MP3文件,将其转换为Sound对象,获取原始数据并进行一些处理(如添加声音,更改八度)的Flash应用程序。在处理之后,我们希望以块的形式将数据发送回服务器,因此服务器将能够将数据粘合在一起并恢复新生成的文件。问题是:如果我们向服务器发送“wav”声音片段,我们就可以将它们粘合在一起,而不会在生成的文件中出现任何问题。但是,如果我们将每个wav片段转换为mp3文件(因此我们可以将较小的文件发送到服务器)并在服务器上加入mp3文件,结果就是在合并点出现一些问题的声音。

这是我们从服务器加载mp3文件的方式:

sourceSnd.load(new URLRequest("sample url to mp3"));
sourceSnd.addEventListener(Event.COMPLETE, carregou);

这是我们将每段mp3转换为bytearray和wav的方式:

sourceSnd.extract(buffer, tamanho2);        
...process the extract sound and....
var bytesWav : ByteArray = new ByteArray();
buffer.position = 0;
this.wavWriter.processSamples(bytesWav, buffer, 44100, 2);

如果我们将每个mini-wav文件发送回服务器(例如,使用套接字),我们就可以将它们粘合在一起而不会出现任何问题。但是,如果我们使用以下代码转换每个wav bytearray:

bytesWav.position = 0;
var mp3Encoder : ShineMP3Encoder = new ShineMP3Encoder(bytesWav);
var objeto : teste = this;                                  
mp3Encoder.addEventListener(Event.COMPLETE, function(event : Event) : void {
    objeto.socket.send(mp3Encoder.mp3Data);
});
mp3Encoder.start();

加入文件后,创建的mp3文件在“合并”点有很多声音问题。

我们如何避免这些声音问题?

客户端技术:AS3 服务器端技术:grails

1 个答案:

答案 0 :(得分:0)

结果这是由于将每个wav插入mp3的过程造成的。编码器将它们转换为整个mp3文件,为每个片段的第一帧和最后一帧添加静音。您可以在此处查看详细说明:http://lame.sourceforge.net/tech-FAQ.txt

要解决这个问题,我们必须编辑ShineMP3Encoder源代码,这样它就不会为每个处理过的片段添加开始帧和结束帧(将它转换为“块处理器”)。这解决了问题,我们能够将修改后的mp3文件从客户端流式传输到服务器。