2

リアルタイムのオーディオ再生と同期するアプリケーションに取り組んでいます。特定のタイムステップでリスナーを定義し、リスナーを使用して、再生中のオーディオがタイムステップで進むたびに更新を取得したいと考えています。この機能を実装することは可能でなければなりません (存在証明はオーディオ プレーヤー アプリのタイム カウンターです) が、私が考えているアーキテクチャは不可能かもしれません。

理想的には、サウンド カードの SPEAKER または HEADPHONE ターゲット ポートでオーディオ ストリームを聞くことです。既存の LineListener/LineEvent 機能は START/STOP/OPEN/CLOSE イベントのみをサポートしており、Target Port 実装 (または SourceDataLine または TargetDataLine) をサブクラス化して拡張することはできません。

これどうやってするの?スレッドで getMicrosecondPosition() または getLongFramePosition() メソッドを常にポーリングし、適切なタイミングで独自のイベントを発生させる必要がありますか? それは非常に非効率に聞こえます。定期的にポーリングをトリガーするためにタイマーを使用した場合、Port/DataLines でサポートされている使用可能な START イベントと STOP イベントの間にシステム タイマーを使用するよりも優れています。getMicrosecondPosition() メソッドを呼び出して同期しますが、システム タイマーとリアルタイム オーディオの間のドリフトにより、時折エラーが発生する可能性が高いと思います。カウンターの繰り返しまたはスキップが見られると思います(つまり、1:23:003、1:23:004、1:23:006、1:23:007...または1:23:003、1:23) :004、1:23:004、1:23:005..)。

javazoom mp3プレーヤーのソースを見て、彼らがどのようにそれを行ったかを確認していますが、これまでのところそれを理解することはできません. ヘルプ/ヒントをいただければ幸いです。

4

0 に答える 0