2012-03-08 13 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 サーバー側のtechonology:Grailsの

+0

使用しているこのソケットクラスは何ですか?標準AS3ソケットクラスを使用していませんか?前回チェックしたとき、AS3のソケットクラスには「送信」機能がありません。 –

+0

Flashは、ロードするオブジェクトに対してばかげたバイナリ変更を行うことで有名です。たとえば、Loaderオブジェクトは実際に読み込んだ画像やSWFファイルに余分なバイナリデータを追加します。フラッシュするには、何とか内部的に便利ですが、生のバイナリデータと思われるものを試してエクスポートすると、この余分なジャンクを期待しない他のツールによる可読性が損なわれます。私は同じことがここで起こっていると思う。 –

+0

コメントありがとうございます。私たちはこれを読んで問題を解決することができました:http://lame.sourceforge.net/tech-FAQ.txt。今回はフラッシュが無罪だった! –

答えて

0

は、これはmp3にwavファイルの各部分をencondingのプロセスによって引き起こされたアウトをオンにします。エンコーダはそれらをmp3ファイル全体に変換して、各ピースの最初と最後のフレームに無音を追加しました。 http://lame.sourceforge.net/tech-FAQ.txt

この問題を解決するには、ShineMP3Encoderソースコードを編集して、処理された各部分の開始フレームと終了フレームを追加しないようにしなければなりませんでした( "チャンクプロセッサ" )。これで問題は解決し、変更されたmp3ファイルをクライアントからサーバーにストリーミングすることができました。

関連する問題