You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将音频重定向至FIFO文件?及用音频文件替代arecord发起呼叫?

没问题,我来帮你一步步解决这两个问题:

问题1:如何将音频重定向至FIFO文件?

首先得先创建一个FIFO文件(也叫命名管道),用mkfifo命令就能搞定:

mkfifo my_audio_fifo

接下来分两种常见场景处理:

  • 从实时录制的音频输出到FIFO:用arecord(或其他录音工具)直接把输出重定向到FIFO即可,比如用CD级别的音频格式(44.1kHz 16位立体声):
    arecord -f cd > my_audio_fifo
    
    你可以根据实际需求调整arecord的参数,比如修改采样率、声道数。
  • 从本地音频文件输出到FIFO:直接用cat把文件的二进制内容写入FIFO就可以(音频文件是二进制数据,cat能完整传递):
    cat your_audio_file.wav > my_audio_fifo
    

注意:FIFO有个关键特性——必须有程序打开它进行读取时,写入操作才会正常执行,否则写入命令会一直阻塞,直到有读端连接。所以要确保你的目标程序已经在监听这个FIFO,再执行写入命令。

问题2:替换arecord命令,将本地sound.wav输出至call_in FIFO

原来你用arecord的命令大概是类似arecord [参数] > call_in,现在换成本地文件输出,分两种情况处理:

情况1:sound.wav的格式和程序预期完全匹配

最简单的方法就是直接用cat把文件内容写入call_in:

cat sound.wav > call_in

这个命令会把整个wav文件的二进制内容直接发送到FIFO,只要格式(采样率、位深、声道数)和程序要求一致,就能正常发起呼叫。

情况2:sound.wav格式和程序预期不匹配

如果程序对音频格式有特定要求(比如单声道、48kHz采样率),就得先转码再输出。这里推荐用sox或者ffmpeg工具:

  • 用sox转码并输出到FIFO:
    sox sound.wav -t raw -r 48000 -b 16 -c 1 - > call_in
    
    参数说明:-r 48000是48kHz采样率,-b 16是16位位深,-c 1是单声道,你可以根据程序要求调整这些数值。
  • 用ffmpeg转码并输出到FIFO:
    ffmpeg -i sound.wav -f s16le -ar 48000 -ac 1 - > call_in
    
    参数说明:-f s16le指定输出为16位小端格式的原始音频,-ar 48000是采样率,-ac 1是单声道,同样按需调整。

同样要注意:执行这些命令前,确保你的程序已经在监听call_in这个FIFO,否则命令会卡住,直到程序开始读取。

内容的提问来源于stack exchange,提问作者BlandCorporation

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:14:17