2017-11-28 36 views
0

ライブラリから取得したRaspberry Pi 3でサウンドを再生しようとしています。私はサンプルがスピーカーに当たる正確な時間を提供する必要があります。ライブラリは時間に同期したサンプルを提供します。私はALSAを使用してサウンドを再生しています。しかし、私は時間を正確に得ることができないようです。私はsnd_pcm_htimestamp()、snd_pcm_delay()、snd_pcm_status_get_delay()、およびsnd_pcm_status_get_audio_htstamp()のいくつかの組み合わせを試しました。私もwriteiとmmapの両方で試してみました。ALSA再生遅延の取得

サンプルを再生するときの正確な時間をどのように取得することができますか?

答えて

1

snd_pcm_*delay()が最適です。しかし、多くのドライバはこれを実装せず、ソフトウェアには知られていない追加のハードウェアが存在する可能性があります。

0

今私は自分の質問に答えるつもりです。実際には、snd_pcm_status()を使用することが実際に行なわれる方法です。私は最初の試みでバグがありました。次のコードは、追加された次のサンプルがブートからナノ秒単位で再生される時間を計算します。

snd_pcm_status_t *pcm_status; 
snd_pcm_status_alloca(&pcm_status); //Allocate space on the stack 
snd_pcm_status(handle, pcm_status); 
int delay = snd_pcm_status_get_delay(pcm_status); 
snd_htimestamp_t tstamp; 
snd_pcm_status_get_audio_htstamp(pcm_status, &tstamp); 

uint64_t Time = tstamp.tv_sec * (uint64_t)1000000000 + tstamp.tv_nsec; 
Time += (delay * (uint64_t)1000000000)/44100; 
関連する問題