2016-10-29 19 views
0

AndroidのAudioTrackクラスを使用して生のサウンドデータを再生しようとしていますが、writeメソッドを使用していますが、書き込みメソッドが返されて実際のサウンドが再生されるまでそれは、単純な私たちは、次のpseduコードとしてAudioRecordクラスを使用してみましょう作る:Android AudioTrack再生時の再生時間

//init AudioTrack 
//init AudioRecord 
while(true){ 
    byte [] buffer = new byte[1000]; 
    int read = audioRecord(buffer,0,1000); 
    audioTrack.write(buffer,0,read); 
} 

私はread/sample rate秒ですが、実際の音がした後に再生し、約0.5秒の余分れる遅延を得ることを期待、私は本当ににオーディオを必要とします最小レイテンシで演奏されるので、誰が何が起こっているのかについての説明を持っており、利用可能な解決策があるかどうか、あるいはこれはa rdwareの問題?

答えて

1

私は、このシナリオでは待ち時間が本当に重要なので、いくつかの対話型オーディオソリューション(サウンドはユーザーアクションに応じて再生される)を考え出すことを前提としています。

Androidでは、最低のレイテンシを達成するために、NDKを使用してネイティブ(C++)コードで使用できるOpen SL ES APIを使用する必要があります。低遅延を実現できる唯一のJava側のメカニズムはSoundPoolクラスですが、どのような種類のサウンドを再生できるかには限界があります。詳細については

、これはSO答えるチェックアウトも the page on high-performance audioを参照してください、そして: Low-latency audio playback on Android

+0

それは言う:「OpenSL ESであるため、OpenSL ESを呼び出して非のDalvikアプリケーションスレッドがネイティブC APIを持っていないのDalvik関連OpenSL ESを使用しても、オーディオ待ち時間が短縮され、スケジューリングの優先度が高くなりません。一般的に提供しています。 – ammcom

+0

Java VM(現代のAndroidバージョンではARTと呼ばれます)のオーバーヘッドは重要です。低レイテンシを達成するには、音声コールバックが250 Hzの周波数で確実に呼び出される必要があります。そのため、コールバックは4ms未満の時間予算しかないので、1マイクロ秒ごとにカウントします.JNIやGC。 –

関連する問題