AS3 Client + Grails Server - Обработка аудио на клиенте и отправка его обратно на сервер
-
09-12-2019 - |
Вопрос
Мы пишем флэш-приложение, которое может загрузить файл MP3, преобразуйте его в звуковой объект, получают необработанные данные и сделайте некоторую обработку (например, добавление звуков, изменить Octaves). После обработки мы хотим отправлять данные обратно на сервер в кусках, поэтому сервер сможет приклеить данные вместе и восстановить новый сгенерированный файл. Проблема в том, что если мы отправим к серверу «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 BYTEARRAY, используя этот код:
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, добавляя тишину к первому и последним кадрам каждой части.Вы можете увидеть подробное объяснение здесь: http://lame.sourceforge.net/tech-faq.txt
Чтобы решить эту проблему, нам пришлось редактировать исходный код Shinemp3encoder, чтобы он не добавил бы начало и конечные кадры для каждого обрабатываемого деталя (поворачивая его в «процессор кусочка»).Это решило проблему, и мы смогли транслировать модифицированный файл MP3 с клиента на сервер.