0

私は現在、大量のオーディオ データを生成してユーザーのマシンに保存するプロジェクトに取り組んでいます。

少量のデータでは問題なく動作しますが、メモリ使用量が増えると、フラッシュ アプリケーションは苦労し始め、最終的には停止します。

私はこの問題を克服するための可能な方法について考えてきました.すべてのデータをメモリに保存する代わりに(時には最大100mb)、考えられる解決策はデータをサーバーにストリーミングすることです(毎秒44100浮動小数点数).生成され、データの蓄積が終了すると、クライアントに送り返されます。

1) このアイデアに何か問題があると思いますか? もしそうなら、より良い代替案を提供できますか?

2) これを実現するための優れたサーバー技術をお勧めできますか?

編集 1

詳細を追加するには。

クライアントで sound.extract メソッドを使用してオーディオを生成しています。オーディオがスピーカーに送信されているので、バイト配列にも送信します。

ユーザーが停止ボタンを押したら、バイト配列内のオーディオ データの前に wav ヘッダーを追加し、ユーザーが今聞いているオーディオの wav をダウンロードできるようにします。

理想的には、ユーザーが保存できるデータ量に制限を課したくありませんでした。これは不可能な場合があります。

このすべてのオーディオ データをメモリに保存すると、フラッシュで重大なパフォーマンスの問題が発生していました。このデータをクライアントマシンに段階的に保存する方法がわからないので、メモリ負荷を軽減するためにデータをどこかのサーバーに段階的にストリーミングすることが解決策になるかもしれないと考えていました。

4

2 に答える 2

0

mp3ファイルを読み込んで抽出しようとしました:

期間: 09:18
mp3 バイト: 22345728
抽出されたバイト: 178765824

22MBから生成された178MBは本当に恐ろしいです。

このような深刻なメモリ使用量を回避することは可能だと思いますが、さらに情報が必要
です。Sound.extract() を使用している場合は、mp3 ソースを持っている可能性がありますか?
アプリのデータ フロー (ロード、アンロード、変換、保存) を説明していただけますか?
そして愚かな質問: どうやって .wav を保存しますか? .mp3 を保存することは可能ですか?

UPD: この時点で、解決策は、ロードされたサウンドの高速ラッパーを作成して、そこからサンプル (2 つの数値 - 開始時間と停止時間として保存) を取得 (および作成) することだと思います。私はそれが可能です(メディアラッパーのコーディングが大好きです。研究のための時間を見つけたいと思っています)そして、このクラスが許容できる速度を提供する場合、すべてのミキシングはシングルなしで行われextract()、サンプルの最終タイムラインの再生が開始されます(生成保存する必要があるサウンド) byteArray は、SampleDataEvent によって簡単に抽出しSoundMixer.computeSpectrum()て渡すか、ユーザーのローカル ファイルシステムに直接渡すことができます。それは唯一のByteArrayになります:)

于 2010-11-03T08:00:27.840 に答える
0

まさにそれを達成したいというスレッドを見つけました。いくつかの解決策が提案されています。

http://drupal.org/node/69242

編集:わかりました、正確ではありませんが、似ています。ここで他の人の経験から何かを集めて、適切な解決策を考え出すことができるかもしれません。

于 2010-11-02T20:38:34.937 に答える