0

我正在开发一个应用程序,它通过自定义 UDP 协议从远程服务器接收音频样本流。该流由小样本序列组成,每个序列可能具有不同数量的通道和速率。

据我了解,流的 sample_spec 只能在流的创建过程中设置(pa_simple_new,pa_stream_new等),之后无法切换。

我的问题是:在 PulseAudio 中播放这些样本的最有效方法是什么?我看到三个选项:

  1. 保留单个 PulseAudio 流,在需要时手动重新采样样本序列和混合通道(以便为 PulseAudio 提供相同 sample_spec 的样本)
  2. 保留单个 PulseAudio 流,在规格更改时使用新的 sample_spec 关闭并重新打开它
  3. 保留多个流,一个用于我必须使用的每种样本

选项 1 似乎需要大量手动工作,而且也非常耗费资源。选项 2 似乎非常低效。选项 3 看起来可能是最好的,但我担心资源消耗。有什么我可能会丢失的吗?

4

1 回答 1

1

重新采样自己将是浪费精力。您确实可以选择动态更新采样率。您需要设置 PA_STREAM_VARIABLE_RATE 并使用 pa_stream_update_sample_rate()。不过,这仍然不能处理示例规范更改。

2 和 3 都是有效的,显然在预先分配资源(选项 3)和轻微的性能损失(选项 2)之间需要权衡。老实说,创建​​流并没有那么昂贵,并且保持流的开销也不应该很高(除非您处于资源严重受限的环境中)。

因此,如果您有固定数量的规格/价格组合,只需预先创建流。如果规格/速率的变化很少,只需拆除并重新创建流。

于 2012-06-21T12:25:13.723 回答