【问题标题】:Retrieving ALSA playback delay检索 ALSA 播放延迟
【发布时间】:2018-05-12 04:28:28
【问题描述】:

我正在尝试在从库中检索到的 Raspberry Pi 3 上播放声音。我需要提供一个准确的时间来确定样本何时会击中扬声器。然后图书馆将提供与时间同步的样本。我正在使用 ALSA 播放声音。但是我似乎无法准确获得时间。我尝试了 snd_pcm_htimestamp()、snd_pcm_delay()、snd_pcm_status_get_delay() 和 snd_pcm_status_get_audio_htstamp() 的几种组合。我也尝试过 writei 和 mmap。

谁能给我一个提示,告诉我如何获取播放样本的准确时间?

【问题讨论】:

    标签: linux raspberry-pi3 alsa


    【解决方案1】:

    snd_pcm_*delay() 为您提供最佳估计。但是,许多驱动程序没有实现这一点,并且可能存在软件不知道的其他硬件。

    【讨论】:

      【解决方案2】:

      现在我要回答我自己的问题。事实证明,使用 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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-12
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        • 2015-05-28
        • 2015-10-25
        • 2011-12-29
        相关资源
        最近更新 更多