ドラムセットをシミュレートするデスクトップ用のAIRアプリケーションを開発しています。キーボードを押すと、対応するドラムサウンドがアプリケーションで再生されます。ユーザーが特定の曲を再生しようとするように、アプリケーションに音符を配置しました。
次に、パフォーマンス全体を記録して、ビデオファイル(flvなど)にエクスポートします。私はすでにこのエンコーダーを使用してビデオを録画することに成功しています:http:
//www.zeropointnine.com/blog/updated-flv-encoder-alchem/
ただし、このエンコーダーには、音声を自動的に録音する機能はありません。ByteArray
その特定のフレームでサウンドを取得し、それをエンコーダーに渡す方法を見つける必要があります。フレームごとに異なるSound
オブジェクトが同時に再生される可能性があるため、最終的なサウンドのバイトを取得する必要があります。
SoundMixer.computeSpectrum()
現在のサウンドをバイト単位で返すことができることを認識しています。ただし、ByteArray
返される長さは512に固定されているため、エンコーダーの要件に適合しません。少しテストした後、サンプルレート44khz 8ビットステロで、エンコーダーはオーディオバイトデータ配列の長さが5880であると想定します。によって返されるデータはSoundMixer.computeSpectrum()
、必要なエンコーダーよりもはるかに短いです。
私のアプリケーションは60FPSで実行されており、15FPSで記録しています。
だから私の質問は:複数のSound
オブジェクトによって混合され、エンコーダが機能するのに十分なデータ長を持っている現在のフレームのオーディオバイトを取得する方法はありますか?それを行うためのAPIがない場合は、オーディオをミキシングして結果バイトを自分で取得する必要がありますが、どうすればよいですか?