【python】Windows中编译安装libsamplerate和scikits.samplerate

【python】Windows中编译安装libsamplerate和scikits.sampleratelibrosa缘由librosa是一个音频和音乐处理的Python包,我用它来做音频的特征提取。但是在使用时,发现librosa.load将音乐文件转化为时间序列的过程中,速度实在难以忍受,cpu跑的非常高,程序好像假死的状态。查阅官方文档发现,默认情况下,librosa会使用scipy.signal进行音频信号的重采样,这在实际使用时是很慢的。如果要获得很高的性能,官方建议安装libsampl

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

librosa缘由

librosa是一个音频和音乐处理的Python包,我用它来做音频的特征提取。但是在使用时,发现librosa.load将音乐文件转化为时间序列的过程中,速度实在难以忍受,cpu跑的非常高,程序好像假死的状态。
查阅官方文档发现,默认情况下,librosa会使用scipy.signal进行音频信号的重采样,这在实际使用时是很慢的。如果要获得很高的性能,官方建议安装libsamplerate和其相应的python模块scikits.samplerate
这就是说,在Windows下进行安装的话,要先编译libsamplerate得到相应的lib和dll文件,再安装python的接口模块。
我试着在linux下进行安装,过程是很流畅的,因为使用apt-get可以方便安装libsamplerate,pip进行scikits.samplerate安装的时候,系统可以直接找到libsamplerate编译好的lib文件。

虽然这个软件比较小众,但如果有读者遇到相同的问题,希望能对你有所帮助。

Windows下编译libsamplerate

libsamplerate官方说明
编译步骤:

  1. 解压libsamplerate压缩包到C:\libsamplerate-0.1.8目录
  2. 下载libsndfile的二进制安装包进行安装
  3. 复制libsndfile中的libsndfile-1.dll, libsndfile-1.lib 和 libsndfile-1.def文件到C:\libsamplerate-0.1.8目录中
  4. 复制libsndfile中的include/sndfile.h到C:\libsamplerate-0.1.8目录中
  5. 确保将vc编译器的bin目录加入到系统环境变量中
  6. 打开Win32\Makefile.msvc文件,修改
    • MSVCDir=(你的安装目录)\Microsoft Visual Studio 11.0\VC
    • CFLAGS变量加入Microsoft SDKs的Include文件夹,比如我的是CFLAGS=/nologo /MD /W1 /GX /O2 /Zm200 /I “$(MSVCDir)\Include” /I “C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include” /I . /I “Win32” /I “src” /D “WIN32” /D “_USRDLL” /YX /FD /Zm1000
    • PROG_LINK_FLAGS变量加入Microsoft SDKs的Lib文件夹,我的是PROG_LINK_FLAGS=/nologo /incremental:no /libpath:”$(MSVCDir)\Lib” /libpath:”C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib” /pdb:”libsamplerate-0.pdb” /machine:I386 /exetype:dynamic
    • DLL_LINK_FLAGS变量加入Microsoft SDKs的Lib文件夹,我的是DLL_LINK_FLAGS=/nologo /dll /incremental:no /libpath:”$(MSVCDir)\Lib” /libpath:”C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib” /pdb:”libsamplerate-0.pdb” /implib:”.\libsamplerate-0.lib” /machine:I386 /out:”libsamplerate-0.dll”
  7. 命令行模式下进入C:\libsamplerate-0.1.8目录,输入Make.bat进行编译,使用make check进行程序测试
  8. 最终得到了libsamplerate-0.dll,libsamplerate-0.lib,结合src目录下面的samplerate.h

源码安装scikits.samplerate

如果要使用pip进行安装的话,系统可能找不到libsamplerate的lib文件,导致安装失败。
下载了scikits.samplerate的源码包之后,需要对site.cfg文件进行配置,制定samplerate库的lib文件名和所在目录才可以正常的安装,不然也会导致失败。

在scikits.samplerate目录下,打开site.cfg文件,修改内容为:

[samplerate]
library_dirs = c:\libsamplerate-0.1.8
libraries = libsamplerate-0

这样就可以进行python setup.py install安装了。

这里还要注意,安装成功之后,在python的第三方库文件夹中找到scikits.samplerate,在scikits\samplerate文件夹中将libsamplerate编译好的dll文件放进去,这样就可以使用了。

补充:音频重采样

频率对应于时间轴线,振幅对应于电平轴线。波是无限光滑的,弦线可以看成由无数点组成,由于存储空间是相对有限的,数字编码过程中,必须对弦线的点进行采样。采样的过程就是抽取某点的频率值,很显然,在一秒中内抽取的点越多,获取得频率信息更丰富,为了复原波形,一次振动中,必须有2个点的采样,人耳能够感觉到的最高频率为20kHz,因此要满足人耳的听觉要求,则需要至少每秒进行40k次采样,用40kHz表达,这个40kHz就是采样率。

为了减少计算复杂度和存储复杂度,采样速率转换技术是十分必要的,音频重采样算法可以用来实现音频信号任意采样速率之间的转换。

对于采样率为Fs,长度为M个采样点的音频信号x[n],,通过采样因子P/Q进行重采样后,这个信号的样本数可以增大或者减小。该过程可以分为如下三个步骤[17]:
(1)上采样:在原信号相邻两点内插入P-1个零点,即创建一个有P (M-1)+1个采样点的信号xu[n],当n=1,2,…,M时,xu[P(n-1)+1] = x[n];否则,xu[n]=0。
(2)插值:xu[n]和一个低通插值滤波器h[n]作卷积:xi[n]= xu[n]h[n]。
(3)下采样:每隔Q-1个点抽取一个点,即创建有Q个点的信号xd[n],当n=1,2,…,+1时,xd[n]=xi[1+Q (n-1)],则重采样信号y[n]=xd[n]。(符号表示向下取整数)
不同类型的重采样算法都可以分为上述三个过程,它们的唯一的区别就在于步骤2中所采用的插值滤波器的不同。

注意事项:
1.上采样时,会造成镜像信息,因此需要使用低通滤波器滤除(线性插值本身就是低通滤波器,因此不需要额外处理)。
2.下采样时,可能会造成频谱混淆,因此在下采样之前用低通去混淆滤波器滤除。
3.重采样算法非常消耗时间,使用多相滤波器与一些条件限制,可以大大提高运算速度。

转载请注明作者Jason Ding及其出处
GitCafe博客主页(http://jasonding1354.gitcafe.io/)
Github博客主页(http://jasonding1354.github.io/)
CSDN博客(http://blog.csdn.net/jasonding1354)
简书主页(http://www.jianshu.com/users/2bd9b48f6ea8/latest_articles)
百度搜索jasonding1354进入我的博客主页

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181026.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 一个简单的Spring的AOP例子

    一个简单的Spring的AOP例子

    2021年5月10日
    94
  • 关于BCG界面库「建议收藏」

    关于BCG界面库「建议收藏」分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!               开发程序,经常为漂亮而

    2022年10月8日
    0
  • maven配置环境变量失败解决办法

    maven配置环境变量失败解决办法配置maven路径什么的统统正确,最后测hi不成功。在网上搜索了好多资料方法都解不了具体问题具体对待吧,如果有和我类似的小伙伴,可以尝试一下我的这个办法,在maven路径后面加/binpath变量中测试输入mva-v(中间有个空格)成功!如果还是不能解决也可以参这个https://blog.csdn.net/xudaliang_…

    2022年7月25日
    17
  • ubuntu桌面主题更换_ubuntu18主题美化

    ubuntu桌面主题更换_ubuntu18主题美化本文针对的是ubuntu的GNOME桌面环境,根据ubuntu官方消息,ubuntu已经放弃原来的Unity桌面环境,改回最先使用的GNOME桌面环境,如果你觉得Gnome的默认桌面环境不够Fashion的话,可以下载自己喜欢的主题风格来更换,具体教程如下。在开始前,先放上几张我自己的ubuntu界面0.确认你的桌面环境首先确认你的桌面环境是GNOME,确认方法可以选择…

    2022年9月24日
    0
  • Android开发指南-三维图形

    Android开发指南-三维图形

    2021年8月14日
    61
  • Hadoop入门——初识Hadoop

    Hadoop入门——初识Hadoop推荐一个微信商城,扫码即可购买,性价比超高,程序员必备店主就是博主,有任何问题可随时通过商城内的微信与博主取得联系一.hadoop是什么Hadoop被公认是一套行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力。几乎所有主流厂商都围绕Hadoop开发工具、开源软件、商业化工具和技术服务。今年大型IT公司,如EMC、Microsoft、Intel、Teradata、…

    2022年6月2日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号