【发布时间】:2012-03-08 23:44:19
【问题描述】:
我们正在编写一个 Flash 应用程序,它可以下载 MP3 文件、将其转换为 Sound 对象、获取原始数据并进行一些处理(例如添加声音、更改八度音阶)。处理后,我们希望将数据分块发送回服务器,以便服务器能够将数据粘合在一起并恢复新生成的文件。问题是:如果我们向服务器发送“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 字节数组:
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
【问题讨论】:
-
您使用的这个套接字类是什么?您没有使用标准的 AS3 Socket 类吗?上次查了一下,AS3中的socket类没有“发送”功能。
-
Flash 以对其加载的对象进行荒谬的二进制修改而闻名。例如,Loader 对象实际上会将额外的二进制数据附加到它加载的图片和 SWF 文件中。闪存,不知何故这在内部很有用,但是当您尝试导出您认为是原始二进制数据的内容时,您会得到这个垃圾,这会破坏其他工具的可读性,这些工具不会期望这些额外的垃圾。我怀疑这里也发生了同样的事情。
-
感谢 cmets。阅读此内容后,我们能够解决问题:lame.sourceforge.net/tech-FAQ.txt。这次 Flash 不是罪魁祸首!
标签: actionscript-3 grails audio-processing