问题描述
目标
在第一个 USB 声卡上录制音频,
同时在第二个声卡上以低延迟播放此音频。
平台:树莓派
行为
我尝试了很多方法(见下文),但我无法让它发挥作用。搜索 alsaloop 给出的结果很少或过时。什么是现代方法来做到这一点?为什么不能使用 libsamplerate 进行重采样?
方法一
arecord -f dat -t raw -D hw:1,0 --buffer-size=256 | aplay -f dat -t raw -D hw:2,0 --buffer-size=256
一般情况下有效,但是:
当然,捕获率和播放率并非 100% 相同,因此一段时间后,延迟会增加。
方法 2
alsaloop -C hw:2,0 -P hw:3,0
这会立即崩溃并显示 Bus error
。
用gdb运行,显示这是libsamplerate在某处引起的,所以我尝试了另一种同步方法:
方法 3
alsaloop -C hw:2,0 -S 1 -vvv
不会崩溃,但似乎建立了一个样本队列(延迟增加了很多),然后以噼啪声重置:
playback hw:3,0/capture hw:2,0 sync type: SIMPLE
New pitch for playback hw:3,0: 1.00000000 (min/max samples = 0/0)
underrun for playback hw:3,0
last write before 3.9310ms,queued 8.1458ms/0.0000ms -> missing -4.2148ms
expected 10.0000ms,processing 0.0860ms,max missing 0.0000ms
last wake 3.3700ms,last check 3.3700ms,avail_min 5.9167ms
max buf 40.0000ms,pfilled 0.0000ms,cfilled 1.0000ms
job started before 0.0590ms
underrun for playback hw:3,0
last write before 5.8360ms,queued 5.0000ms/2.0000ms -> missing 0.8360ms
expected 10.0000ms,processing 1.2470ms,max missing 0.8360ms
last wake 7.0660ms,last check 7.0660ms,cfilled 3.0000ms
job started before 0.0640ms
New pitch for playback hw:3,0: 1.00001042 (min/max samples = 0/365)
New pitch for playback hw:3,0: 1.00002083 (min/max samples = 0/522)
New pitch for playback hw:3,0: 1.00003125 (min/max samples = 0/681)
New pitch for playback hw:3,0: 1.00004167 (min/max samples = 0/837)
New pitch for playback hw:3,0: 1.00005208 (min/max samples = 0/995)
New pitch for playback hw:3,0: 1.00006250 (min/max samples = 0/1152)
New pitch for playback hw:3,0: 1.00007292 (min/max samples = 0/1309)
New pitch for playback hw:3,0: 1.00008333 (min/max samples = 0/1466)
New pitch for playback hw:3,0: 1.00009375 (min/max samples = 0/1623)
New pitch for playback hw:3,0: 1.00010417 (min/max samples = 0/1920)
New pitch for playback hw:3,0: 1.00011458 (min/max samples = 0/2182)
New pitch for playback hw:3,0: 1.00012500 (min/max samples = 0/2493)
New pitch for playback hw:3,0: 1.00013542 (min/max samples = 0/2849)
[...]
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)