在PulseAudio中播放具有不同sample_spec的样本

时间:2012-06-15 09:58:58

标签: c linux audio pulseaudio

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

据我所知,流的sample_spec只能在流的创建过程中设置(pa_simple_newpa_stream_new等),之后无法切换它。

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

  1. 保留一个PulseAudio流,手动重新采样样本序列并在需要时混合通道(为了向PulseAudio提供相同sample_spec的样本)
  2. 保留单个PulseAudio流,关闭并在规格更改时使用新的sample_spec重新打开
  3. 保留一些流,一个用于我必须使用的每种样本
  4. 选项1看起来像很多手动工作,而且非常耗费资源。方案2似乎非常低效。选项3看起来可能是最好的选项,但我担心资源消耗。有什么我可能会失踪吗?

1 个答案:

答案 0 :(得分:1)

重新取样自己将是一种浪费的努力。您可以选择动态更新采样率。您需要设置PA_STREAM_VARIABLE_RATE并使用pa_stream_update_sample_rate()。但是,这仍然无法处理样本规格的变化。

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

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