Мы пишем флэш-приложение, которое может загружать файл 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);
Если мы отправим каждый мини-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