2011-01-26 9 views
4

現在、AudioTrackを使用して録音済みの音楽を再生しています。これはトラックデータをオーディオバッファに書き込むことを含む。オーディオデータストリームを使用してリアルタイムで再生されるオーディオを表す波形を画面上に描画するにはどうすればよいでしょうか?私はどのように起動するのか分からない前にアンドロイド上で高度なグラフィックを使用していません。 OpenGLを使用する必要がありますか、またはビューを実装できますか?また、どのようにデータを描画に使用するのに便利なものに変換するのですか?ByteStreamからAndroid AudioTrackを視覚化する

答えて

3

あなたの最初のステップは、setPositionNotificationPeriod(periodInFrames)に電話することです。これは、アプリケーションがonPeriodicNotificationコールを受信する頻度を決定します。したがって、オシロスコープ型のビジュアライゼーションを行っていて、任意の瞬間に画面に50ミリ秒分のオーディオデータを表示したい場合は、periodInFramesの値を2205に設定します(WAVファイルがモノラル、サンプルあたり16ビット44,100Hzサンプルレート)。

通知イベントの中で、現在AudioTrackオブジェクトの再生がどこにあるかを判断し、元のファイルまたは配列から対応するスライスを取得できます。その後、通常の2Dグラフィックス・メソッドを使用して、このデータスライスをビューに描画します(ここではOpenGLは必要ありません)。 This answerには、オーディオデータのスライスを描画するためのC#サンプルがあります。これはjavaに簡単に変換できます。

だからあなたのコードは、一種の本のように見えることになります:

audioTrack.setPositionNotificationPeriod(2205); 
audioTrack.setPlaybackPositionUpdateListener(this); 

... 

public void onPeriodicNotification(AudioTrack track) { 
    int pos = track.getNotificationMarkerPosition(); 
    short[] slice = Array.copy(_data, pos, _sliceSize) // pseudo-code 
    // render the slice to the view 
} 
+0

感謝のリリース以降にこのクラスを使用することができ、これは私が開始され、右方向への移動を取得する必要があります。私は、これが複数のストリームでどのように機能するか心配する必要があります。 – DeliveryNinja

+0

ええ、それはあなたの難易度をかなり大幅に向上させます。私はあなた自身が1つのストリームにすべてをプレミックスすることをお勧めしますが、それはあなたがやっていることに対しては不可能かもしれません。 – MusiGenesis

+0

私は実際に視覚化された4つのオーディオトラックを実行することを計画しており、レイテンシーはオーディオを記録する際に大きな要因となります。これがどうやって始まるのかは誰が知っていますか? NDK 2.3に移行する必要があるかもしれません。 – DeliveryNinja

2

、その点については、私はあなたが波形アレイまたは周波数配列の生成を処理android.media.audiofx.Visualizerクラスを使用することを示唆しています。だからあなたが気を配らなければならないのは、グラフィックスの描画だけです。

あなたはAPI 9.

関連する問題