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