gpt4 book ai didi

python - 如何在 Python 中实现 MATLAB 函数 wavread()?

转载 作者:行者123 更新时间:2023-11-28 22:49:42 24 4
gpt4 key购买 nike

在 Matlab 中:

[s, fs] = wavread(file);  

由于s中每个元素的值都在-1到1之间,所以我们使用它的wavread函数导入scikits.audiolab。

from scikits.audiolab import wavread
s, fs, enc = wavread(filename)

但是当我输入相同的wav文件时,s在Matlab和Python中的值是完全不同的。我怎样才能获得与在 MATLAB 中相同的 s 输出?

附注wav 文件是以 44100Hz 采样的简单 16 位单声道文件。

最佳答案

Matlab wavread()函数返回标准化数据作为默认值,即它将所有数据缩放到 -1 到 +1 的范围内。如果您的音频文件是 16 位格式,那么原始数据值将在 -32768 到 +32767 的范围内,这应该与 scikits.audiolab.wavread() 返回的范围相匹配。 .

要将此数据标准化到 -1 到 +1 范围内,您需要做的就是将数据数组除以具有最大幅度的值(在本例中使用 numpy 模块):

from scikits.audiolab import wavread
import numpy

s, fs, enc = wavread(filename) # s in range -32768 to +32767
s = numpy.array(s)
s = s / max(abs(s)) # s in range -1 to +1

请注意,您还可以使用 'native'正如 horchler 在他的评论中所建议的那样,使用 Matlab 函数返回非标准化数据值的选项。

[s, fs] = wavread(file, 'native');

关于python - 如何在 Python 中实现 MATLAB 函数 wavread()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23461122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com