2012-03-08 3 views
0

MP3 파일을 다운로드하고 Sound 객체로 변환하고 원시 데이터를 가져 와서 일부 처리를 할 수있는 플래시 응용 프로그램을 작성 중입니다. (소리 추가, 옥타브 변경 등). 처리가 끝나면 데이터를 청크로 서버에 다시 보내므로 서버가 데이터를 함께 붙이고 새 생성 된 파일을 복구 할 수 있습니다. 문제는 서버의 "wav"사운드를 보내면 생성 된 파일에 문제없이 함께 붙일 수 있다는 것입니다. 그러나 각 wav 조각을 mp3 파일로 변환 (서버에 작은 파일을 전송할 수 있도록)하고 서버에서 mp3 파일을 조인하면 결과가 병합 지점에서 약간의 문제가있는 사운드가됩니다. 우리는 각 미니를 보낼 경우AS3 클라이언트 + grails 서버 - 클라이언트에서 오디오 처리 후 서버로 다시 전송

sourceSnd.extract(buffer, tamanho2);   
...process the extract sound and.... 
var bytesWav : ByteArray = new ByteArray(); 
buffer.position = 0; 
this.wavWriter.processSamples(bytesWav, buffer, 44100, 2); 

: 우리는 각 BYTEARRAY하는 MP3의 조각 및 WAV로 변환하는 방법

sourceSnd.load(new URLRequest("sample url to mp3")); 
sourceSnd.addEventListener(Event.COMPLETE, carregou); 

이것은 : 이것은 우리가 서버에서 MP3 파일을로드하는 방법입니다

wav 파일을 서버에 다시 연결 (예 : 소켓 사용)하면 아무 문제없이 함께 연결할 수 있습니다. 우리는이 코드를 사용하여이 ByteArray 각 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 서버 측 기술이이 :

+0

사용중인 소켓 클래스는 무엇입니까? 표준 AS3 소켓 클래스를 사용하지 않습니까? 마지막으로 확인한 AS3의 소켓 클래스에는 "보내기"기능이 없습니다. –

+0

플래시는로드하는 객체를 어리석은 바이너리 수정으로 유명합니다. 예를 들어, Loader 객체는로드하는 그림과 SWF 파일에 실제로 추가 이진 데이터를 추가합니다. 플래쉬하려면, 어떻게 든 내부적으로는 유용하지만 원시 바이너리 데이터라고 생각되는 것을 익스포트하려고 할 때이 여분의 쓰레기를 기대하지 않는 다른 툴에 의해 가독성을 파괴하는이 정크가 발생합니다. 나는 여기에서도 같은 일이 일어나고 있다고 생각한다. –

+0

의견을 내 주셔서 감사합니다. 우리는 이것을 읽은 후에 문제를 해결할 수있었습니다 : http://lame.sourceforge.net/tech-FAQ.txt. 이번에는 플래시가 유죄가 아니 었습니다! –

답변

0

이가 MP3에 WAV의 각 부분을 enconding의 과정에 의해 발생 된 아웃 켜 Grails는. 인코더는 전체 MP3 파일로 변환하여 각 부분의 첫 번째 프레임과 마지막 프레임에 무음을 추가했습니다. http://lame.sourceforge.net/tech-FAQ.txt

이 문제를 해결하려면 ShineMP3Encoder 소스 코드를 편집하여 처리 된 각 조각에 대한 시작 프레임과 끝 프레임을 추가하지 않으면 안됩니다 ("청크 프로세서"로 전환).). 이로 인해 문제가 해결되었으며 수정 된 mp3 파일을 클라이언트에서 서버로 스트리밍 할 수있었습니다.