2013-03-06 172 views
0

Python标准库包含audioop module,它对“声音片段”有一些有用的操作。其中一个功能是audioop.ratecv,它可以将音频从一个采样率转换为另一个采样率。audioop.ratecv使用什么算法来转换采样率?

我的问题是:audioop.ratecv使用哪种算法将一个采样率转换为另一个采样率?具体来说:当我们下样时,ratecv是否从多个取样信息在原始样本中输出的每个样本?或者它只是做一个快速而又脏的转换,它只是从原始中丢弃一些样本?

(最后我想知道ratecv是否做了“高品质”向下转换。)

(一种替代的问题是:我在哪里可以找到audioop的源代码在我的Ubuntu的audioop一个搜索?系统只是揭示了/usr/lib/python2.7/lib-dynload/audioop.so这不是源代码。)

谢谢!

回答

1

来源可查询here

+0

太好了,谢谢。我必须承认,我正在努力遵循代码,但从我的理解来看,它看起来并没有做出高质量的下变换。我认为至关重要的一点是[行1246](https://bitbucket.org/python_mirrors/cpython/src/73024d00208f/Modules/audioop.c?at=default#cl-1246):'cur_o =(prev_i [ chan] * d + cur_i [chan] *(outrate - d))/ outrate;'但我可能是错的。 – 2013-03-06 15:27:20

+0

我打算使用[sox](http://sox.sourceforge.net/)进行费率转换。 – 2013-03-06 17:06:39

+0

我也无法理解它。我认为重要的一行是:'cur_i [chan] =(weightA * cur_i [chan] + weightB * prev_i [chan])/(weightA + weightB);'我同意它看起来并不像他们在做什么花哨。感谢提到sox。我可能会研究它。 – Pace 2013-03-07 04:06:19