我们正在编写一个 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