我有一个 wav 文件,持续时间:00:00:00.17(不到一秒!)
当我调用play
执行它时,play
执行得很好,但我的终端空闲了大约 4 秒,直到播放过程完成。
这是设计使然吗?是否可以只播放声音并在不到一秒的时间内完成?
编辑:time
按照建议运行@jsbillings:
File Size: 1.89k Bit Rate: 90.3k
Encoding: Unsigned PCM
Channels: 1 @ 8-bit
Samplerate: 11025Hz
Replaygain: off
Duration: 00:00:00.17
In:100% 00:00:00.17 [00:00:00.00] Out:1.85k [!=====|=====!] Clip:0
Done.
real 0m2.912s
user 0m0.004s
sys 0m0.008s
答案1
我认为这是正常的声音系统延迟(主要是缓冲)以及程序流的产物(缓冲区、同步 I/O、轮询)。正在播放的环形缓冲区可能比仅持续 00:00:00.17 秒的微不足道的样本大得多。
该延迟与样本的持续时间成正比吗?即,较长的样本是否具有较小的延迟?我希望使用更大的样本(例如一两秒)来减少此类延迟。
声音可能是非常棘手的东西,尤其是当你深入研究细节时。如果我上面所说的是真的(关于较长的样本大小),我会说这对于您使用的任何声音子系统来说都是正常的。
我自己使用pulseaudio来处理低延迟的东西(比如游戏中的枪),但你描述的问题与低延迟并不真正相关;这更多的是软件等待硬件告诉它何时播放完整个缓冲区的问题,该缓冲区比它包含的样本大。
如果我有什么地方说错了,请指出来。谢谢 :)