gpt4 book ai didi

python - 在Python中将音频输出从一个函数重定向到另一个函数

转载 作者:行者123 更新时间:2023-11-30 23:39:04 24 4
gpt4 key购买 nike

假设我有两个函数,分别来自两个不同的 API:函数 A 和 B。

默认情况下,函数A将音频数据输出到wav文件。

默认情况下,函数 B 从 wav 文件获取音频输入并对其进行处理。

是否可以将数据从函数 A 流式传输到函数 B?如果是这样,我该怎么做?如果相关的话,我会在 lubuntu 上工作。

这是我正在考虑的 PJSUA python API 中的函数 A:

create_recorder(自身,文件名)创建 WAV 文件记录器。

关键字参数filename -- WAV 文件名

返回: WAV 录音机 ID

这是 Pocketsphinx Python API 中的函数 B

decode_raw(...)

从文件中解码原始音频。参数:fh(文件)-从中读取音频的文件句柄。uttid (str) - 赋予该话语的标识符。maxsamps (int) - 要读取的最大样本数。如果未指定或为-1,则将读取文件的其余部分。

更新:

当我尝试传递套接字或命名管道的文件名时,它会输出此错误消息,似乎 python 绑定(bind)使用的 C 函数除了 .wav 文件之外不喜欢任何东西...为什么会这样?

pjsua_aud.c .pjsua_recorder_create() 错误:无法确定/tmp/t_fifo 的文件格式。异常:对象:LIb,操作=创建(记录器),错误=不支持选项/操作(PJ_ENOTSUP)

我需要使用create_recorder()返回的值,它是一个int,用于获取wav录音机id(它不会直接传递给decode_raw(),而是传递给其他函数。

最佳答案

答案高度依赖于平台,需要更多详细信息。不同的操作系统有不同的处理进程间通信(IPC)的方式。

如果您使用的是类 UNIX 环境,则可以使用一组丰富的 IPC 原语。管道、SYS V 消息队列、共享内存、套接字等。在您的情况下,我认为使用管道或套接字是有意义的,具体取决于 A 和 B 是否在同一进程中运行。

更新:

就您而言,我将使用 python 的 subprocess 和/或 os 模块和管道。这里的想法是在共享父进程的进程中创建两个 API 的调用上下文,该父进程还创建了一个单向命名管道并将其传递给其子进程。然后,在 create_recorder 中写入命名管道的数据将立即可在命名管道中进行 read() 操作。

关于python - 在Python中将音频输出从一个函数重定向到另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13884439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com