Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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
Actionscript 3 AS3客户端&x2B;grails服务器-在客户端处理音频并将其发送回服务器_Actionscript 3_Grails_Audio Processing - Fatal编程技术网

Actionscript 3 AS3客户端&x2B;grails服务器-在客户端处理音频并将其发送回服务器

Actionscript 3 AS3客户端&x2B;grails服务器-在客户端处理音频并将其发送回服务器,actionscript-3,grails,audio-processing,Actionscript 3,Grails,Audio Processing,我们正在编写一个flash应用程序,它可以下载MP3文件,将其转换为声音对象,获取原始数据并进行一些处理(如添加声音、更改八度)。处理之后,我们希望将数据分块发送回服务器,这样服务器就能够将数据粘合在一起并恢复新生成的文件。问题是:如果我们向服务器发送“wav”声音片段,我们可以将它们粘合在一起,而不会在生成的文件中出现任何问题。但是,如果我们将每个wav片段转换为mp3文件(这样我们就可以向服务器发送一个较小的文件),并在服务器上加入mp3文件,那么结果就是在合并点出现一些问题 这是我们从服务

我们正在编写一个flash应用程序,它可以下载MP3文件,将其转换为声音对象,获取原始数据并进行一些处理(如添加声音、更改八度)。处理之后,我们希望将数据分块发送回服务器,这样服务器就能够将数据粘合在一起并恢复新生成的文件。问题是:如果我们向服务器发送“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);
如果我们将每个迷你wav文件发送回服务器(例如,使用套接字),我们就能够将它们粘合在一起而不会出现任何问题。但是,如果我们使用以下代码转换每个wav字节数组:

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

证明这是由将wav的每一段重新编码到mp3的过程造成的。编码器将它们转换成完整的mp3文件,为每个片段的第一帧和最后一帧添加静音。您可以在此处看到详细说明:


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

您使用的套接字类是什么?您没有使用标准AS3套接字类吗?上次我检查时,AS3中的socket类没有“send”函数。Flash以对加载的对象进行荒谬的二进制修改而闻名。例如,Loader对象实际上会将额外的二进制数据附加到它加载的图片和SWF文件中。对于flash来说,这在内部是有用的,但是当您尝试导出您认为是原始二进制数据时,您会得到这些垃圾,这些垃圾会破坏其他工具的可读性,而这些工具并不期望这些额外的垃圾。我怀疑这里也发生了同样的事情。谢谢你的评论。在阅读以下内容后,我们能够解决此问题:。这一次Flash不是罪人!