在阅读整首歌曲之前,播放会退出

时间:2019-05-08 10:20:45

标签: linux audio playback alsa libalsa

问题陈述:作为文件转储时,我在输出中没有收到整首歌曲(我无法通过插孔听到这首歌,但可以转储文件内容)。

摘录:我是ALSA编程的新手,并且我的嵌入式板卡带有有限的命令集。我已经浏览了以下链接:ALSA tutorial required,但无法弄清楚与计时相关的问题。

设置:

OS: linux 4.14.70
aplay: version 1.1.4 by Jaroslav Kysela <perex@perex.cz>
Advanced Linux Sound Architecture Driver Version k4.14.70.

所涉及的音频盒具有单独的硬件和单独的DSP,用于独立处理

信息流:Linux-> DSP核心

输入歌曲被传送到linux核心,将歌曲加载到DMA区域->将DMA读取到DSP使用的单独的DMA环形缓冲区中,并将其写入I2S输出路径到文件中

我可以看到这首歌的大小是960000字节,采样率为48000,S16_LE formwat,2声道,16位比特深度->如下图所示-按照页面“ https://www.colincrawley.com/audio-duration-calculator/”进行计算“

Bit Rate: 1536 kbps
Duration: 
0 Hours : 0 Minutes : 5 Seconds . 34 Milliseconds

当我记录日志时,我的DSP内核仅处理歌曲大约一段时间。在“ aplay”应用程序发送一个ioctl调用以关闭linux上的音频接口之前1秒。

我的问题是:

  1. 游戏如何理解时间?在5秒钟的时间内,我们如何确定它已经运行了5秒钟。
  2. 在发出关闭IOCTL命令之前,是否有一种理解方法可以等到将整首歌曲发送到DSP内核进行处理?

有关我正在输入的输入文件的更多信息:

  stream       : PLAYBACK
  access       : RW_INTERLEAVED
  format       : S16_LE
  subformat    : STD
  channels     : 2
  rate         : 48000
  exact rate   : 48000 (48000/1)
  msbits       : 16
  buffer_size  : 24000
  period_size  : 6000
  period_time  : 125000
  tstamp_mode  : NONE
  tstamp_type  : MONOTONIC
  period_step  : 1
  avail_min    : 6000
  period_event : 0
  start_threshold  : 24000
  stop_threshold   : 24000
  silence_threshold: 0
  silence_size : 0
  boundary     : 6755399441055744000
  appl_ptr     : 0
  hw_ptr       : 0

我很乐意提供更多信息来理解为何aplay应用程序会尽早关闭歌曲。但是请注意,它是一个封闭源项目。

我使用的命令:

aplay input.wav -c 2 -r 48000 -t wav

input size: 960044 bytes (including wav header)
output size: 306 KB observed before IOCTL call to close the audio interface occurs.

For a input.wav file of 960044 file size i.e., 938 KB,

time aplay input.wav returns:

real    0m0.988s
user    0m0.012s
sys     0m0.080s

To find the duration of wav file:

fileLength/(sampleRate*channel*bits per sample/8) = 960000/((48000 * 2 * 16)/8) = 5 seconds


If I run the same song on my Ubuntu machine, it is as expected:

real    0m5.452s
user    0m0.025s
sys 0m0.029s

关于为什么会发生这种情况的任何提示?如上所示,我可以看到aplay应用程序在0.98秒内退出。但是这首歌必须播放5秒钟。

1 个答案:

答案 0 :(得分:0)

自定义音频硬件似乎存在一些问题,这延迟了处理歌曲的时间。现在看来是固定的。基本上,随着读取字节,声音硬件必须至少根据AXI协议提供足够的延迟。但是在这种情况下,事实并非如此。现在解决了。感谢您的关注