找了好久也没找到同时包含衡量响度、波动度、粗糙度这些心理声学参量的py库或者代码,
看到matlab里有,火速研究python调用matlab函数。
环境说明
- MATLAB R2018a
- Python 3.9 -> Python 3.6
心理声学参量评估
MATLAB的评估函数位于Audio Toolbox里。一般安装的MATLAB里都有。需要注意的是,计算响度和尖锐度的函数在 R2020a 版本才引入MATLAB,而粗糙度的评估参数在R2021a才引入。所以,想要顺利使用以上函数,MATLAB版本至少要是R2021a。
- 为什么我的版本是R2018a却能使用R2021a的函数呢?
答: 把这些工具箱里的需要的函数一个个复制进去(泪)不再装一个新版本是因为R2018a是实验室服务器的公用MATLAB,而我们的home目录已经不堪重负了(泪)
Python 版本与MATLAB版本的对应关系
火速建立了虚拟环境。
激活MATLAB API
官方教程 => 安装用于 Python 的 MATLAB 引擎 API
- 进入MATLAB的安装目录
cd matlabroot/extern/engines/python
- (可选)激活虚拟环境, 使用对应版本的Python
- 运行
python setup.py install
- OK~
检验是否成功安装matlab包,在python环境里试一下
import matlab
import matlab.engine
都没有问题基本就安装成功啦~
Python调用MATLAB函数
安装了matlab包以后可以直接调用matlab的函数了,需要注意的是某些时候需要对数据进行转换。
数据转换参考
调用MATLAB函数的格式就是eng.XXXXXX()
import matlab
import matlab.engine
from librosa import load
a, sr = load('./enhanced_signal.wav', sr=None)
N = len(a)
eng = matlab.engine.start_matlab() #启动MATLAB引擎
a = np.reshape(a, (N,1)).tolist() #这个tolist()是必须的,不支持ndarray
a = matlab.double(a) #创建具有 double 数据类型的 MATLAB 数组
sr = float(sr) #这是保证输入是浮点数,如果MATLAB函数接受整数,此处需保证sr是int类型。
loudness = eng.acousticLoudness(a, sr)
唯一缺点是每次等matlab环境还蛮久的…