【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进入我的博客主页

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • PyTorch使用LMDB数据库加速文件读取[通俗易懂]

    PyTorch使用LMDB数据库加速文件读取[通俗易懂]PyTorch使用LMDB数据库加速文件读取文章目录PyTorch使用LMDB数据库加速文件读取背景介绍具体操作LMDB主要类`lmdb.Environment“lmdb.Transaction“Imdb.Cursor`操作流程创建图像数据集配合DataLoader参考链接原始文档:https://www.yuque.com/lart/ugkv9f/hbnym1对于数据库的了解较少,文…

  • 第二十九课.回声状态网络ESN[通俗易懂]

    第二十九课.回声状态网络ESN[通俗易懂]目录EchoStateNetworkEchoStateNetwork回声状态网络(EchoStateNetwork)又称为库计算,即ReservoirComputing,被视为是一种神经网络的扩展。ReservoirComputing多用于处理时间序列的预测问题,比如下图:给定一个信号序列:u(0),u(1),…,u(Nt−1)\textbf{u}(0),\textbf{u}(1),…,\textbf{u}(N_{t}-1)u(0),u(1),…,u(Nt​−1)给定

  • 向 Git 服务器添加 SSH 公钥

    向 Git 服务器添加 SSH 公钥

  • idea2021.7激活码【永久激活】「建议收藏」

    (idea2021.7激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • 解决新版chrome跨域问题:cookie丢失以及samesite属性问题「建议收藏」

    解决新版chrome跨域问题:cookie丢失以及samesite属性问题「建议收藏」最近在使用前后端分离开发的时候,遇到了一个诡异的问题,无论如何设置跨域,同一个页面获取到的session始终不一致。发现问题:登录界面前后端分离,ajax提交登录时出错验证码接口和登录接口的session不一致(跨域问题)在网上搜索跨域问题,重新设置,问题依旧错因排除:ajax允许cookie(已经设置xhrFields:{withCredentials:true})springboot尝试设置了多种跨域方法(springboot解决跨域)深入分析:使用其它浏览器(fi

  • pycharm21 永久激活【2022最新】2022.01.31「建议收藏」

    (pycharm21 永久激活)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlCJM5ZJBPHS-eyJsaWN…

发表回复

您的电子邮箱地址不会被公开。

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