【发布时间】:2023-04-06 23:18:02
【问题描述】:
假设我有两个函数来自两个不同的 API,函数 A 和 B。
默认情况下,函数 A 将音频数据输出到 wav 文件。
默认情况下,函数 B 从 wav 文件中获取音频输入并进行处理。
是否可以将数据从函数 A 流式传输到 B?如果是这样,我该怎么做?如果相关,我在 lubuntu 上工作。
这是我从 PJSUA python API 考虑的函数 A:
create_recorder(self, filename)
创建 WAV 文件记录器。
关键字参数
文件名 -- WAV 文件名
返回:
WAV录音机ID
这是来自 Pocketsphinx Python API 的函数 B
decode_raw(...)
从文件中解码原始音频。
参数:
fh (file) - 从中读取音频的文件句柄。
uttid (str) - 赋予此话语的标识符。
maxsamps (int) - 要读取的最大样本数。如果未指定或 -1,则将读取文件的其余部分。
更新:
当我尝试传递套接字或命名管道的文件名时,它会输出此错误消息,似乎 python 绑定使用的 C 函数除了 .wav 文件之外什么都不喜欢... 为什么会这样?
pjsua_aud.c .pjsua_recorder_create() 错误:无法确定 /tmp/t_fifo 的文件格式。例外:对象:LIb,操作=创建(记录器),错误=不支持选项/操作(PJ_ENOTSUP)
我需要使用 create_recorder() 返回的值,它是一个 int,用于获取 wav 记录器 id(不直接传递给 decode_raw(),而是传递给其他函数。
【问题讨论】:
-
这取决于,你将什么传递给函数
A
?您传递文件名还是文件对象?如果函数A
可以接受一个文件对象,你也许可以给它一个 StreamIO 对象。 -
这是一个文件名......我将编辑我的原始帖子以提供更多信息。
-
您是否尝试过使用其他名称:
/tmp/t_fifo.wav
而不是/tmp/t_fifo
? -
是的,我昨天试过了,它奏效了。我看了看 C 代码,显然它只是检查 .wav 扩展名...感谢您的帮助,现在我只是在寻找一种从 create_recorder 函数获取返回值的方法
-
返回值在哪里使用?在
decode_raw()
通话之前或之后需要它吗?如果是前者,那么流式传输将是有问题的。不要在 cmets 中为您自己的问题添加信息,edit 而是。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:将音频输出从一个函数重定向到python中的另一个函数 - Python技术站