1

ユーザーがタイムラインで再編成できる短い mp3 ファイルがいくつかあります。その後、6 つの短いものを組み合わせて、1 つの mp3 ファイルとして結果を保存したいと考えています。他のプロジェクトでは、マイク録音を行い、alchemy ShineMP3Encoder を使用して mp3 に圧縮し、それをファイルとして保存しました。

少なくとも 2 つのアプローチがあります。

  1. 読み込まれた Sound オブジェクトからすべての ByteArray データを抽出し、それを新しい ByteArray に連結して、Shine で圧縮します。ただし、Sound.extract の ByteArray はエンコーダーと互換性がないようで、「エラー: MS-RIFF ファイルではなく入力してください」と表示されます。
  2. デコードとエンコードを必要とせずに生の MP3 ファイルを何らかの方法で結合します。しかし、それはファイルのヘッダー情報などを取り除かなければならないことを意味します。

Flash で不可能または非常に非効率的である場合は、PHP でのサーバー側のソリューションを検討します。それが簡単な場合は、私に知らせてください。

ありがとう!

4

2 に答える 2

0

実際、複数の mp3 ファイルを結合するのは簡単であることがわかりました。生データを連結して、新しい mp3 ファイルとして保存するだけです。いくつかの条件が適用されます:

  1. すべての圧縮設定が同一で、動的でないことを確認してください。ビットレート、周波数、ステレオ/モノラルなど
  2. OS または mp3 プレーヤーによって示される最終結果の長さが間違っている可能性があり、最初のセグメントの長さのみが表示されます。これはヘッダーデータです。ただし、Flash を含むほとんどのプレーヤーはファイル全体を再生するだけなので、ほとんどの場合、これは問題になりません。

この例では、Greensock の LoaderMax ライブラリを使用しています。DataLoader は、使用する特定のローダー タイプです (デフォルトではバイナリである必要があります)。*後でローダーを識別するために URL を名前として使用していることに注意してください。いくつかの *_variables* はクラス メンバーとして宣言する必要があります* もちろん、ネイティブの方法または別のライブラリを使用してファイルをロードすることもできます。

for each ( var mp3FileURL : String in _mp3FileURLs )
{
    var loader : DataLoader = new DataLoader( mp3FileURL, mp3FileURL ) );
    _preloadQueue.append( loader );
}

キューのロードが完了すると、ローダーからのデータの処理を開始できます。

_audioEditMP3 = new ByteArray();

for each ( var mp3FileURL : String in _mp3FileURLs )
{
    var content : * = _preloadQueue.getContent( mp3FileURL );
    _audioEditMP3.writeBytes( content );
}

これで、ファイルを保存する準備ができました!

var file : FileReference = new FileReference();
file.save( _audioEditMP3, "myAudioCompilation.mp3" );
于 2013-07-26T08:19:37.207 に答える
0

これらを 1 つのファイルに物理的に結合する必要がありますか。つまり、Flash は実際に単一の MP3 を生成する必要がありますか? それとも、1 つの長いファイルであるかのようにユーザーに再生されますか?

Flash には MP3 をエンコードする機能が組み込まれていませんが、さまざまな Flash Media Server にはその機能があると思います (Red5 など)。実際には、探索の際に、MP3 クライアント側で録音できる技術を持っていると主張する人へのリンクがありますが、内蔵マイクからのオーディオ録音に適しているようです。

http://fms.denniehoopingarner.com/

おそらく、彼と協力してコードを変更し、既存のサウンド ファイルを操作して新しいサウンド ファイルを生成することができます。それ以外の場合は、おそらくサーバー側の派手なフットワークでそれを行う必要があります。

于 2012-05-02T15:52:21.733 に答える