Клиент AS3 + сервер Grails - обработка аудио на клиенте и отправка его обратно на сервер - PullRequest
0 голосов
/ 09 марта 2012

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

1 Ответ

0 голосов
/ 22 марта 2012

Оказывается, это было вызвано процессом присоединения каждого фрагмента wav к mp3. Кодировщик преобразовывал их в целые mp3-файлы, добавляя тишину к первому и последнему кадрам каждого фрагмента. Вы можете увидеть подробное объяснение здесь: http://lame.sourceforge.net/tech-FAQ.txt

Чтобы решить эту проблему, нам пришлось отредактировать исходный код ShineMP3Encoder, чтобы он не добавлял начальный и конечный кадры для каждого обработанного фрагмента (превращая его в «процессор чанка»). Это решило проблему, и мы смогли передать измененный mp3-файл с клиента на сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...