我正在开发一个应用程序,它通过自定义UDP协议从远程服务器接收音频样本流。该流由小样本序列组成,每个序列可能具有不同数量的通道和速率。
据我所知,流的sample_spec只能在流的创建过程中设置(pa_simple_new
,pa_stream_new
等),之后无法切换它。
我的问题是:在PulseAudio中播放这些样本的最有效方法是什么?我看到三个选项:
选项1看起来像很多手动工作,而且非常耗费资源。方案2似乎非常低效。选项3看起来可能是最好的选项,但我担心资源消耗。有什么我可能会失踪吗?
答案 0 :(得分:1)
重新取样自己将是一种浪费的努力。您可以选择动态更新采样率。您需要设置PA_STREAM_VARIABLE_RATE并使用pa_stream_update_sample_rate()。但是,这仍然无法处理样本规格的变化。
2和3都是有效的,显然在预先分配资源(选项3)和轻微的性能损失(选项2)之间存在权衡。说实话,流创建并不昂贵,并且保持流也不应该是高开销(除非您处于资源严重受限的环境中)。
因此,如果您有固定数量的规格/费率组合,只需预先创建流。如果规格/速率的变化很少,只需拆除并再次重新创建流。