0

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);

各mini-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

4

1 に答える 1

0

これは、wavの各部分をmp3に変換するプロセスが原因であることが判明しました。エンコーダーはそれらをmp3ファイル全体に変換し、各ピースの最初と最後のフレームに無音を追加していました。あなたはここで詳細な説明を見ることができます:http://lame.sourceforge.net/tech-FAQ.txt

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

于 2012-03-22T12:06:53.263 に答える